PAM - Arch Linux 中文维基

跳至內容

# PAM

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 PAM，最近一次同步於 2024-02-01，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- Security
- pam_mount
- pam_usb
- pam_abl
- pam_oath
- Universal 2nd Factor
- 認證管理

Linux PAM (Pluggable Authentication Modules) 是一個系統級用戶認證框架。如下描述引用自項目介紹:

  PAM 將程序開發與認證方式進行分離，程序在運行時調用附加的「認證」模塊完成自己的工作。本地系統管理員通過配置選擇要使用哪些認證模塊。

本文描述在 Arch Linux 下為本地和遠端用戶配置 PAM 權限的方式方法。具體的細節配置方法將在專門的文章內展開。

## 安裝

pam包 包依賴於base包 meta package，默認已經安裝在系統。PAM 模塊被放置於 `/usr/lib/security` 目錄

軟體源中另外還包括其它一些可選的 PAM 包，詳見 #配置方法

## 配置

`/etc` 目錄有多個子目錄與 PAM 相關，使用命令 `pacman --query --list pam | grep /etc` 查看默認創建的配置文件。這些配置與 #安全性參數或 #PAM 基礎配置有關。

### 安全性參數

`/etc/security` 包含了對認證方法參數的系統級配置，安裝後的文件與軟體開發方默認配置一致。

注意 Arch Linux 沒有對這些文件進行定製。例如 `/etc/security/pwquality.conf` 配置可用於系統級別默認的密碼認證方式，但需要手動將 `pam_pwquality.so` 模塊加入到 #PAM 基礎配置內。

詳見 #安全性參數配置。

### PAM 基礎配置

`/etc/pam.d/` 目錄專門用於存放 PAM 配置，用於為具體的應用程式設置獨立的認證方式。配置文件由以下安裝包提供：

- pambase包 安裝包，提供了 Arch Linux 中為應用程式使用的 PAM 基礎配置文件
- 其它基礎安裝包。例如 util-linux包 添加了為 login 及其它一些應用的認證配置， shadow包 安裝包為 Arch Linux 提供默認的用戶資料庫認證方式（參見Users and groups）

不同的安裝包的配置文件都被放在該目錄，在運行時被不同的應用程式加載。例如，在用戶登錄時，login程序將加載 `system-local-login` 策略，具體過程如下：

    /etc/pam.d/

    login -> system-local-login -> system-login -> system-auth

不同的應用程式，可能使用不同的配置文件。例如，openssh包 安裝其 `sshd` PAM 策略，如下所示：

    /etc/pam.d/

    sshd -> system-remote-login -> system-login -> system-auth

配置文件的選擇與應用程式有關。一種特定的認證方式可能僅用到 `sshd`，遠程登錄用到 `system-remote-login`，對這兩者的修改不用影響到本地登錄（local logins）。而對 `system-login` 或 `system-auth` 的修改將同時對 local 和 remote 的登錄產生影響。

如 `sshd` 的例子，任何 pam-aware 的應用程式需要將它的認證策略安裝到 `/etc/pam.d` 目錄下，以更集成和使用 PAM 提供的功能。否則應用程式將使用默認配置 `/etc/pam.d/other`。

提示：PAM 是在運行過程中被動態連結使用的，例如

    $ ldd /usr/bin/login |grep pam

    libpam.so.0 => /usr/lib/libpam.so.0 (0x000003d8c32d6000)
    libpam_misc.so.0 => /usr/lib/libpam_misc.so.0 (0x000003d8c30d2000)

login 程序是 pam-aware 的，因此 必需 指定一個認證策略。

PAM 手冊 pam(8) 和 pam.d(5) 描述了配置文件的標準規範。手冊分四部分：帳戶，認證，密碼和會話管理，同時還包括了配置項的可選內容。

此外，文檔 `/usr/share/doc/Linux-PAM/index.html` 包含多種指導文檔，包括了每種標準模塊的 man 手冊。

警告：對 PAM 配置的修改會影響用戶認證。不正確的修改可能導致沒有用戶可以登錄，或所有用戶都可以登錄。
提示：更改對於已通過身份驗證的用戶無效；使用 PAM 的一種方法是最好在測試機器上本地登錄並進行開發，保持會話不斷運行，同時檢查另一個控制台上另一個用戶的結果。

#### 示例

本文或本章節的事實準確性存在爭議。

