Linux

不同的密碼取決於插入的設備

  • May 29, 2014

我想為我的帳戶設置不同的密碼:當(例如)插入某個 USB 記憶棒時,將使用一個簡單的密碼。這個想法是:如果我離開我的電腦,那麼我會隨身攜帶棒子,那麼簡單的密碼就會被禁用。

我的總體構想是:

  1. 用 udev 檢測記憶棒,可能會檢測到上面的某些數據(使用 udev 執行的腳本)並做出相應的反應(例如,創建一個在拔出記憶棒時刪除的文件)。這應該很容易。
  2. 讓 PAM 檢查此文件是否存在並相應地選擇密碼數據庫。

主要問題可能是(即如果我正確理解問題的結構):可以pam_unix2配置為使用另一個影子文件嗎?我剛剛查看了手冊頁,pam_unix2似乎這是不可能的,因為這個模組讓 glibc NSS 做出這個決定。

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 格式的數據庫中的密碼。

現在,要檢測 U 盤的存在,您需要另一個 PAM 模組。pam_listfile看起來很適合這份工作。安排一個安裝您的 USB 密鑰的 udev 規則,並且僅將該 USB 密鑰安裝在特定位置,例如/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

引用自:https://unix.stackexchange.com/questions/132367