一起來學linux:PAM模塊


Linux中執行有些程序時,這些程序在執行前首先要對啟動它的用戶進行認證,符合一定的要求之后才允許執行,例如login, su

Linux中進行身份或是狀態的驗證程序是由PAM來進行的,PAMPluggable Authentication Modules)可動態加載驗證模塊,因為可以按需要動態的對驗證的內容進行變更,所以可以大大提高驗證的靈活性。

Linux各個發行版中,PAM使用的驗證模塊一般存放在/lib/security/目錄下,可以使用ls命令進行查看本計算機支持哪些驗證控制方式,一般的PAM模塊名字例如pam_unix.so,模塊可以隨時在這個目錄下添加和刪除,這不會直接影響程序運行,具體的影響在PAM的配置目錄下。

PAM的配置文件位於/etc/pam.d文件下面。ls命令可以看到所有的文件配置

root@zhf-maple:/etc/pam.d# ls -al

總用量 124

drwxr-xr-x   2 root root  4096 11月 27 21:31 .

drwxr-xr-x 133 root root 12288 11月 27 21:31 ..

-rw-r--r--   1 root root   384 11月 20  2014 chfn

-rw-r--r--   1 root root    92 11月 20  2014 chpasswd

-rw-r--r--   1 root root   581 11月 20  2014 chsh

-rw-r--r--   1 root root  1208 11月 26 20:23 common-account

-rw-r--r--   1 root root  1249 11月 26 20:23 common-auth

-rw-r--r--   1 root root  1480 11月 26 20:23 common-password

-rw-r--r--   1 root root  1470 11月 26 20:23 common-session

-rw-r--r--   1 root root  1435 11月 26 20:23 common-session-noninteractive

-rw-r--r--   1 root root   606 8月  21 07:54 cron

-rw-r--r--   1 root root    69 9月  14 00:53 cups

-rw-r--r--   1 root root   884 9月  30  2015 lightdm

-rw-r--r--   1 root root   551 9月  30  2015 lightdm-autologin

-rw-r--r--   1 root root   727 8月  24  2015 lightdm-greeter

-rw-r--r--   1 root root  4905 11月 27 21:31 login

-rw-r--r--   1 root root    92 11月 20  2014 newusers

-rw-r--r--   1 root root   520 4月  22  2017 other

-rw-r--r--   1 root root    92 11月 20  2014 passwd

-rw-r--r--   1 root root   270 5月  24  2017 polkit-1

-rw-r--r--   1 root root   168 1月  28  2016 ppp

-rw-r--r--   1 root root   143 7月  11 09:19 runuser

-rw-r--r--   1 root root   138 7月  11 09:19 runuser-l

-rw-r--r--   1 root root  2257 11月 20  2014 su

-rw-r--r--   1 root root   239 6月  13 03:51 sudo

-rw-r--r--   1 root root   317 10月  3 11:24 systemd-user

-rw-r--r--   1 root root    57 9月  13 09:14 ukui-screensaver

-rw-r--r--   1 root root   319 5月   8  2014 vsftpd

 

我們看下文件里面的格式是什么:

root@zhf-maple:/etc/pam.d# cat ./login

#

# The PAM configuration file for the Shadow `login' service

#

 

# Enforce a minimal delay in case of failure (in microseconds).

# (Replaces the `FAIL_DELAY' setting from login.defs)

# Note that other modules may require another minimal delay. (for example,

# to disable any delay, you should add the nodelay option to pam_unix)

auth       optional   pam_faildelay.so  delay=3000000

auth       required   pam_securetty.so

 

配置文件的格式主要有4列組成:

第一列代表模塊類型,類型分為4種:

auth: 用來對用戶的身份進行識別.如:提示用戶輸入密碼,或判斷用戶是否為root

account:對帳號的各項屬性進行檢查.如:是否允許登錄,是否達到最大用戶數,或是root用戶是否允許在這個終端登錄等

session:這個模塊用來定義用戶登錄前的,及用戶退出后所要進行的操作.如:登錄連接信息,用戶數據的打開與關閉,掛載文件系統等.

passwd:使用用戶信息來更新.如:修改用戶密碼.

第二列代表控制標記:也有4種類型:

required: 表示即使某個模塊對用戶的驗證失敗,也要等所有的模塊都執行完畢后,PAM 才返回錯誤信息。這樣做是為了不讓用戶知道被哪個模塊拒絕。如果對用戶驗證成功,所有的模塊都會返回成功信息

