這裡我們需要使用pam_Access。pam_access是pam中處理用戶訪問控制的模塊,沒有使用pam前,Linux對用戶的所有訪問控制都是借助hosts.allow, hosts.deny文件,實現所有服務的訪問控制,再加上usertty就是對用戶登陸控制(專門是針對login)。但是,隨著pam的應用,usertty已經不再使用了,雖然login的man裡還會提到。 現在我們看看如何利用pam_access對個別用戶進行登陸訪問控制(對所有使用login的都有效),首先,我們需要的是訪問控制的配置文件,這個文件在/etc/security/access.conf。整個文件的格式都是: 權限:用戶(可多個並用空格隔開):源訪問點。下面對每個區域簡單說明: 權限(permission) 這一位可以是+/-。其中+表示允許訪問,-表示禁止訪問; 用戶(users) 這是指定用戶名,用戶組名或網絡用戶組名,指定的是多個要用空格隔開。對於指定網絡用戶組名時,網絡用戶組名應指定用戶組所在的源訪問點並用@和用戶組名分開。除此以外,還可以用ALL指定所有的和EXCEPT指定特殊例外的用戶。 源訪問點(Origins) 這是指定用戶域中原訪問點。這裡可指定用戶訪問的ttyname,hostname,domainname或ip。其中domainname是指以.開頭的主機名,例如,.downsky.net就是指定downsky.net這個域。在這裡可以使用ALL和EXCEPT的關鍵字,也也指定LOCAL。 下面我們看看一些例子,如果你先限制一些用戶在某些主機的登陸權限,我們提供登陸服務的主機叫linux,下面我們看看access.conf的配置情況: 1. # access.conf file 2. -:ALL:.foo.com .hacker.org 3. -:ALL EXCEPT root: tty1 4. +:ALL EXCEPT root:192.168.1. 5. +:root user:.downsky.net 6. -:chase:192.168.2. 7. -:ALL:ALL 從以上的配置文件可以看到,第二行拒絕所有從域名.foo.com和.hacker.org的登陸訪問;第三行拒絕除root以外的用戶從控制台登錄訪問;第四行允許除root外所有的用戶從192.168.1.的網段登錄訪問。第五行允許root和user用戶組中的成員從downsky.net登錄訪問。第六行拒絕用戶chase從192.168.2網段的登錄訪問,第七行拒絕其它的登錄訪問... 現在我們只要在/etc/pam.d/login的文件裡加上下面一行 account required /lib/security/pam_access.so 就可以使login使用pam_access來對用戶進行登陸訪問控制了。整個login的文件如下 auth requisite /lib/security/pam_unix.so nullok #set_secrpc auth required /lib/security/pam_securetty.so auth required /lib/security/pam_nologin.so #auth required /lib/security/pam_homecheck.so auth required /lib/security/pam_env.so auth required /lib/security/pam_mail.so account required /lib/security/pam_unix.so account required /lib/security/pam_access.so passWord required /lib/security/pam_pwcheck.so nullok password required /lib/security/pam_unix.so nullok use_first_pass use_authtok session required /lib/security/pam_unix.so none # debug or trace session required /lib/security/pam_limits.so 如果被拒絕的用戶登陸本主機的話就會出現下面的輸出結果 linux login: chase Password: Permission denied Connection closed by foreign host. 我們還可以從/var/log/messages得到pam_access的日志,對應上面的情況我們從message得到如下的日志: Apr 25 12:50:25 linux pam_access[13916]: access denied for user `chase' from `192.168.2.78' Apr 25 12:50:25 linux login[13916]: Permission denied