標籤:
Linux-PAM認證模組
使用者訪問伺服器的時候,伺服器的某一個服務程式把使用者的誰請求發送到PAM模組進行認證。對於不同的伺服器應用程式所對應的PAM模組也是不同的。如果想查看某個程式是否支援PAM認證,可以用ldd命令進行檢查:
例如:查看sshd是不是支援PAM模組認證:
由於在程式模組裡連結了libpam.so.0 =< /lib/libpam.so.0 ,說明此程式可以進行PAM認證。
當一個伺服器請求PAM模組的時候,PAM本身是不提供服務驗證的,它是調用其它的一群模組來進行伺服器請求驗證,這樣的檔案全放在了/lib/security中。具體到哪一個服務使用哪一種具體的模組,這是由具體的PAM服務檔案定義的(/etc/pam.d/).
[[email protected] root]# ls /etc/pam.d/
authconfig neat redhat-config-network su
chfn other redhat-config-network-cmd sudo
chsh passwd redhat-config-network-druid system-auth
halt poweroff rhn_register up2date
internet-druid ppp setup up2date-config
kbdrate reboot smtp up2date-nox
login redhat-config-mouse sshd
PAM服務檔案
1、# more /etc/pam.d/login
auth required pam_securetty.so
auth required pam_stack.so service=system-auth
auth required pam_nologin.so
account required pam_stack.so service=system-auth
password required pam_stack.so service=system-auth
session required pam_stack.so service=system-auth
session optional pam_console.so
PAM服務檔案的格式(四部分)
| Module-type |
control-flag |
module-path |
arguments |
Module-type: auth、account、session、password
Control-flag:required、requisite、sufficient、optional
eg:
| auth |
required |
pam_securety.so |
| auth |
required |
pam_stack.so service=system_auth |
Module-type(屬於認證裡面的第一部分,主要是分配許可權)auth:認證、授權(檢查使用者的名字、密碼正確與否);account:檢查使用者的帳戶是否到期、禁用等。session:控制會話password:控制使用者修改密碼過程
Control-flag (屬於認證裡面的第二部分,控制標識位)required:必須通過此認證,否則不再往下認證下去,直接退出;requisite:必須通過認證,但以後還有機會,可以往下認證;sufficient:一經通過,後面的不再認證(只要通過這個條件則直接通過);optional:可選的,通不通過均可。
常用的PAM服務檔案
1)、login ---- /etc/pam.d/login
2)、ipop3d --- /etc/pam.d/pop
3)、ftp ---- /etc/pam.d/ftp 或 vsftpd -- /etc/pam.d/vsftpd
4)、sshd--- /etc/pam.d/sshd
5)、su --- /etc/pam.d/su
6)、imap--- /etc/pam.d/imcp
認證堆棧
①、auth required pam_securety.so
②、auth required pam_stack.so service=system-auth
③、auth required pam_nologin.so
如果
①號認證結束,則在後面有個結束標誌,轉到下一個認證即
②號認證,依次類推,相同類型的認證會放在一起進行。其中pam_stack.so調用一個子模組服務,通過這個服務再調用一個第三方的模組進行認證授權。
常用PAM模組1)、pam_access.so 控制訪問者的地址與帳號的名稱2)、pam_listfile.so 控制訪問者的帳號名稱或登陸位置3)、pam_limits.so 控製為使用者指派的資源4)、pam_rootok.so 對管理員(uid=0)無條件通過5)、pam_userdb.so 設定獨立使用者帳號資料庫認證如下:
[[email protected] root]# cd /etc/pam.d/
[[email protected] pam.d]# more login
#%PAM-1.0
auth required pam_securetty.so
auth required pam_stack.so service=system-auth
auth required pam_nologin.so
account required pam_stack.so service=system-auth
password required pam_stack.so service=system-auth
session required pam_stack.so service=system-auth
session optional pam_console.so
[[email protected] pam.d]# cd /usr/share/doc/pam-0.75/txts/
[[email protected] txts]# ls
pam_appl.txt README.pam_ftp README.pam_shells
pam_modules.txt README.pam_limits README.pam_stack
pam.txt README.pam_listfile README.pam_stress
README README.pam_localuser README.pam_tally
README.pam_access README.pam_mail README.pam_time
README.pam_chroot README.pam_nologin README.pam_timestamp
README.pam_console README.pam_permit README.pam_unix
README.pam_cracklib README.pam_pwdb README.pam_userdb
README.pam_deny README.pam_rhosts README.pam_warn
README.pam_env README.pam_rootok README.pam_wheel
README.pam_filter README.pam_securetty README.pam_xauth
[[email protected] txts]# more README.pam_securetty
pam_securetty:
Allows root logins only if the user is logging in on a
"secure" tty, as defined by the listing in /etc/securetty
Also checks to make sure that /etc/securetty is a plain
file and not world writable.
- Elliot Lee , Red Hat Software.
July 25, 1996.
[[email protected] txts]# more /etc/securetty
console
vc/1
vc/2
vc/3
vc/4
vc/5
vc/6
vc/7
vc/8
vc/9
vc/10
vc/11
tty1
tty2
tty3
tty4
tty5
tty6
tty7
tty8
tty9
tty10
tty11
[[email protected] txts]# more /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required /lib/security/$ISA/pam_env.so
auth sufficient /lib/security/$ISA/pam_unix.so likeauth nullok
auth required /lib/security/$ISA/pam_deny.so
account required /lib/security/$ISA/pam_unix.so
password required /lib/security/$ISA/pam_cracklib.so retry=3 type=
password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
password required /lib/security/$ISA/pam_deny.so
session required /lib/security/$ISA/pam_limits.so
session required /lib/security/$ISA/pam_unix.so
[[email protected] txts]# pwd
/usr/share/doc/pam-0.75/txts
[[email protected] txts]# more README.pam_nologin
# $Id: README,v 1.1.1.1 2000/06/20 22:11:46 agmorgan Exp $
#
This module always lets root in; it lets other users in only if the file
/etc/nologin doesn‘t exist. In any case, if /etc/nologin exists, it‘s
contents are displayed to the user.
module services provided:
auth _authentication and _setcred (blank)
Michael K. Johnson
[[email protected] txts]# touch /etc/nologin
[[email protected] txts]# useradd leekwen
[[email protected] txts]# passwd leekwen
Changing password for user leekwen.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[[email protected] txts]# ssh [email protected]
[email protected]‘s password:
Permission denied, please try again.
[email protected]‘s password:
Permission denied, please try again.
[email protected]‘s password:
Permission denied (publickey,password,keyboard-interactive).
[[email protected] txts]# rm /etc/nologin
rm: remove regular empty file `/etc/nologin‘? y
[[email protected] txts]# ssh [email protected]
[email protected]‘s password:
[[email protected] leekwen]$ pwd
/home/leekwen
[[email protected] leekwen]$ exit
logout
Connection to 192.168.0.188 closed.
[[email protected] txts]# cd /etc/pam.d/
[[email protected] pam.d]# more login
#%PAM-1.0
auth required pam_securetty.so
auth required pam_stack.so service=system-auth
auth required pam_nologin.so
account required pam_stack.so service=system-auth
password required pam_stack.so service=system-auth
session required pam_stack.so service=system-auth
session optional pam_console.so
[[email protected] pam.d]# tty
/dev/pts/2
[[email protected] pam.d]# ls /dev/tty1
/dev/tty1
Linux-PAM認證模組