0

PAM モジュールpam_execを使用して、セッション中にアカウントのセットアップとティアダウン アクティビティを実行したいと考えています。何が起こっているのかを確認できるように、いくつかのランタイム データを実行してログに記録する簡単なテスト スクリプトを作成しました。

exec されたスクリプトは、PAM をトリガーするコマンドを実行している人の有効な UID によって実行可能でなければならないように思えます。意味あり。ただし、このプロセスにはもう少しセキュリティが必要です。たとえば、アカウントのログイン/ログアウト時にレコードをデータベースに突っ込むスクリプトがある場合、そのスクリプトは常にすべてのユーザーが実行できる必要があるように思えます。

ルートまたはその他の特別な目的のアカウントのみがスクリプトを表示および実行できるようにpam_exec suidし、特権のないユーザー用のスクリプトを用意することを強く望んでいます。

なんで?データベーススクリプトの場合、ユーザーがログインして手動でスクリプトを実行し、一見「ログアウト」することは望ましくありません。

スクリプトを「sudoers」ファイルに入れようと考えましたが、それでも誰でも好きなときにスクリプトを実行できます。

唯一のオプションは、pam_exec をハックして「run as」オプションを許可することのようです。

金曜日の午後遅く、些細なことを見逃しているかもしれません。より良い方法はありますか?

4

2 に答える 2

1

exec されたスクリプトは、PAM をトリガーするコマンドを実行している人の有効な UID によって実行可能でなければならないように思えます。意味あり。

「セッション」行の下で pam_exec を実行しているようです。「auth」から pam_exec スクリプトを実行すると、root ユーザー (UID 0) によって実行されるため、ユーザーが実行可能にする必要はなくなります。これにより、ユーザーはスクリプトを手動で実行してログアウトを偽装することができなくなります。

おそらく「アカウント」行からスクリプトを実行することもできます。pam モジュールがユーザー権限で実行されるのは、pam_open_session() または pam_close_session() を実行しているときだけだと思います。

于 2013-05-23T22:54:41.687 に答える
0

私は問題を理解しているとは完全にはわかりません。ユーザーログインセッションを追跡している場合、それはrootとして実行されているプロセスによって設定されます(sshd、login、またはその他の同様のプログラム)。通常、PAMスタックはすべて、セッションを開くことでルートとして実行されます。セッション作成プロセスのどこでUIDが永続的に変更されるかは完全にはわかりませんが、utmpなどへの書き込みはすべてrootとして実行する必要があるため、プロセスのかなり遅い段階です。

したがって、通常のログインセッションでこの問題が発生する可能性はほとんどありません。root以外のユーザーがPAMを使用する主な場所は、ユーザーに代わって実行されるスクリーンセーバーなどですが、ユーザーにスクリプトを実行させたくない場合とまったく同じように見えます。

sudoまたはsuの一部として何かを実行しようとしている場合、問題はpam_exec、デフォルトでプログラムを実際のユーザーIDとして実行することである可能性があります。そのような場合、あなたが望むことを達成するために、あなたは効果的なユーザーIDとしてプログラムを実行する必要があるかもしれないと思います。それを行うように指示するseteuidPAMオプションがあります。pam_execpam_exec

于 2013-03-17T06:36:06.447 に答える