linux学习-用户的特殊 shell 与 PAM 模块
特殊的 shell, /sbin/nologin
『無法登入』指的是:『這個使用者無法使用 bash 或其他 shell 來登入系統』而已, 并不是說這個賬號就無法使用其他的系統資源!
讓某個具有 /sbin/nologin 的使用者知道,他們不能登入主機時, 其實我可以建立 『/etc/nologin.txt 』這個文件,
并且在這個文件內說明不能登入的原因,那么下次當這個用戶想要登 入系統時, 屏幕上出現的就會是 /etc/nologin.txt 這個文件的內容,而不是預設的內容了!
PAM 模塊簡介
PAM 可以說是一套應用程序編程接口 (Application Programming Interface, API),他提供了一連串的 驗證機制,只要使用者將驗證階段的需求告知 PAM 后, PAM 就能夠回報使用者驗證的結果 (成 功或失敗)。
如上述的圖示, PAM 是一個獨立的 API 存在,只要任何程序有需求時,可以向 PAM 發出驗證要 求的通知, PAM 經過一連串的驗證后,將驗證的結果回報給該程序,然后該程序就能夠利用驗證 的結果來進行可登入或顯示其他無法使用的訊息。
PAM 用來進行驗證的數據稱為模塊 (Modules),每個 PAM 模塊的功能都不太相同。舉例來說, 還 記得我們在本章使用 passwd 指令時,如果隨便輸入字典上面找的到的字符串, passwd 就會回報錯 誤信息了!這是為什么呢?這就是 PAM 的 pam_cracklib.so 模塊的功能!他能夠判斷該密碼是否在 字典里面! 并回報給密碼修改程序,此時就能夠了解你的密碼強度了。
PAM 模塊設定語法
PAM 藉由一個與程序相同文件名的配置文件來進行一連串的認證分析需求。我們同樣以 passwd 這 個指令的呼叫 PAM 來說明好了。 當你執行 passwd 后,這支程序呼叫 PAM 的流程是:
從上頭的說明,我們會知道重點其實是 /etc/pam.d/ 里面的配置文件,以及配置文件所呼叫的 PAM 模塊進行的驗證工作!既然一直談到 passwd 這個密碼修改指令,那我們就來看看 /etc/pam.d/passwd 這個配置文件的內容是怎樣吧!
[root@study ~]# cat /etc/pam.d/passwd #%PAM-1.0 <==PAM 版本的說明而已! auth include system-auth <==每一行都是一個驗證的過程 account include system-auth password substack system-auth -password optional pam_gnome_keyring.so use_authtok password substack postlogin 驗證類別 控制標準 PAM 模塊與該模塊的參數在這個配置文件當中,除了第一行宣告 PAM 版本之外,其他任何『 # 』開頭的都是批注,而每一 行都是一個獨立的驗證流程, 每一行可以區分為三個字段,分別是驗證類別(type)、控制標準(flag)、 PAM 的模塊與該模塊的參數。
Tips 你會發現在我們上面的表格當中出現的是『 include (包括) 』這個關鍵詞,他代表的是『請呼叫后面的文件來作為這個類別的驗證』, 所以,上述的每一行都要重復呼叫 /etc/pam.d/system-auth 那個文件來進行驗證的意思!
- 第一個字段:驗證類別 (Type)
驗證類別主要分為四種,分別說明如下:
- auth
是 authentication (認證) 的縮寫,所以這種類別主要用來檢驗使用者的身份驗證,這種類別通常是需要密碼 來檢驗的, 所以后續接的模塊是用來檢驗用戶的身份。
- account
account (賬號) 則大部分是在進行 authorization (授權),這種類別則主要在檢驗使用者是否具有正確的權限,舉例來說,當你使用一個過期的密碼來登入時,當然就無法正確的登入了。
- session
session 是會議期間的意思,所以 session 管理的就是使用者在這次登入 (或使用這個指令) 期間,PAM 所 給予的環境設定。這個類別通常用在記錄用戶登入與注銷時的信息!例如,如果你常常使用 su 或者是 sudo 指令的話, 那么應該可以在 /var/log/secure 里面發現很多關于 pam 的說明,而且記載的數據是『session open, session close』的信息!
- password
password 就是密碼嘛!所以這種類別主要在提供驗證的修訂工作,舉例來說,就是修改/變更密碼啦!
- 第二個字段:驗證的控制旗標 (control flag)
那么『驗證的控制旗標(control flag)』又是什么?簡單的說,他就是『驗證通過的標準』啦!這個字 段在管控該驗證的放行方式,主要也分為四種控制方式:
- required
此驗證若成功則帶有 success (成功) 的標志,若失敗則帶有 failure 的標志,但不論成功或失敗都會繼續后 續的驗證流程。 由于后續的驗證流程可以繼續進行,因此相當有利于資料的登錄 (log) ,這也是 PAM 最 常使用 required 的原因。
- requisite
若驗證失敗則立刻回報原程序 failure 的標志,并終止后續的驗證流程。若驗證成功則帶有 success 的標志 并繼續后續的驗證流程。 這個項目與 required 最大的差異,就在于失敗的時候還要不要繼續驗證下去?由 于 requisite 是失敗就終止, 因此失敗時所產生的 PAM 信息就無法透過后續的模塊來記錄了。
- sufficient
若驗證成功則立刻回傳 success 給原程序,并終止后續的驗證流程;若驗證失敗則帶有 failure 標志并繼續 后續的驗證流程。 這玩意兒與 requisits 剛好相反!
- optional
這個模塊控件目大多是在顯示訊息而已,并不是用在驗證方面的。
將這些控制旗標以圖示的方式配合成功與否的條件繪圖,會有點像底下這樣:
常用模塊簡介
由于我們常常需要透過各種方式登入 (login) 系統,因此就來看看登入所需要的 PAM 流程為何:
[root@study ~]# cat /etc/pam.d/login #%PAM-1.0 auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so auth substack system-auth auth include postlogin account required pam_nologin.so account include system-auth password include system-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so session optional pam_console.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open session required pam_namespace.so session optional pam_keyinit.so force revoke session include system-auth session include postlogin -session optional pam_ck_connector.so # 我們可以看到,其實 login 也呼叫多次的 system-auth ,所以底下列出該配置文件[root@study ~]# cat /etc/pam.d/system-auth #%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authconfig is run. auth required pam_env.so auth sufficient pam_fprintd.so auth sufficient pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >= 1000 quiet_success auth required pam_deny.soaccount required pam_unix.so account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 1000 quiet account required pam_permit.sopassword requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password required pam_deny.sosession optional pam_keyinit.so revoke session required pam_limits.so -session optional pam_systemd.so session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so上面這個表格當中使用到非常多的 PAM 模塊,每個模塊的功能都不太相同,詳細的模塊情報可以 在你的系統中找到:
- /etc/pam.d/*:每個程序個別的 PAM 配置文件;
- /lib64/security/*:PAM 模塊文件的實際放置目錄;
- /etc/security/*:其他 PAM 環境的配置文件;
- /usr/share/doc/pam-*/:詳細的 PAM 說明文件。
這里 僅簡單介紹幾個較常使用的模塊,詳細的信息還得要您努力查閱參考書呢!
- pam_securetty.so
限制系統管理員 (root) 只能夠從安全的 (secure) 終端機登入;那什么是終端機?例如 tty1, tty2 等就是傳 統的終端機裝置名稱。那么安全的終端機設定呢? 就寫在 /etc/securetty 這個文件中。你可以查閱一下該文 件, 就知道為什么 root 可以從 tty1~tty7 登入,但卻無法透過 telnet 登入 Linux 主機了!
- pam_nologin.so
這個模塊可以限制一般用戶是否能夠登入主機之用。當 /etc/nologin 這個文件存在時,則所有一般使用者均 無法再登入系統了!若 /etc/nologin 存在,則一般使用者在登入時, 在他們的終端機上會將該文件的內容 顯示出來!所以,正常的情況下,這個文件應該是不能存在系統中的。 但這個模塊對 root 以及已經登入 系統中的一般賬號并沒有影響。 (注意喔!這與 /etc/nologin.txt 并不相同!)
- pam_selinux.so
SELinux 是個針對程序來進行細部管理權限的功能,SELinux 這玩意兒我們會在第十六章的時候再來詳細談論。由于 SELinux 會影響到用戶執行程序的權限,因此我們利用 PAM 模塊,將 SELinux 暫時關閉, 等到驗證通過后, 再予以啟動!
- pam_console.so
當系統出現某些問題,或者是某些時刻你需要使用特殊的終端接口 (例如 RS232 之類的終端聯機設備) 登 入主機時, 這個模塊可以幫助處理一些文件權限的問題,讓使用者可以透過特殊終端接口 (console) 順利 的登入系統。
- pam_loginuid.so
我們知道系統賬號與一般賬號的 UID 是不同的!一般賬號 UID 均大于 1000 才合理。 因此,為了驗證使用者的 UID 真的是我們所需要的數值,可以使用這個模塊來進行規范!
- pam_env.so
用來設定環境變量的一個模塊,如果你有需要額外的環境變量設定,可以參考 /etc/security/pam_env.conf 這 個文件的詳細說明。
- pam_unix.so
這是個很復雜且重要的模塊,這個模塊可以用在驗證階段的認證功能,可以用在授權階段的賬號許可證管 理, 可以用在會議階段的登錄文件記錄等,甚至也可以用在密碼更新階段的檢驗!非常豐富的功能! 這個模塊在早期使用得相當頻繁喔!
- pam_pwquality.so
可以用來檢驗密碼的強度!包括密碼是否在字典中,密碼輸入幾次都失敗就斷掉此次聯機等功能,都是這 模塊提供的! 最早之前其實使用的是 pam_cracklib.so 這個模塊,后來改成 pam_pwquality.so 這個模塊, 但此模塊完全兼容于 pam_cracklib.so,同時提供了 /etc/security/pwquality.conf 這個文件可以額外指定默認 值!比較容易處理修改!
- pam_limits.so
還記得ulimit嗎?其實那就是這個模塊提供的能力!還有更多細部的設定可以參考: /etc/security/limits.conf 內的說明。
其他相關文件
我們也知道 PAM 相關的配置文件在 /etc/pam.d , 說明文件在 /usr/share/doc/pam-(版本) ,模塊實際在 /lib64/security/ 。那么還有沒有相關的 PAM 文件呢? 是有 的,主要都在 /etc/security 這個目錄內!
- limits.conf
ulimit 功能中, 除了修改使用者的 ~/.bashrc 配置文件之外,其實系統管理員可 以統一藉由 PAM 來管理的! 那就是 /etc/security/limits.conf 這個文件的設定了。這個文件的設定 很簡單,你可以自行參考一下該文件內容。 我們這里僅作個簡單的介紹:
范例一:vbird1 這個用戶只能建立 100MB 的文件,且大于 90MB 會警告 [root@study ~]# vim /etc/security/limits.conf vbird1 soft fsize 90000 vbird1 hard fsize 100000 #賬號 限制依據 限制項目 限制值 # 第一字段為賬號,或者是群組!若為群組則前面需要加上 @ ,例如 @projecta # 第二字段為限制的依據,是嚴格(hard),還是僅為警告(soft); # 第三字段為相關限制,此例中限制文件容量, # 第四字段為限制的值,在此例中單位為 KB。 # 若以 vbird1 登入后,進行如下的操作則會有相關的限制出現![vbird1@study ~]$ ulimit -a....(前面省略).... file size (blocks, -f) 90000 ....(后面省略)....[vbird1@study ~]$ dd if=/dev/zero of=test bs=1M count=110 File size limit exceeded [vbird1@study ~]$ ll --block-size=K test -rw-rw-r--. 1 vbird1 vbird1 90000K Jul 22 01:33 test # 果然有限制到了范例二:限制 pro1 這個群組,每次僅能有一個用戶登入系統 (maxlogins) [root@study ~]# vim /etc/security/limits.conf @pro1 hard maxlogins 1 # 如果要使用群組功能的話,這個功能似乎對初始群組才有效喔!而如果你嘗試多個 pro1 的登入時, # 第二個以后就無法登入了。而且在 /var/log/secure 文件中還會出現如下的信息: # pam_limits(login:session): Too many logins (max 1) for pro1- /var/log/secure, /var/log/messages
PAM 模塊都會將數據記載在 /var/log/secure 當中,所以發生了問題請務必到該文件內去查詢一下問題點!
轉載于:https://www.cnblogs.com/uetucci/p/7661837.html
總結
以上是生活随笔為你收集整理的linux学习-用户的特殊 shell 与 PAM 模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爬取所有校园新闻
- 下一篇: Educational Codeforc