Linux – PAM 範例

Loading

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 範例

  1. 自動引用通知: 安全性 | Benjr.tw
  2. 自動引用通知: PAM-初解 | Benjr.tw

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料