質問
ユーザーが(または他の方法で)ログインしたときにrootとしてスクリプトを実行するにはどうすればよいですかpam_exec.so
?スクリプトを実行するには、ユーザーに関する情報が必要です。
問題と環境
/path/script.sh
ユーザーがログインするたびに root でスクリプトを実行したいと思います。また、ログインしたユーザー(スクリプトの環境変数やパラメータなど)も知っておく必要があります。私は最新バージョンの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$
期待どおりに動作し、スクリプトを実行しますが、注意が必要です。ユーザーが切断したときにもスクリプトが実行されます。$PAM_USER
2番目のケースの変数は正しいユーザー名(rootではなくrobot7)です。
このスクリプトは本番環境で使用され、ユーザーはそれを無効にすることはできず、他のシェルがある可能性があります。同様のスクリプト.bashrc
や他のスクリプトを使用して実行することはできません。
代わりに/etc/pam.d/system-auth
実行するようにコマンドを設定すると(同様の質問で提案されているように)auth
session
いいえ走る。
編集する
seteuid
コマンドに追加すると、pam_exec.so
ユーザーが認証()するときにスクリプトを実行できますが、ユーザーのデフォルトのsu - robot7
ログイン方法(SSH)を介して実行することはできません。
答え1
セキュリティコンテキストのため、スクリプトは実行されません。ログは、systemd
すべてのユーザーがスクリプトを実行できるにもかかわらず、スクリプトを実行できないことを示します。一部のセキュリティポリシーはスクリプトパスが好きではありません。
スクリプトをに移動した/bin
ところ、エラーはすぐに解決されました。