사용자로 전환할 수 있지만 스크립트를 실행할 수 없는 이유는 무엇입니까?

사용자로 전환할 수 있지만 스크립트를 실행할 수 없는 이유는 무엇입니까?

명령을 사용하여 사용자로 전환하려고 하면 sudo su - kshitiz. 잘 작동하며 비밀번호를 입력하지 않고도 전환할 수 있습니다.

그러나 해당 사용자로 스크립트를 실행하려고 하면 비밀번호를 묻는 메시지가 나타납니다.

sudo -u kshitiz bash << EOF
> cat /home/ri/secret.txt
> EOF

왜 그럴까요?

고쳐 쓰다:

User ksh may run the following commands on this host:
    (root) NOPASSWD: /bin/su - kshitiz

답변1

식별 sudo한 대로 만 허용하도록 설정되어 있으므로 sudo su - kshitiz두 번째 명령은 실패할 수 있습니다.

그럼에도 불구하고 동일한 사용자 전환이 발생하지는 않습니다.

sudo su - kshitiz

su - kshitiz다음으로 실행하십시오 . 비밀번호 없이 수행 root할 수 있으면 사용자를 변경할 때 비밀번호를 묻지 않으므로 비밀번호를 전혀 묻지 않습니다 .sudorootsu -root

sudo -u kshitiz

비밀번호를 묻지 않으려면 직접 sudo토글을 요청하는 데 자체 구성이 필요합니다.kshitiz

사용자가 무엇이든 실행할 수 있도록 허용된 경우

sudo su - kshitiz -c bash ...

작동합니다. sudo허용하도록 구성할 수도 있습니다 .

sudo -u kshitiz ...

비밀번호 없이.

답변2

문제는 로그인 쉘 실행을 허용하지만 임의의 프로그램을 직접 실행하지 않는 sudo 구성이 있다는 것입니다.

사용자가 제한된 계정을 가지고 있는 경우, 즉 사용자의 로그인 셸이 몇 가지 특정 명령만 실행하는 프로그램인 경우 이는 bash를 실행할 수 있도록 허용하는 보안 제한 사항입니다.

사용자의 로그인 셸이 일반 명령 셸(예: bash)인 경우 임의의 명령을 실행할 수 있으므로 이 구성은 어리석은 것입니다. 를 실행하여 원하는 명령을 실행하면 되고 sudo, 쉘을 실행하므로 해당 쉘에 실행하려는 명령을 전달하십시오.

sudo /bin/su - kshitiz <<'EOF'
cat /home/ri/secret.txt
EOF

답변3

/etc/sudoers가 secure_path 또는 env_reset을 사용하고 있지 않은지 확인하세요. 다음을 사용해 볼 수도 있습니다.

sudo -E -u user   # -E overrides env_reset.

"sudo su .."가 널리 사용되는 것을 이해하지 못합니다. 중복됩니다.

  • sudo -i : 대화형 로그인 셸을 실행합니다(/root/.bashrc 및
  • /root/.profile) sudo -s : 비로그인 대화형 셸 실행(/root/.bashrc 읽기)

관련 정보