requisite: 與required相似,但是如果這個模塊返回失敗,則立刻向應用程序返回失敗,表示此類型失敗.不再進行同類型后面的操作.

sufficient:表示如果一個用戶通過這個模塊的驗證,PAM結構就立刻返回驗證成功信息(即使前面有模塊fail了,也會把 fail結果忽略掉),把控制權交回應用程序。后面的層疊模塊即使使用requisite或者required 控制標志,也不再執行。如果驗證失敗,sufficient 的作用和 optional 相同

optional:表示即使本行指定的模塊驗證失敗,也允許用戶接受應用程序提供的服務,一般返回PAM_IGNORE(忽略).

 

第三列代表模塊路徑:要調用模塊的位置。一般是在/lib/security文件中。但是每個版本都不太一樣,比如我是用的ubuntun17.10。模塊位於/lib/x86_64-linux-gnu/security文件夾下面

zhf@zhf-maple:/lib/x86_64-linux-gnu/security$ ls -al

總用量 1064

drwxr-xr-x 2 root root   4096 11月 26 20:05 .

drwxr-xr-x 3 root root  12288 11月 26 20:08 ..

-rw-r--r-- 1 root root  18672 4月  22  2017 pam_access.so

-rw-r--r-- 1 root root  10080 10月 11 16:26 pam_cap.so

-rw-r--r-- 1 root root  10376 4月  22  2017 pam_debug.so

-rw-r--r-- 1 root root   6000 4月  22  2017 pam_deny.so

-rw-r--r-- 1 root root  10336 4月  22  2017 pam_echo.so

-rw-r--r-- 1 root root  14536 4月  22  2017 pam_env.so

-rw-r--r-- 1 root root  14728 4月  22  2017 pam_exec.so

-rw-r--r-- 1 root root  60368 4月  22  2017 pam_extrausers.so

-rw-r--r-- 1 root root  10368 4月  22  2017 pam_faildelay.so

-rw-r--r-- 1 root root  14576 4月  22  2017 pam_filter.so

-rw-r--r-- 1 root root  10304 4月  22  2017 pam_ftp.so

-rw-r--r-- 1 root root  42984 7月  31 21:21 pam_gnome_k

 

第四列是模塊參數:參數可以用多個,之間用空格隔開。例如:password   required   pam_unix.so nullok obscure min=4 max=8 md5

我們再來看下配置文件里面的內容:比如下面兩種。其中紅色的字體注釋已經寫明了對應的模塊需要做那些配置

Uncomment and edit /etc/security/access.conf if you need to

# set access limits.

# (Replaces /etc/login.access file)

# account  required       pam_access.so

 

Sets up user limits according to /etc/security/limits.conf

# (Replaces the use of /etc/limits in old login)

session    required   pam_limits.so

下面我們介紹集中常用的PAM模塊,如下表:

 

PAM模塊

結合管理類型

說明

pam_unix.so

auth

提示用戶輸入密碼,並與/etc/shadow文件相比對.匹配返回0

account

檢查用戶的賬號信息(包括是否過期等).帳號可用時,返回0.

password

修改用戶的密碼. 將用戶輸入的密碼,作為用戶的新密碼更新shadow文件

pam_shells.so

auth

account 

如果用戶想登錄系統,那么它的shell必須是在/etc/shells文件中之一的shell

pam_deny.so

account

auth

password

session

該模塊可用於拒絕訪問

pam_permit.so

auth

account

password

session

模塊任何時候都返回成功.

pam_securetty.so

auth

如果用戶要以root登錄時,則登錄的tty必須在/etc/securetty之中.

pam_listfile.so

auth

account

password session

訪問應用程的控制開關

pam_cracklib.so

password

這個模塊可以插入到一個程序的密碼棧中,用於檢查密碼的強度.

pam_limits.so

session

定義使用系統資源的上限,root用戶也會受此限制,可以通過/etc/security/limits.conf或/etc/security/limits.d/*.conf來設定

 

我們用pam_securetty.so這個模塊來做個測試。這個模塊的作用是如果用戶要以root登錄時,則登錄的tty必須在/etc/securetty之中。我們知道我們在鍵盤上可以用ctrl+alt+f1-ctrl+alt+f6來登錄各個終端。現在我們來限制root的登錄終端

第一步:首先在/etc/pam.d/login文件中配置如下,表明當用戶為root的時候需要用pam_securetty.so來進行驗證

auth       required   pam_securetty.so

第二步:在/etc/securetty中將tty2給注釋掉

# Virtual consoles

tty1

#tty2

第三步:在用root用戶登錄tty2的時候則會提示login incorrect.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM