控制用戶的登錄地點(diǎn)
文件/etc/secruity/access.conf可控制用戶登錄地點(diǎn),為了使用access.conf,必須在文件/etc/pam.d/login中加入下面行:
account required /lib/security/pam_access.so
access.conf文件的格式:
permission : users : origins
其中:
permission:可以是 “+”或“-”,表示允許或拒絕。
user:可以是用戶名、用戶組名,如果是all則表示所有用戶。
origins:登錄地點(diǎn)。local表示本地,all表示所有地點(diǎn),console表示控制臺(tái)。另外,origins也可以是某一網(wǎng)絡(luò)。
后面兩個(gè)域中加上 except是“除了”的意思。例如:除了用戶wheel、shutdown、sync禁止所有的控制臺(tái)登錄:
-:ALL EXCEPT wheel shutdown sync:console
root賬戶的登錄地點(diǎn)不在access.conf文件中控制,而是由/etc/securetty文件控制。
必須保證/etc/pam.d/login有下面這行:
auth required pam_securetty.so
etc/securetty文件指定了允許root登錄的tty設(shè)備,由/bin/login程序讀取,其格式是一個(gè)被允許的名字列表,你可以編輯/etc/securetty且注釋掉如下的行。
# tty2
# tty3
# tty4
# tty5
# tty6
這時(shí),root僅可在tty1終端登錄。
關(guān)于PAM的一些解釋
熱身:
何要授予用戶特權(quán)的程序都要能夠進(jìn)行用戶認(rèn)證。當(dāng)您登入系統(tǒng)時(shí),您需要提供用戶名和口令,而后登入進(jìn)程據(jù)此以檢驗(yàn)登入的合法性---確認(rèn)您就是該用戶。還有除口令認(rèn)證之外的其他認(rèn)證形式,而且口令的存儲(chǔ)方式也是各不相同的。
1、說明
A、PAM可加載目標(biāo)文件(模塊)是在RedHat Linux系統(tǒng)中它們被放在了/lib/security目錄下
B、PAM庫本地系統(tǒng)配置文件/etc/pam.conf OR /etc/pam.d/目錄下的一些配置文件來設(shè)置
2、# more login
#%PAM-1.0
auth required pam_securetty.so
用來控制root用戶只可以從包含在/etc/securetty文件中的終端登錄系統(tǒng)。
auth required pam_stack.so service=system-auth
auth required pam_nologin.so
提供標(biāo)準(zhǔn)的UNIX nologin登錄認(rèn)證。如果/etc/nologin文件存在,則只有root用戶可以登錄,其他用戶登錄時(shí)只會(huì)得到/etc/nologin文件的內(nèi)容。如果/etc/nologin不存在,則該模塊沒有作用。
account required pam_stack.so service=system-auth
password required pam_stack.so service=system-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_stack.so service=system-auth
session optional pam_console.so
# ls -l /dev/pts/1
crw--w---- 1 root tty 136, 1 May 15 21:19 /dev/pts/1
# ls -l /dev/pts/2
crw--w---- 1 test tty 136, 2 May 15 21:20 /dev/pts/2
用戶登陸時(shí),它將TTY設(shè)備權(quán)限改成該用戶所有,當(dāng)用戶退出時(shí),將TTY設(shè)備權(quán)限改為root所有。
# pam_selinux.so open should be the last session rule
session required pam_selinux.so multiple open
login要做兩件事,首先查詢用戶,然后為用戶提供所需服務(wù),例如提供一個(gè)shell程序。
通常,login會(huì)提示用戶輸入密碼。然后對密碼進(jìn)行校驗(yàn),這項(xiàng)任務(wù)就是Linux-PAM完成的。
上例中三個(gè)required連續(xù)使用, 即便第一個(gè)模塊失敗了,也要完成三個(gè)模塊的校驗(yàn)。這是一種安全上的考慮 ---這種設(shè)計(jì)永遠(yuǎn)不要讓用戶知道他或她們?yōu)槭裁磿?huì)被拒絕,否則會(huì)讓其更容易突破認(rèn)證。可以將“required”改成“requisite”來修改這種認(rèn)證方式。如果有任何“requisite”模塊以失敗返回,整個(gè)PAM認(rèn)證將終止再調(diào)用其它模塊也以失敗返回。
3、pam_unix認(rèn)證模塊
所屬類型: account; auth; password; session
功能描述:該模塊是標(biāo)準(zhǔn)UNIX認(rèn)證模塊pam_unix的替代模塊。
在作為auth類型使用時(shí),此時(shí)該模塊可識(shí)別的參數(shù)有debug、audit、use_first_pass、try_first_pass、nullok、nodelay,主要功能是驗(yàn)證用戶密碼的有效性,在缺省情況下(即不帶任何參數(shù)時(shí)),該模塊的主要功能是禁止密碼為空的用戶提供服務(wù);
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類型使用時(shí),此時(shí)該模塊可識(shí)別的參數(shù)有debug、audit,該模塊主要執(zhí)行建立用戶賬號和密碼狀態(tài)的任務(wù),然后執(zhí)行提示用戶修改密碼,用戶采用新密碼后才提供服務(wù)之類的任務(wù);
account required /lib/security/$ISA/pam_unix.so
account sufficient /lib/security/$ISA/pam_succeed_if.so uid < 100 quiet
account required /lib/security/$ISA/pam_permit.so
在作為password類型使用時(shí),此時(shí)該模塊可識(shí)別的參數(shù)有debug、 audit、 nullok;、not_set_pass、use_authtok、try_first_pass、use_first_pass、md5、bigcrypt、shadow、nis、
remember,該模塊完成讓用戶更改密碼的任務(wù);
password requisite /lib/security/$ISA/pam_cracklib.so retry=3
password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5
shadow
password required /lib/security/$ISA/pam_deny.so
在作為session類型使用時(shí),此時(shí)該模塊沒有可識(shí)別的參數(shù),該模塊僅僅完成記錄用戶名和服務(wù)名到日志文件的工作。
session required /lib/security/$ISA/pam_limits.so
session required /lib/security/$ISA/pam_unix.so
可帶參數(shù):
debug:將調(diào)試信息寫入日志
audit:記錄更為信息的信息
nullok:缺省情況下,如果用戶輸入的密碼為空,則系統(tǒng)能夠不對其提供任何服務(wù)。但是如果使用參數(shù),用戶不輸入密碼就可以獲得系統(tǒng)提供的服務(wù)。同時(shí),也允許用戶密碼為空時(shí)更改用戶密碼。 ?
nodelay:當(dāng)用戶認(rèn)證失敗,系統(tǒng)在給出錯(cuò)誤信息時(shí)會(huì)有一個(gè)延遲,這個(gè)延遲是為了防止。黑客猜測密碼,使用該參數(shù)時(shí),系統(tǒng)將取消這個(gè)延遲。通常這是一個(gè)1秒鐘的延遲。
try_first_pass:在用作auth模塊時(shí),該參數(shù)將嘗試在提示用戶輸入密碼前,使用前面一個(gè)堆疊的auth模塊提供的密碼認(rèn)證用戶;在作為password模塊使用時(shí),該參數(shù)是為了防止用戶將密碼更新成使用以前的老密碼。
use_first_pass:在用作auth模塊時(shí),該參數(shù)將在提示用戶輸入密碼前,直接使用前面一個(gè)堆疊的auth模塊提供的密碼認(rèn)證用戶;在作為password模塊使用時(shí),該參數(shù)用來防止用戶將密碼設(shè)置成為前面一個(gè)堆疊的password模塊所提供的密碼。
no_set_pass:使密碼對前后堆疊的password模塊無效。
use_authok:強(qiáng)制使用前面堆疊的password模塊提供的密碼,比如由pam_cracklib模塊提供的新密碼。
md5:采用md5對用戶密碼進(jìn)行加密。
shadow:采用影子密碼。
unix:當(dāng)用戶更改密碼時(shí),密碼被放置在/etc/passwd中。
bigcrype:采用DEC C2算法加密用戶密碼。
nis:使用NIS遠(yuǎn)處過程調(diào)用來設(shè)置新密碼。
remember=x:記錄x個(gè)使用過的舊密碼,這些舊密碼以MD5方式加密后被保存在/etc/security/opasswd文件中。
broken_shadow:在作為account使用時(shí),該參數(shù)用來忽略對影子密碼的讀錯(cuò)誤。
likeauth:未知。
配置實(shí)例:
參考/etc/pam.d/system-auth
設(shè)置密碼中的常見錯(cuò)誤信息?
⑴當(dāng)用戶輸入的密碼字符數(shù)太少時(shí):
BAD PASSWORD: it's WAY too short
?、飘?dāng)用戶輸入的密碼相同字符太多時(shí):
BAD PASSWORD: it does not contain enough DIFFERENT characters
?、钱?dāng)用戶輸入的密碼為某英文單詞時(shí):
BAD PASSWORD: it is based on a dictionary word
?、犬?dāng)用戶在“(current) UNIX password:”提示后輸入的現(xiàn)有密碼錯(cuò)誤時(shí):passwd: Authentication token manipulation error
?、僧?dāng)用戶兩次輸入的密碼不相同時(shí):Sorry, passwords do not match passwd: Authentication information cannot be recovered
?、十?dāng)用戶輸入的密碼未被系統(tǒng)接受時(shí):
passwd: Authentication token manipulation error
example 1
auth required pam_securetty.so
只用來控制root用戶只可以從包含在/etc/securetty文件中的終端登錄系統(tǒng)。
telnet 服務(wù)使用PAM的login進(jìn)行用戶身份驗(yàn)證,#more /etc/pam.d/login便能看到此行,要讓root不受限制遠(yuǎn)程login,第一種方法注銷此處這一行,另一種在 /etc/securetty文件中加入諸如pts/n(1-n);
同理如果想限制root使用ssh遠(yuǎn)程進(jìn)入系統(tǒng),只需在/etc/pam.d/sshd文件中加入這行;auth required pam_securetty.so即可。
example 2
account required pam_access.so
pam_access是pam中處理用戶訪問控制的模塊,沒有使用pam前,linux對用戶的所有訪問控制都是借助hosts.allow, hosts.deny文件,實(shí)現(xiàn)所有服務(wù)的訪問控制,再加上usertty就是對用戶登陸控制(專門是針對login)。
一種是直接修改/etc/security/access.conf
另一種是使用參數(shù)accessfile=/path/to/file.conf
例如修改access.conf文件:
+:root:ALL //root從任意位置連入系統(tǒng)
+:redhat:164.70.12.//redhat只能從這個(gè)網(wǎng)段連入
-:ALL:ALL 其余DENY
然后 # vi /etc/pam.d/sshd
加入這一行 account required pam_access.so
example 3
限制用戶LOGIN次數(shù)
在/etc/security/limits.conf :
加入redhat - maxlogins 3
然后 # vi /etc/pam.d/sshd
加入這一行session required pam_limits.so
則同一用戶至多3-1次login入系統(tǒng)
example 4
限制用戶LOGIN時(shí)間
# vi /etc/security/time.conf加入以下一行
sshd;*;redhat;!Tu2200-2230
# vi /etc/pam.d/sshd 加入以下一行
account required pam_time.so
則redhat每星期二晚上22:00-22:30不能使用SSH來login系統(tǒng)。
example 5
用戶訪問控制
# vi /etc/pam.d/vsftpd 加入以下一行
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers nerr=succeed
# vi /etc/ftpusers .......