나는 이것을 물려 받았습니다. 간단히 말해서 일부 명령을 실행하기 위해 셸을 호출하는 XML 파일이 있습니다. 내가 시도하는 모든 것은 스크립트의 두 번째 su에서 실패합니다. 다음은 몇 가지 실패 메시지입니다.
sudo: no tty present and no askpass program specified
또는
su: must be run from a terminal
또는
usage: sudo [-D level] -h | -K | -k | -V blah blah blah
여기 내 스크립트의 일부가 있습니다. 두 번째 시도에서만 su
실패합니다 .
<script language="shell"><![CDATA[
echo Doing some stuff
sudo -u adminuser /path/to/a/script/script
echo Emailing this stuff...
su emailuser -c "mutt -e 'set content_type=text/html' -s 'Your stuff is ready' -- ${WHOEVER_PARAM_RECIPIENT} < /tmp/emailingstuff.html"
]]></script>
나는 권한을 너무 많이 사용해서 어디에 사용하는지 잊어버립니다. 현재 sudoers에 있습니다:
# See the man page for details on how to write a sudoers file
Defaults:emailuser !authenticate
adminuser ALL=NOPASSWD: /bin/su - emailuser
adminuser ALL=NOPASSWD: /bin/su emailuser
adminuser ALL=NOPASSWD: /usr/bin/sudo su emailuser
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
답변1
사용자가 와 su
동일한 명령을 실행하기 위해 이러한 명령을 실행할 수 있는 구성이 없는 한 명령은 암호를 묻는 메시지를 표시합니다. 의 사용은 항상 명시적입니다.emailuser
su
su emailuser -c …
emailuser
sudo
sudo 규칙이 주어지면 다음을 원할 수도 있습니다.
sudo su emailuser -c …
sudo
그러나 sudo 규칙은 이상합니다. su
다른 사용자에게 실행 권한을 부여하는 것은 의미가 없습니다. 대상 사용자를 지정하도록 변경하고 잊어 버리십시오 su
.
scriptuser ALL = (adminuser) NOPASSWD: /path/to/a/script/script ""
scriptuser ALL = (emailuser) NOPASSWD: mutt
Mutt는 쉘 이스케이프를 허용하므로 명령을 emailuser
mutt로 제한해도 실제로 보안이 향상되지는 않지만 우발적인 오용을 줄일 수 있습니다. 스크립트에서 다음을 사용하십시오.
sudo -H -u emailuser mutt -e 'set content_type=text/html' -s 'Your stuff is ready' -- ${WHOEVER_PARAM_RECIPIENT} < /tmp/emailingstuff.html
스크립트에서 sudo를 호출하므로 requiretty
파일에서 플래그가 꺼져 있는지 확인하십시오 sudoers
(기본적으로 꺼져 있지만 극히 제한된 상황에서 보안을 향상시킬 수 있지만 일부 배포판에서는 이를 추가합니다).