sudo 또는 su를 사용하여 쉘 스크립트에서 사용자 전환

sudo 또는 su를 사용하여 쉘 스크립트에서 사용자 전환

나는 이것을 물려 받았습니다. 간단히 말해서 일부 명령을 실행하기 위해 셸을 호출하는 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동일한 명령을 실행하기 위해 이러한 명령을 실행할 수 있는 구성이 없는 한 명령은 암호를 묻는 메시지를 표시합니다. 의 사용은 항상 명시적입니다.emailusersusu emailuser -c …emailusersudo

sudo 규칙이 주어지면 다음을 원할 수도 있습니다.

sudo su emailuser -c …

sudo그러나 sudo 규칙은 이상합니다. su다른 사용자에게 실행 권한을 부여하는 것은 의미가 없습니다. 대상 사용자를 지정하도록 변경하고 잊어 버리십시오 su.

scriptuser ALL = (adminuser) NOPASSWD: /path/to/a/script/script ""
scriptuser ALL = (emailuser) NOPASSWD: mutt

Mutt는 쉘 이스케이프를 허용하므로 명령을 emailusermutt로 제한해도 실제로 보안이 향상되지는 않지만 우발적인 오용을 줄일 수 있습니다. 스크립트에서 다음을 사용하십시오.

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(기본적으로 꺼져 있지만 극히 제한된 상황에서 보안을 향상시킬 수 있지만 일부 배포판에서는 이를 추가합니다).

관련 정보