接続機器によって異なるパスワード

接続機器によって異なるパスワード

アカウントに別のパスワードを設定したいと思います。たとえば、特定のUSBスティックを挿入すると、単純なパスワードが使用されます。アイデアは:コンピュータから離れてスティックを持って行くと、簡単なパスワードが無効になるということです。

私の一般的な考えは次のとおりです。

  1. udevを使用してスティックを検出し、その中にあるいくつかのデータを検出し(udevで実行されるスクリプトを使用)、それに応じて応答することができます(スティックを分離したときに削除されるファイルの生成)。これは簡単です。
  2. 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/shadowNISを使用してパスワードを変更します。

ただし、次のものを使用できます。pam_pwdfile基準寸法。私はそれを使用したことがありませんが、説明があなたが望むものと正確に一致するようです。

PAMモジュールを使用すると、同様の構造を持つ任意の名前付きテキストファイルを使用して/etc/passwdユーザーを認証できます。

または、次のものを使用できます。pam_userdb、パラメータとして渡されたファイル名を使用して、Berkeley DB形式のデータベースでパスワードを確認します。

USB スティックの存在を検出するには、別の PAM モジュールが必要です。pam_listfileその仕事にぴったりなようです。 USBキーをインストールし、特定の場所にのみインストールするようにudevルールを並べ替えます。たとえば、短いパスワードを使用できるユーザー名のリストを含むファイルを/media/authentication-key作成します。users.txtPAMスタックでより複雑なテストを実行するには、次のものを使用できます。`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経由でコマンドを送信しても同じです。しかし、動作します:)

関連情報