sudoまたはsuを使用してシェルスクリプトからユーザーを切り替える

sudoまたはsuを使用してシェルスクリプトからユーザーを切り替える

私はこれを受け継いだ。簡単に言えば、いくつかのコマンドを実行するためにシェルを呼び出すXMLファイルがあります。私が試したことはすべてスクリプトの2番目の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

ここに私のスクリプトの一部があります。 2回目の試みでのみ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(デフォルトではオフですが、非常に限られた状況ではセキュリティを向上させることができますが、一部のディストリビューションではそれを追加します)。

関連情報