アカウントに別のパスワードを設定したいと思います。たとえば、特定のUSBスティックを挿入すると、単純なパスワードが使用されます。アイデアは:コンピュータから離れてスティックを持って行くと、簡単なパスワードが無効になるということです。
私の一般的な考えは次のとおりです。
- udevを使用してスティックを検出し、その中にあるいくつかのデータを検出し(udevで実行されるスクリプトを使用)、それに応じて応答することができます(スティックを分離したときに削除されるファイルの生成)。これは簡単です。
- PAMにファイルが存在することを確認し、それに応じてパスワードデータベースを選択してください。
主な質問は次のとおりです(つまり、質問の構造を正しく理解した場合)。pam_unix2
別のシャドウファイルを使用するように設定できますか?私はこのマニュアルページを見ましたが、pam_unix2
このモジュールを使用すると、glibc NSSがこの決定を下すことができるので、これは不可能なようです。
答え1
pam_unixとpam_unix2はどちらもlibcを使用してパスワードハッシュを探し、Glibcには位置指定/etc/nsswitch.conf
と/etc/shadow
ハードコーディング機能があります。再コンパイルするのと同じくらいpam_unix
簡単ではありませんpam_unix2
。どちらも一般的なNSSメカニズムでパスワードを検証し、知識/etc/passwd
と/etc/shadow
NISを使用してパスワードを変更します。
ただし、次のものを使用できます。pam_pwdfile
基準寸法。私はそれを使用したことがありませんが、説明があなたが望むものと正確に一致するようです。
PAMモジュールを使用すると、同様の構造を持つ任意の名前付きテキストファイルを使用して
/etc/passwd
ユーザーを認証できます。
または、次のものを使用できます。pam_userdb
、パラメータとして渡されたファイル名を使用して、Berkeley DB形式のデータベースでパスワードを確認します。
USB スティックの存在を検出するには、別の PAM モジュールが必要です。pam_listfile
その仕事にぴったりなようです。 USBキーをインストールし、特定の場所にのみインストールするようにudevルールを並べ替えます。たとえば、短いパスワードを使用できるユーザー名のリストを含むファイルを/media/authentication-key
作成します。users.txt
PAMスタックでより複雑なテストを実行するには、次のものを使用できます。`pam_exec。
/etc/shadow
これは強力で/etc/passwd.weak
弱いパスワードを含むと推定されるスタックです。警告:テストされておらず、PAMに慣れていないので、慎重に確認してください。
auth [success=ignore default=1] pam_listfile.so file=/media/authentication-key/users.txt iter=user sense=allow onerr=fail
auth [success=1 default=bad] pam_unix.so
auth [success=ok default=bad] pam_pwdfile.so pwdfile=/etc/passwd.weak
auth requisite pam_deny.so
答え2
私が考えた難しい部分は非常に簡単な操作で置き換えることができると思いました。
おそらく、1つのパスワードファイルまたは別のパスワードファイルを使用するようにPAMを設定する必要はありません。これを/etc/shadow
シンボリックリンクに置き換え、udevの追加イベントと削除イベントによってトリガーされたスクリプトがこのシンボリックリンクを置き換えて、通常のPAMプロセスが(暗黙的に)使用できるようにする必要があります。ファイルの1つまたは別のバージョンです。
これにより、特定のアカウントがハードウェアトークンなしでログインするのを完全にブロックできます。
答え3
あなたがシャドウイージーパスワード、ユーザー名、パスワードの交換を承認するデバイスUUIDを含むパスワードファイルパスワードは簡単ではありません。そして簡単なパスワード暗号化されました。
これは、単純なパスワードを必要とするユーザーにのみ適用されます。
暗号化された文字列をetc/shadow
。
ユーザーを追加/削除したりパスワードを変更したりすると、暗号化された2つの文字列が一致せず、置き換えが発生しません。したがって、別の方法で作業するには、まずパスワード全体でログインする必要があります。
シャドウファイルに触れたときにバッテリーが足りなくなったり、スクリプトがクラッシュした場合はどうなるか想像したくありません。
問題は、あらゆるタイプのログイン、さらにはリモートログインでも機能することです。誰かがSSH経由でコマンドを送信しても同じです。しかし、動作します:)