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


8

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

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

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

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


前者はドメイン不法占拠者によって占められているため、solarisinternals.comリンクをarchive.orgのアーカイブバージョンに置き換えました。指摘してくれた@Norman Grayに感謝します。
Stefan Lasiewski、2018

回答:


9

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

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

またはあなたの特定の設定に合うもの。

(トム・ショーがコメントで指摘したように、それsession required pam_mkhomedir.soは冗長になるでしょう。)


pam_mkhomedir.so行にタイプミスがあることを除いて良い-pam.confのタイプミスは良くない!-そして、check_zfs.shスクリプトがすべてのダーティーな作業を行う場合は、とにかくその行は必要ないと思います。
Tom Shaw、

@Tom PAMモジュールが代わりにホイールを再発明するのはなぜですか?
Andrew

2
問題のポイントは、「mkdir」ではなく「zfs create」を使用してホームディレクトリを作成することです。これは、pam_execを使用して実現されます。この時点でディレクトリが存在するため、後続のpam_mkhomedirは何もしません。
Tom Shaw、

確かに@TomShaw。
アンドリュー

3

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

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


よくわかりません。pam_mkhomedirがこれらのホームディレクトリを作成したり、/ etc / skelの内容をコピーしたりしていませんか?私はCコード(FreeBSDの場合)をちらっと見て、スケルトンファイルが新しく作成されたhomedirにコピーされる場所を確認できると思いました。
Stefan Lasiewski、

ユーザーがホームディレクトリを持っていないからといって、そのシステムに以前にログインしたことがないという意味ではありません。たとえば、ホームディレクトリが削除された可能性があります。ただし、これは主に意味論的で分裂する毛です。
Red Tux

@red:わかりました。質問を更新しました。
Stefan Lasiewski、

1

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.