原因： (1) the use of nullok (2) the way pam handles optional modules（在 Talk:PAM#Accuracy of PAM#Examples 中討論）

下所的兩個小例子用於反面示例:

首先是下面兩行配置：

    /etc/pam.d/system-auth

    auth      required  pam_unix.so     try_first_pass nullok
    auth      optional  pam_permit.so

pam_unix(8) 說明如下：「本認證 （ `pam_unix.so` ）用於檢查用戶密碼作為認證。默認情況不允許密碼為空的用戶進入」。而 `pam_permit.so` 允許密碼為空的情況。如果將 `rerquired` 和 `optional` 交換位置，則兩種情況都將允許無密碼登錄。

第二種情況恰好相反，在 /etc/pam.d/login 中的`pam_nologin.so` 默認配置創建如下文件：

    # touch /etc/nologin

將導致只有 root 用戶可以登錄（Arch Linux 默認允許 root 用戶登錄）。要讓普通用戶可以登錄，則需要刪除該文件，可能是從創建它的控制台。

參考 #PAM stack and module configuration來對具體使用進行配置。

## 配置方法

本節簡要說明如何修改 PAM 配置，如何添加新的 PAM 模塊。具體的模塊 man 手冊與模塊名一致（去掉 `.so` 後綴）

### 安全性參數配置

下面的章節描述如何修改 PAM 默認參數配置：

- 安全#用 pam_pwquality 強制使用強密碼

  展示如何使用 `pam_crackib.so` 強制密碼認證。

- 安全#在三次登錄嘗試失敗後封鎖用戶

  展示如何使用 `pam_tally.so` 限制登錄。

- 安全#僅允許特定用戶

  展示使用 `pam_wheel.so` 限制用戶登錄 。

- 實時進程管理#配置PAM 和安全#限制進程數量

  描述如何使用 `pam_limits.so` 來配置系統進程。

- 環境變量#使用 pam_env

  包含了用 `pam_env.so` 設置環境變量的示例。

### PAM stack and module configuration

下面的章節說明對於具體的模塊，如何修改 #PAM 基礎配置

- pam_mount

  `pam_mount.so` 在用戶登錄時自動掛載加密目錄

- ECryptfs#Auto-mounting

  `pam_ecryptfs.so` 自動掛載加密目錄

- Dm-crypt/Mounting at login

  `pam_exec.so` 在用戶登錄時執行自定義腳本

- Active Directory integration#Configuring PAM

  使用 `pam_winbind.so` 和 `pam_krb5.so` 通過 Active Directory (LDAP, Kerberos) 服務進行用戶認證

- LDAP 認證#PAM 配置

  `pam_ldap.so` 介紹集成 LDAP 主對端認證過程

- YubiKey#Linux user authentication with PAM

  描述如何使用 U2F (`pam_u2f.so`) 和 YubiKey 與 PAM 提供的專有 Yubico OTP 實現 (`pam_yubico.so`)

- pam_oath

  `pam_oath.so` 軟體方式的 two-factor 認證

- fprint

  使用 `pam_fprintd.so` 進行指紋認證.

- pam_autologin : saves username and password to log in automatically.
- pam_usb

  `pam_usb.so` 通過 USB 設備進行認證

- SSH keys#pam_ssh

  `pam_ssh.so` 認證遠端用戶

- pam_abl

  `pam_abl.so` 限制通過 ssh 的暴力攻擊

- EncFS

  `pam_encfs.so` 實現自動掛載加密目錄

- Google Authenticator

  `pam_google_authenticator.so` two-factor 認證

- Very Secure FTP Daemon#PAM with virtual users

  `pam_pwdfile.so` 認證非本地用戶的 FTP 登錄和 chroot 限制

## 更多 PAM 包

除了上面提到的安裝包，Arch User Repository 包括更多的 PAM 模塊和工具。

PAM 相關的通用工具有：

- Pamtester — PAM 測試工具集

  https://pamtester.sourceforge.net/ || pamtesterAUR

Note the AUR features a keyword tag for PAM, but not all available packages are updated to include it. Hence, searching the package description may be necessary.

## 參閱

- linux-pam.org - The project homepage
- Understanding and configuring PAM - An introductory article

分類：​

- 內核
- 安全

隱藏分類：​

- 使用「模板:準確性」標記的頁面或章節

PAM
新增話題