ユーザーがpam_exec.so
(またはそれ以外)でログインしたときに、スクリプトをrootとして実行するにはどうすればよいですか?スクリプトが機能するには、ユーザーに関する情報が必要です。
ユーザーがログインするたびにrootとしてスクリプト(/path/script.sh
)を実行したいと思います。また、(たとえば、環境変数やスクリプトの引数として)ログインしたユーザーを知る必要があります。 CentOS 7の最新バージョンを使用しています。
私は現在/etc/pam.d/system-auth
を編集して次の行を追加しています:
session optional pam_exec.so /path/script.sh
これは、Sudo su
を使用してユーザーになると正常に機能しますが、それ以外の場合はユーザーに対して認証を行うと機能しません(スクリプトはrootとして実行する必要があります)。言い換えると、
$ su - robot7
Password:
/path/script.sh failed: exit code 1
-bash-4.2$
失敗する
$ Sudo su - robot7
Last login: Thu Jun 14 09:33:56 MDT 2018 on pts/5
-bash-4.2$
が機能し、期待どおりにスクリプトを実行します。ただし、ユーザーが切断したときにもスクリプトが実行されます。 2番目の場合の変数$PAM_USER
は正しいユーザー名です(rootではなくrobot7)。
このスクリプトは、ユーザーがスクリプトを無効にできないようにする必要があり、シェルが異なる可能性がある実稼働環境で使用されます。 .bashrc
などのスクリプトを使用して実行することはできません。
コマンドを/etc/pam.d/system-auth
でauth
ではなくsession
で実行するように設定すると(同様の質問で提案されているように)、neverが実行されます。
seteuid
をpam_exec.so
コマンドに追加すると、ユーザーが認証されたときにスクリプトを実行できますが(su - robot7
)、SSHでスクリプトは実行されません(ユーザーがログを記録する主要な方法です)に)。
セキュリティコンテキストにより、スクリプトは実行されませんでした。 systemd
ログは、すべてのユーザーがスクリプトの実行を許可されていても、スクリプトが実行に失敗したことを示唆しています。一部のセキュリティポリシーでは、スクリプトのパスが適切ではありませんでした。
スクリプトを/bin
に移動すると、エラーはすぐに解決されました。