Yubico PAM 模組提供了一種將 YubiKey 整合到現有用戶身份驗證基礎架構中的簡單方法。 GNU/Linux、Solaris 和 Mac OS X 以及其他專用應用程式(例如 NCSA MyProxy)使用 PAM 進行使用者驗證。
此模組適用於多用戶係統。主要操作模式是使用 YubiKey 驗證服務(例如 YubiCloud 或使用「urllist」參數配置的私有服務)進行線上驗證。
在 2.6 版本中,也可以透過使用 YubiKey 2.2 及更高版本中的 HMAC-SHA1 質詢-回應來實現離線驗證。這就引入了 ykpersonalize 套件中 libykpers-1 的依賴項。透過--without-cr
進行configure
以避免這種依賴性。
開發社群透過 GitHub 專案頁面進行協調。
該項目是根據 BSD 許可證獲得許可的。請參閱文件 COPYING 以了解確切的措辭。對於此套件中指定為 YYYY-ZZZZ 的任何版權年份範圍,請注意該範圍指定該閉合間隔中的每個年份。
如果您使用的是官方打包版本,請跳至下一部分。
您可以透過以下命令使用 Git 查看原始程式碼:
$ git 克隆 https://github.com/Yubico/yubico-pam.git
這將建立目錄yubico-pam
。
必須安裝 Autoconf、automake、libtool、asciidoc、xsltproc 和 docbook-xsl 才能建立可編譯的原始碼樹。
使用以下命令產生建置系統:
$ cd yubico-pam $ autoreconf --安裝
您需要安裝 libykclient(ykclient.h、libykclient.so)和 libpam-dev(security/pam_appl.h、libpam.so)。它又需要您需要安裝的 cURL 和 libyubikey。
質詢-回應離線身分驗證需要來自 yubikey-personalization 專案的 libykpers-1:
自測試需要安裝了 Net::LDAP::Server 模組的 perl。
建置系統使用 Autoconf 來設定建置系統運行:
./配置
使用 --without-ldap 停用 ldap 支援。
然後建置程式碼,運行自測試並安裝二進位檔案:
進行檢查安裝
Fedora/EPEL 中已經有 yubico-pam 的包,可以使用 yum 安裝:
$ sudo yum install pam_yubico
yubico-pam 有一個 Ubuntu PPA(個人套件存檔),可以在相當現代的 Ubuntu 平台上使用以下命令進行安裝:
$ sudo add-apt-repository ppa:yubico/stable $ sudo apt-get 更新 $ sudo apt-get install libpam-yubico
安裝後請參閱檔案/usr/share/doc/libpam-yubico/README.Debian
。
yubico-pam 和支援的 Yubico 軟體包有對應的 FreeBSD 連接埠。安裝:
$ cd /usr/ports/security/pam_yubico $ 使安裝乾淨
進階配置說明可在此處取得。
透過在/etc/pam.d/
中的對應檔案中新增一行來將其安裝到您的 PAM 設定中:
驗證足夠 pam_yubico.so id=[您的 API 用戶端 ID] 調試
並將 pam_yubico.so 移至 /lib/security/ (或系統中 PAM 模組所在的任何位置):
mv /usr/local/lib/security/pam_yubico.so /lib/security/
有關更多信息,請參閱項目文檔。
支援的 PAM 模組參數有:
授權文件 | 指示儲存 YubiKey 令牌 ID 到使用者名稱的對應的檔案的位置。 |
ID | 您在 Yubico 驗證伺服器中的 API 用戶端 ID。如果您想使用預設的 YubiCloud 服務,請前往此處。 |
鑰匙 | 以 base64 格式指示您的用戶端金鑰。客戶端金鑰也稱為 API 金鑰,它提供客戶端(您)和驗證伺服器之間通訊的完整性。如果您想獲得一個與預設 YubiCloud 服務一起使用的產品,請前往此處。 |
偵錯 | 啟用調試輸出。 |
偵錯檔案 | 要寫入調試的文件名,文件必須存在並且是常規文件。標準輸出是預設值。 |
總是好 | 使所有身份驗證嘗試都能成功(也稱為演示模式)。 |
嘗試先透過 | 在提示使用者輸入密碼之前,模組首先嘗試先前堆疊的模組的密碼,以防也滿足該模組的要求。 |
使用第一遍 | 參數 use_first_pass 強制模組使用先前堆疊的模組密碼,並且永遠不會提示使用者 - 如果沒有可用的密碼或密碼不合適,使用者將被拒絕存取。 |
總是提示 | 如果設置,則不要嘗試進行查找來確定使用者是否配置了 YubiKey,而是無論如何都會提示輸入。這在啟用 ldap_bind_as_user 但該模組用於讀取使用者密碼的情況下非常有用(在 YubiKey+OTP 身份驗證場景中)。 |
努洛克 | 如果設置,當授權映射檔案或 LDAP 中沒有為使用者聲明令牌時,不會失敗。這可用於使 YubiKey 身份驗證可選,除非使用者俱有關聯的令牌。 |
ldap_starttls | 如果設定,請在嘗試綁定到 LDAP 連線之前向 LDAP 連線發出 STARTTLS 命令。這是僅偵聽連接埠 389 但仍需要 TLS 的伺服器的常見設定。 |
ldap_bind_as_user | 如果設置,則使用登入的使用者綁定到 LDAP。這將使用使用者透過 PAM 提供的密碼。如果設定了此項,則必須也設定 ldapdn 和 uid_attr。啟用此功能將導致「ldap_bind_user」和「ldap_bind_password」被忽略 |
網址列表 | 要使用的 URL 範本清單。這是透過呼叫 ykclient_set_url_bases 來設定的。此清單的格式應為: |
網址 | 不應使用此選項,請改用 urllist 選項。指定要使用的 URL 模板,這是透過呼叫 yubikey_client_set_url_template 設定的,預設為: |
卡帕斯 | 指定X509證書的儲存路徑。如果“url”和“ldap_uri”中分別使用“https”或“ldaps”,則這是必要的。 |
凱福 | 允許使用 CA 捆綁包而不是路徑的選項。 |
代理人 | 指定連線到驗證伺服器的代理程式。有效方案為 http://、https://、socks4://、socks4a://、socks5:// 或ocks5h://。 Socks5h 要求代理程式進行 dns 解析。如果未指定方案或端口,則將使用 HTTP 代理端口 1080。 |
詳細_otp | 此參數用於在輸入時顯示 OTP(一次性密碼),即啟用輸入字元的終端回顯。如果您使用雙重認證,建議您不要使用此選項,因為這會在螢幕上顯示您的密碼。這需要使用PAM模組的服務來顯示自訂欄位。此選項不能與 OpenSSH 一起使用。 |
ldap_uri | 指定 LDAP 伺服器 URI(例如 ldap://localhost)。 |
LDAP伺服器 | 指定 LDAP 伺服器主機(使用預設 LDAP 連接埠)。已棄用。請改用“ldap_uri”。 |
LDAPDN | 指定儲存使用者的 dn(例如:ou=users,dc=domain,dc=com)。 |
ldap_clientcertfile | 與 LDAP 伺服器通訊時所使用的用戶端憑證檔案的路徑。請注意,這也需要設定“ldap_clientkeyfile”。 |
ldap_client金鑰文件 | 與 LDAP 伺服器通訊時與用戶端憑證一起使用的金鑰的路徑。請注意,這也需要設定“ldap_clientcertfile”。 |
ldap_bind_user | 嘗試 LDAP 綁定的使用者。 |
ldap_bind_password | 用於 LDAP 綁定的密碼。 |
ldap_過濾器 | 用於嘗試在 LDAP 中尋找正確物件的 LDAP 過濾器。在此字串中, |
ldap_cacert文件 | 用於 LDAP 連線的 CA 憑證檔案。 |
使用者屬性 | 指定用於儲存使用者名稱的 LDAP 屬性(例如:cn)。 |
yubi_attr | 指定用於儲存 YubiKey ID 的 LDAP 屬性。 |
yubi_attr_前綴 | 指定 LDAP 屬性值的前綴(如果是通用屬性),用於儲存多種類型的 ID。 |
令牌 ID 長度 | OTP 前綴的 ID 長度(如果使用 YubiCloud,則為 12)。 |
模式 | 運作方式。使用「客戶端」透過 YubiKey 驗證服務(例如 YubiCloud)進行線上驗證,或使用具有 HMAC-SHA-1 挑戰-回應配置的 YubiKeys 使用「挑戰-回應」進行離線驗證。有關如何配置離線質詢-回應驗證的更多詳細信息,請參閱手冊頁 ykpamcfg(1)。 |
chalresp_路徑 | 在系統範圍配置的情況下用於儲存質詢檔案的目錄(與儲存在使用者主目錄中的質詢檔案相反)。該位置只能由 root 讀寫。有關此類設定的更多信息,請參閱 |
mysql_伺服器 | 用於映射的 mysql 伺服器的主機名稱/位址。 |
mysql_端口 | mysql伺服器的網路連接埠。 |
mysql_用戶 | 存取mysql資料庫的使用者。 |
mysql_密碼 | mysql 用戶的密碼。 |
mysql_資料庫 | 要使用的 mysql 資料庫。 |
如果您使用“調試”,您可能會發現創建一個世界可寫入的日誌檔案很有用:
touch /var/run/pam-debug.log
chmod go+w /var/run/pam-debug.log
筆記 | 請記住,對系統的實體存取通常可以規避安全控制。如果攻擊者可以實際存取您的系統(例如留在飯店房間的筆記型電腦)並且可以啟動到單一使用者模式,他們可以在您的系統配置中停用 yubico-pam。 |
必須在 YubiKey 令牌 ID 和它所附加的使用者 ID 之間建立對應。有兩種方法可以執行此操作,一種是集中在一個檔案中,另一種是單獨地,使用者可以在其主目錄中建立映射。如果正在使用中央授權映射文件,則不會使用使用者主目錄映射,反之亦然,如果正在使用使用者主目錄映射,則不會使用中央授權映射文件。
建立/etc/yubikey_mappings
,該檔案必須包含您想要允許使用 YubiKey 進入系統的每個使用者的使用者名稱和 YubiKey 令牌 ID,並以冒號分隔(與 passwd 檔案的格式相同)。
映射應該如下所示,每行一個:
<第一個使用者名稱>:: :...。 <第二個使用者名稱>: : :...。
現在將authfile=/etc/yubikey_mappings
新增至 PAM 設定行,如下所示:
auth 足夠 pam_yubico.so id=[您的 API 用戶端 ID] authfile=/etc/yubikey_mappings
每個使用者在其主目錄中建立一個~/.yubico/authorized_yubikeys
檔案並將映射放置在該檔案中,該檔案必須只有一行:
<使用者名稱>::
這與 SSHauthorized_keys 檔案的概念非常相似。
您可以透過多種方式取得 YubiKey 令牌 ID。一種方法是刪除使用 YubiKey 產生的任何 OTP(一次性密碼)的最後 32 個字元。另一種方法是使用 modhex 計算器。
輸入您的 YubiKey OTP 並進行轉換,您的 YubiKey 令牌 ID 為 12 個字符,列出為:
Modhex 編碼: XXXXXXX
不確定最後一點是什麼意思?以下是取得 OTP 副本的方法。
打開終端
按下 YubiKey 的按鈕,它會將 OTP 輸出到 shell 中:
$ cccccccgklgcvnkcvnnegrnhgrjkhlkfhdkclfncvlgj
bash: cccccccgklgcvnkcvnnegrnhgrjkhlkfhdkclfncvlgj: command not found
可以將其貼到 Modhex_Calculator 頁面中。
這要求您啟用 pam 模組並開啟“調試”。當提示輸入 YubiKey 時,請按按鈕。 pam 模組會將偵錯資訊(包括 OTP 和令牌 ID)列印到 shell - 將 ID 複製到設定檔中,然後您就可以開始運行了。
“youruser”的 YubiKey: [pam_yubico.c:pam_sm_authenticate(867)] 轉換回傳 44 個位元組 [pam_yubico.c:pam_sm_authenticate(885)] 跳過前 0 個位元組。長度為 44,token_id 設定為 12,令牌 OTP 始終為 32。 [pam_yubico.c:pam_sm_authenticate(892)] OTP:ccccccclabcabkhbdncicglfltnukadfoifadfhhhhfe ID:ccccccclabcab
在強制模式(Fedora 17+ 上的預設模式)下使用 SELinux 的使用者可能會遇到服務登入問題,包括透過 polkit-agent-helper-1、sshd 和登入驗證的服務。
這在 Red Hat bugzilla 中有記錄,包括 ssh 的解決方法(可以為其他服務建立等效檔案)。處於「寬容」模式的系統將產生 AVC 警告,但身份驗證將成功。
若要確定您是否強制執行 SELinux,請執行sestatus
指令。
如果您想在 Linux 控制台登入時使用 YubiKey 進行身份驗證,請將以下內容新增至/etc/pam.d/login
的頂部:
驗證足夠 pam_yubico.so id=[您的 API 用戶端 ID] 調試
請參閱 Michael Ludvig 的範例 Active Directory 架構擴展,以了解 YubiKey 公用 ID 屬性儲存/與特定使用者帳號的關聯:https://github.com/mludvig/yubikey-ldap/tree/master/microsoft-schema
建立檔案“/etc/pam.d/openvpn”:
需要驗證 pam_yubico.so ldap_uri=ldap://contoso.com debug id=[您的 API ID] yubi_attr=YubiKeyID ldapdn=DC=contoso,DC=com ldap_filter=(&(sAMAccountName=%u)(objectClass=user)(memberOf=CN=somegroup,DC=contoso,DC=com)) [ldap_bind_user=CN=binduser、OU=服務帳號、DC=contoso、DC=com] ldap_bind_password=bind_password try_first_pass 需要帳戶 pam_yubico.so
建立檔案“openvpn.conf”
插件 openvpn-plugin-auth-pam.so openvpn