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