web-dev-qa-db-ja.com

pam_exec.soを使用して、ユーザーがログインしたときに(ユーザー情報を抽出しながら)rootとしてスクリプトを実行しますか?

質問

ユーザーが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-authauthではなくsessionで実行するように設定すると(同様の質問で提案されているように)、neverが実行されます。

編集する

seteuidpam_exec.soコマンドに追加すると、ユーザーが認証されたときにスクリプトを実行できますが(su - robot7)、SSHでスクリプトは実行されません(ユーザーがログを記録する主要な方法です)に)。

4
skyrocket

セキュリティコンテキストにより、スクリプトは実行されませんでした。 systemdログは、すべてのユーザーがスクリプトの実行を許可されていても、スクリプトが実行に失敗したことを示唆しています。一部のセキュリティポリシーでは、スクリプトのパスが適切ではありませんでした。

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

2
skyrocket