私はこれを受け継いだ。簡単に言えば、いくつかのコマンドを実行するためにシェルを呼び出す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
同じコマンドを実行するためにこれらのコマンドを実行できる構成がない限り、コマンドはパスワードの入力を求めます。の使用は常に明示的です。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
(デフォルトではオフですが、非常に限られた状況ではセキュリティを向上させることができますが、一部のディストリビューションではそれを追加します)。