명령을 사용하여 사용자로 전환하려고 하면 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
할 수 있으면 사용자를 변경할 때 비밀번호를 묻지 않으므로 비밀번호를 전혀 묻지 않습니다 .sudo
root
su -
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 읽기)