PAM (Pluggable Authentication Modules) 範例:
關於 PAM 可以參考 – https://benjr.tw/291
限制 Root 使用者的登入
/etc/securetty 檔案內容紀錄 root 可以經由哪些 terminal(ttys) 來登入
[root@benjr ~]# vi /etc/securetty tty1tty2
以上是使用者可以用 root 身分登入的 terminal(tty1 , tty2 ….),你可以在這加以限制(移除不需的 tty 或用 ” # ” 標記起來).如果要讓 root 用 serial port 登入,就要加入 ttyS1(serial port 1),ttyS2(serial port 2).因為登入系統的程式 mingetty 會去參照 /etc/pam.d/login 的 PAM . 所以我們來看看 /etc/pam.d/login 檔案
[root@benjr ~]# vi /etc/pam.d/login auth required pam_securetty.so
其中的第一行 auth required pam_securetty.so 就是會去引用 /etc/securetty 檔來決定 root 可使用哪些 terminals 的登入.
讓 root 只能在 tty1 登入
[root@benjr ~]# vi /etc/securetty tty1
只保留 tty1 ,你會發現 root 只能在 tty1 登入,這同樣會影響到 telnet 的登入(所以當使用 root 身份是不能登入的),要讓 root 不受到 /etc/securetty 的影響方法有二種.
1.移除 /etc/securetty 檔案,或者更改名稱
2.修改 /etc/pam.d/login 中的 pam_securetty.so (移除或用 ” # ” 標記起來 )
note:如果你不想讓一般使用者使用 su 來變成 root 身份時,你可以在 /etc/pam.d/su 第一行加入auth required pam_securetty.so 此時就沒有人可以用 su 來改變成 root 身份了.其他身份的轉換則不受影響.
限制一般使用者的登入(The Flexible Way)
要限制一般使用者的登入要在 /etc/pam.d/login 加入下面這行
[root@benjr ~]# vi /etc/pam.d/login account required /lib/security/pam_access.so
編輯 /etc/security/access.conf 格式為permission:UserOrGroup:origins說明 permission: “+” 代表允許,”-” 代表禁止UserOrGroup: 可以為使用者,群組或為全部 (ALL)origins:可以為 tty,host,domain names
限制 user1 只能在 tty1 & tty2 登入
[root@benjr ~]# vi /etc/pam.d/system-auth account required /lib/security/pam_access.so [root@benjr ~]# vi /etc/security/access.conf -:user1:all except tty1 tty2
user1 telnet 進入時也會受到影響,因此 user1 不能用其他方式登入(除了 tty1 , tty2)
note:1.-:ALL EXCEPT student1 student2:server1 除了 student1 student2 可以由 server1 登入其他使用者皆會被禁止, server1 亦可用 IP 來取代.2.-:developer:ALL 所有 developer 群組皆不能登入
限制一般使用者的登入(Keeping Out Everyone)
要以更簡潔方式限制一般使用者的登入要在 /etc/pam.d/login 加入下面這行#
[root@benjr ~]# vi /etc/pam.d/login auth required /lib/security/pam_nologin.so
pam_nologin.so 會去參考到 /etc/nologin 檔案是否存在,再決定一般使用者的登入限制
[root@benjr ~]# touch /etc/nologin [root@benjr ~]# echo " Sorry Server maintancing……." > /etc/nologin
如果 /etc/nologin 存在,系統還會將 nologin 的內容列印出來給使用者知曉,現在所有的一般使用者皆無法登入包括以 telnet 方式.
限制一般使用者的登入(By time of day)
我們可以更進一步控制使用者的登入時間,由 /lib/security/pam_time.so 所控制
[root@benjr ~]# vi /etc/pam.d/system-auth account required /lib/security/pam_time.so
加入 account required /lib/security/pam_time.so 接下來是它的設定檔 /etc/security/time.conf 其格式為services:ttys:users:times我們來用個範例來說明
[root@benjr ~]# vi /etc/security/time.conf login;*;user1|user2;MoTu0000-2400
上面的意思為 user1 以及 user2 在 Monday ,Tuesday 的一整天都不能透過任何 ttys 登入其中比較有看不懂的是* 代表所有的user1 | user2 中的 “|” 是代表”或(or)”MoTu 代表是星期一,星期二 其他的星期可表示為 We(星期三) , Th(星期四) , Fr(星期五) , Sa(星期六) , Su(星期日) , WK(weekday days 星期一至五) , Wd(weekend days星期六日) , Al(every day每天)
限制使用者 Processes 個數
[root@benjr ~]# vi /etc/pam.d/system-auth session required /lib/security/$ISA/pam_limits.so
其中的 pam_limits.so 就是限制使用者 processes 個數的函數庫,它會參考 /etc/security/limites.conf 檔案來決定限制上限.
[root@benjr ~]# vi /etc/security/limites.conf user1 hard nproc 100 @developer hard nproc 100
此時使用者 user1 以及 developer 這個群組最多可使用 nproc (max number of process) 上限為 100 個,一般使用者可以使用指令 ulimit -a.
[root@benjr ~]# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited max locked memory (kbytes, -l) unlimited max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 100 virtual memory (kbytes, -v) unlimited
可以看到 max user processes 被限制成 100 個note:使用者必須重新登入才會生效.還有其他的也可以做限制,如下core – limits the core file size (KB)
data – max data size (KB)
fsize – maximum filesize (KB)
memlock – max locked-in-memory address space (KB)
nofile – max number of open files
rss – max resident set size (KB)
stack – max stack size (KB)
cpu – max CPU time (MIN)
nproc – max number of processes
as – address space limit
maxlogins – max number of logins for this user
priority – the priority to run user process with
locks – max number of file locks the user can hold
允許非特權使用者使用系統控制指令(如shutdown , halt , poweroff , reboot , xserver)
允許非特權使用者使用系統控制指令是由 /lib/security/pam_console.so module 所提供,而在 /etc/pam.d/login 中又定義:
[root@benjr ~]# vi /etc/pam.d/login session optional pam_console.so
這些指令存放在 /etc/security/console.apps 目錄下,當你移除 shutdown , halt , poweroff , reboot , xserver 檔案,一般使用者就沒有權力使用這些指令了.
permission define what user console and which devices may be accessed.
define in file /etc/security/console.perms
自動新增使用者目錄
如果你的系統使用的是集中式的帳號管理如 (NIS, NIS+, or LDAP) 這模組將會非常有用,它可以自動幫我們新增使用者的家目錄.
[root@benjr ~]# vi /etc/pam.d/system-auth session required pam_mkhomedir.so skel=/etc/skel umask=0022
skel – 系統預設會根據 skeleton directory(/etc/skel/) 目錄內容建立家目錄.
umask – 要使用的 umask 為多少可以在這裡自訂.
並且修改 /home的權限,這樣 Domain user 才有權限
[root@benjr ~]# chmod o+rwx /home
我的 Domain 為 benjr 所以我可以先手動新增 /home/benjr 的目錄,接下來的使用者都會存放在 /home/benjr 目錄下
現在來試一試
[root@benjr ~]# mkdir /home/benjr unsvr login:user1 password: Creating directory ‘/home/benjr/user1′ Creating directory ‘/home/benjr/user1/.kde’ Creating directory ‘/home/benjr/user1/.kde/Autostart’ Creating directory ‘/home/benjr/user1/.xemacs’
這樣使用者再登入時,使用者目錄也跟著建立了.
2 thoughts on “Linux – PAM 範例”