質問

質問

質問

ユーザーが(または他の方法で)ログインしたときに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_USER2番目のケースの変数は正しいユーザー名(rootではなくrobot7)です。

このスクリプトは本番環境で使用され、ユーザーはそれを無効にすることはできず、他のシェルがある可能性があります。同様のスクリプト.bashrcや他のスクリプトを使用して実行することはできません。


代わりに/etc/pam.d/system-auth実行するようにコマンドを設定すると(同様の質問で提案されているように)authsessionいいえ走る。

編集する

seteuidコマンドに追加すると、pam_exec.soユーザーが認証()するときにスクリプトを実行できますが、ユーザーのデフォルトのsu - robot7ログイン方法(SSH)を介して実行することはできません。

答え1

セキュリティコンテキストのため、スクリプトは実行されません。ログは、systemdすべてのユーザーがスクリプトを実行できるにもかかわらず、スクリプトを実行できないことを示します。一部のセキュリティポリシーはスクリプトパスが好きではありません。

スクリプトをに移動した/binところ、エラーはすぐに解決されました。

関連情報