web-dev-qa-db-ja.com

PAM:pam_mkhomedirの前にコマンドを実行しますか?

ユーザーがシステムにログインし、ホームディレクトリがない場合、 pam_mkhomedir を使用してユーザーのホームディレクトリを作成します。これは一般的な方法です。 pam_mkhomedirの簡単な説明は次のとおりです。

Pam_mkhomedir PAMモジュールは、セッションの開始時にユーザーのホームディレクトリが存在しない場合、それを作成します。これにより、分散ファイルシステムを使用したり、多数のディレクトリを事前に作成したりせずに、ユーザーが中央データベース(NIS、Kerberos、LDAPなど)に存在できるようになります。スケルトンディレクトリ(通常は/ etc/skel /)は、デフォルトファイルをコピーするために使用され、作成用のumaskも設定します。

ただし、これはZFSを実行するFreeBSD 8.2システムです。 ユーザーごとに1つのZFSファイルシステム が必要なため、最初にZFSコマンドを実行する必要があります。 pam_mkhomedirmkdirを実行できますが、zfs create /zpool/home/$USERのようなことを実行する必要があります。

ユーザーの最初のログインセッション中にPAMを使用してコマンドを実行できるかどうか誰かが知っていますか?

8

pam_exec と呼ばれるPAMモジュールがあります-ZFSボリュームをチェックおよび/または作成するスクリプトを作成する場合、これを既存のPAMルールにチェーンして、想定せずに物事を良好に保つことができますインタラクティブログイン、デフォルトのシェルとスケルトンディレクトリなど。たとえば、

session required pam_unix.so
session required pam_exec.so check_zfs.sh $PAM_USER

またはあなたの特定のセットアップに合うもの。

(Tom Shawがコメントで指摘したように、session required pam_mkhomedir.soは冗長です。)

9
Andrew

尋ねられたように、あなたの質問には無効な仮定が含まれていることを指摘する価値があります。PAMでさえ、それがユーザーの最初のログインであるかどうかはわかりません。ユーザーがホームディレクトリを持っているかどうかだけを知っています。

したがって、その警告を念頭に置いて、PAMがそれを実行しているわけではありませんが、ユーザーのホームディレクトリにあるドットファイルのチェックの後にドロップするコマンドを使用して、/etc/bashrcから何かを簡単に実行できます。ルートプライベートが必要ですか?適切にロックダウンされたSudo、またはsetuidバイナリのいずれかがおそらく最も効果的です。どちらのオプションも、ユーザーがドットファイルを変更または削除できない場所にドットファイルを配置するオプションを提供します(そのようなことに関心がある場合)。

3
BMDan

したがって、ここでは2つの選択肢があります。

1)ディレクトリを作成する前に、最初にpam_mkhomedirのソースを変更してzfsファイルシステムを作成します。 2)pam_mkhomedirを通常どおり実行し、ユーザーがログアウトした独自のzfsファイルシステムにないフォルダーがあるかどうかを確認するスクリプトを追加します。これらのケースを見つけたら、/ homeディレクトリを移動し、ファイルシステムを作成してから、ファイルをディレクトリに戻します。

ユーザーをメインの/ homeに最初の日そのままにしておくと、あまり問題が発生しないのではないかと思うので、後者のオプションの方が簡単です。

1
n8whnp