標籤:linux
su,sudo,TCP_Wrappers的相關命令用法及PAM認證機構
su 切換身份:su –l username –c ‘command‘
sudo
來自sudo包
man 5 sudoers
sudo能夠授權指定使用者在指定主機上運行某些命令。如果
未授權使用者嘗試使用 sudo,會提示聯絡管理員
sudo可以提供日誌,記錄每個使用者使用sudo操作
sudo為系統管理員提供設定檔,允許系統管理員集中地
系統管理使用者的使用許可權和使用的主機
sudo使用時間戳檔案來完成類似“檢票”的系統,預設存
活期為5分鐘的“入場券”
通過visudo命令編輯設定檔,具有語法檢查功能
visudo –c 檢查文法
sudo
設定檔:/etc/sudoers, /etc/sudoers.d/
時間戳記檔案:/var/db/sudo
記錄檔:/var/log/secure
設定檔支援使用萬用字元glob:
?:任意單一字元
* :匹配任意長度字元
[wxc]:匹配其中一個字元
[!wxc]:除了這三個字元的其它字元
\x : 轉義
[[alpha]] :字母 樣本: /bin/ls [[alpha]]*
設定檔規則有兩類;
1、別名定義:不是必須的
2、授權規則:必須的
sudoers
授權規則格式:
使用者 登入主機=(代表使用者) 命令
樣本:
root ALL=(ALL) ALL
格式說明:
user: 運行命令者的身份
host: 通過哪些主機
(runas):以哪個使用者的身份
command: 運行哪些命令
別名
Users和runas:
username
#uid
%group_name
%#gid
user_alias|runas_alias
host:
ip或hostname
network(/netmask)
host_alias
command:
command name
directory
sudoedit
Cmnd_Alias
sudo別名和樣本
別名有四種類型:User_Alias, Runas_Alias, Host_Alias
,Cmnd_Alias
別名格式:[A-Z]([A-Z][0-9]_)*
別名定義:
Alias_Type NAME1 = item1, item2, item3 : NAME2 =
item4, item5
樣本1:
Student ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
樣本2:
student ALL=(root) /sbin/pidof,/sbin/ifconfig
%wheel ALL=(ALL) NOPASSWD: ALL
sudo樣本
樣本3
User_Alias NETADMIN= netuser1,netuser2
Cmnd_Alias NETCMD = /usr/sbin/ip
NETADMIN ALL=(root) NETCMD
樣本4
User_Alias SYSADER=wang,mage,%admins
User_Alias DISKADER=tom
Host_Alias SERS=www.magedu.com,172.16.0.0/24
Runas_Alias OP=root
Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
SYSADER SERS= SYDCMD,DSKCMD
DISKADER ALL=(OP) DSKCMD
sudo樣本
樣本4
User_Alias ADMINUSER = adminuser1,adminuser2
Cmnd_Alias ADMINCMD = /usr/sbin/useradd,
/usr/sbin/usermod, /usr/bin/passwd [a-zA-Z]*,
!/usr/bin/passwd root
ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,
PASSWD:/usr/sbin/userdel
樣本5
Defaults:wang runas_default=tom
wang ALL=(tom,jerry) ALL
樣本6
wang 192.168.175.136,192.168.175.138=(root)
/usr/sbin/,!/usr/sbin/useradd
樣本7
wang ALL=(ALL) /bin/cat /var/log/messages*
sudo命令
ls -l /usr/bin/sudo
sudo –i –u wang 切換身份
sudo [-u user] COMMAND
-V 顯示版本資訊等配置資訊
-u user 預設為root
-l,ll 列出使用者在主機上可用的和被禁止的命令
-v 再延長密碼有效期間限5分鐘,更新時間戳記
-k 清除時間戳記(1970-01-01),下次需要重新輸密碼
-K 與-k類似,還要刪除時間戳記檔案
-b 在後台執行指令
-p 改變詢問密碼的提示符號
樣本:-p ”password on %h for user %p:"
TCP_Wrappers介紹
Wieste Venema,IBM,Google
工作在第四層(傳輸層)的TCP協議
對有狀態串連的特定服務進行安全檢測並實現存取控制
以庫檔案形式實現
某進程是否接受libwrap的控製取決於發起此進程的程式在編
譯時是否針對libwrap進行編譯的
判斷服務程式是否能夠由tcp_wrapper進行存取控制的方法:
ldd /PATH/TO/PROGRAM|grep libwrap.so
strings PATH/TO/PROGRAM|grep libwrap.so
TCP_Wrappers的使用
設定檔:/etc/hosts.allow, /etc/hosts.deny
協助參考:man 5 hosts_access,man 5 hosts_options
檢查順序:hosts.allow,hosts.deny(預設允許)
注意:一旦前面規則匹配,直接生效,將不再繼續
基本文法:
[email protected]: client_list [ :options :option… ]
[email protected]格式
單個應用程式的二進位檔案名,而非服務名,例如vsftpd
以逗號或空格分隔的應用程式檔案名列表,如
:sshd,vsftpd
ALL表示所有接受tcp_wrapper控制的服務程式
主機有多個IP,可用@hostIP來實現控制
如:[email protected]
TCP_Wrappers的使用
用戶端Client_list格式
以逗號或空格分隔的用戶端列表
基於IP地址:192.168.10.1 192.168.1.
基於主機名稱:www.magedu.com .magedu.com 較少用
基於網路/掩碼:192.168.0.0/255.255.255.0
基於net/prefixlen: 192.168.1.0/24(CentOS7)
基於網路組(NIS 域):@mynetwork
內建ACL:ALL,LOCAL,KNOWN,UNKNOWN,
PARANOID
EXCEPT用法:
樣本:vsftpd: 172.16. EXCEPT 172.16.100.0/24 EXCEPT
172.16.100.1
樣本
樣本:只允許192.168.1.0/24的主機訪問sshd
/etc/hosts.allow
sshd: 192.168.1.
/etc/hosts.deny
sshd :ALL
樣本:只允許192.168.1.0/24的主機訪問telnet和vsftpd服務
/etc/hosts.allow
vsftpd,in.telnetd: 192.168.1.
/etc/host.deny
vsftpd,in.telnetd: ALL
TCP_Wrappers的使用
[:options]選項:
協助:man 5 hosts_options
deny 主要用在/etc/hosts.allow定義“拒絕”規則
如:vsftpd: 172.16. :deny
allow 主要用在/etc/hosts.deny定義“允許”規則
如:vsftpd:172.16. :allow
spawn 啟動一個外部程式完成執行的操作
twist 實際動作是拒絕訪問,使用指定的操作替換當前服
務,標準I/O和ERROR發送到用戶端,預設至/dev/null
測試載入器:
tcpdmatch [-d] daemon[@host] client
-d 測試目前的目錄下的hosts.allow和hosts.deny
樣本
sshd: ALL :spawn echo "$(date) login attempt from
%c to %s,%d" >>/var/log/sshd.log
說明:
在/etc/hosts.allow中添加,允許登入,並記錄日誌
在/etc/hosts.deny中添加,拒絕登入,並記錄日誌
%c 用戶端資訊
%s 伺服器端資訊
%d 服務名
%p 守護進程的PID
vsftpd: 172.16. :twist /bin/echo “connection
prohibited”
PAM認證機制
PAM:Pluggable Authentication Modules
認證庫:文字檔,MySQL,NIS,LDAP等
Sun公司於1995 年開發的一種與認證相關的通用架構機制
PAM 是關注如何為服務驗證使用者的 API,通過提供一些動
態連結庫和一套統一的API,將系統提供的服務和該服務的
認證方式分開
使得系統管理員可以靈活地根據需要給不同的服務配置不
同的認證方式而無需更改服務程式
一種認證架構,自身不做認證
PAM認證機制
它提供了對所有服務進行認證的中央機制,適用於login,遠
程登入(telnet,rlogin,fsh,ftp,點對點通訊協定 (PPP)(PPP)),su等
應用程式中。系統管理員通過PAM設定檔來制定不同應用
程式的不同認證策略;應用程式開發人員通過在服務程式中使
用PAM API(pam_xxxx( ))來實現對認證方法的調用;而
PAM服務模組的開發人員則利用PAM SPI來編寫模組(主要是
引出一些函數pam_sm_xxxx( )供PAM介面庫調用),將不
同的認證機制加入到系統中;PAM介面庫(libpam)則讀取
設定檔,將應用程式和相應的PAM服務模組聯絡起來
PAM認證構架
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M00/07/B9/wKiom1nOO8fC0Du4AANNy7bfnDk015.png" title="pam.png" alt="wKiom1nOO8fC0Du4AANNy7bfnDk015.png" />
pam認證原理
PAM認證一般遵循這樣的順序:Service(服務)→PAM(配置文
件)→pam_*.so
PAM認證首先要確定那一項服務,然後載入相應的PAM的配
置檔案(位於/etc/pam.d下),最後調用認證檔案(位於
/lib/security下)進行安全認證
650) this.width=650;" src="https://s4.51cto.com/wyfs02/M00/A6/6B/wKioL1nOO6jQ_zznAAFbOCk5dH4870.png" title="pam1.png" alt="wKioL1nOO6jQ_zznAAFbOCk5dH4870.png" />
PAM認證機制
PAM認證過程:
1.使用者執行/usr/bin/passwd 程式,並輸入密碼
2.passwd開始呼叫PAM模組,PAM模組會搜尋passwd程式的
PAM相關設定檔案,這個設定檔案一般是在/etc/pam.d/裡
邊的與程式同名的檔案,即PAM會搜尋/etc/pam.d/passed
這個設定檔案
3.經由/etc/pam.d/passwd設定檔案的資料,取用PAM所提
供的相關模組來進行驗證
4.將驗證結果回傳給passwd這個程式,而passwd這個程式會
根據PAM回傳的結果決定下一個動作(重新輸入密碼或者通
過驗證)
PAM認證機制
PAM相關檔案
模組檔案目錄:/lib64/security/*.so
環境相關的設定:/etc/security/
主設定檔:/etc/pam.conf,預設不存在
為每種應用模組提供一個專用的設定檔:
/etc/pam.d/APP_NAME
注意:如/etc/pam.d存在,/etc/pam.conf將失效
PAM認證機制
通用設定檔/etc/pam.conf格式
application type control module-path arguments
專用設定檔/etc/pam.d/* 格式
type control module-path arguments
說明:
服務名(application)
telnet、login、ftp等,服務名字“OTHER”代表所有沒
有在該檔案中明確配置的其它服務
模組類型(module-type)
control PAM庫該如何處理與該服務相關的PAM模組的成
功或失敗情況
module-path 用來指明本模組對應的程式檔案的路徑名
Arguments 用來傳遞給該模組的參數
PAM認證機制
模組類型(module-type)
Auth 帳號的認證和授權
Account 與帳號管理相關的非認證類的功能,如:用來限
制/允許使用者對某個服務的訪問時間,當前有效系統資源
(最多可以有多少個使用者),限制使用者的位置(例如:root用
戶只能從控制台登入)
Password 使用者修改密碼時密碼複雜度檢查機制等功能
Session 使用者擷取到服務之前或使用服務完成之後需要進
行一些附加的操作,如:記錄開啟/關閉資料的資訊,監視
目錄等
-type 表示因為缺失而不能載入的模組將不記錄到系統日
志,對於那些不總是安裝在系統上的模組有用
Control:
PAM庫如何處理與該服務相關的PAM模組成功或失敗情況
兩種方式實現:
簡單和複雜
簡單方式實現:一個關健詞實現
required :一票否決,表示本模組必須返回成功才能通過
認證,但是如果該模組返回失敗,失敗結果也不會立即通
知使用者,而是要等到同一type中的所有模組全部執行完畢
再將失敗結果返回給應用程式。即為必要條件
PAM認證機制
requisite :一票否決,該模組必須返回成功才能通過認證,
但是一旦該模組返回失敗,將不再執行同一type內的任何模
塊,而是直接將控制權返回給應用程式。是一個必要條件
sufficient :一票通過,表明本模組返回成功則通過身份認
證的要求,不必再執行同一type內的其它模組,但如果本模
塊返回失敗可忽略,即為充分條件
optional :表明本模組是可選的,它的成功與否不會對身份
認證起關鍵作用,其傳回值一般被忽略
include: 調用其他的設定檔中定義的配置資訊
複雜詳細實現:使用一個或多個“status=action”
[status1=action1 status2=action …]
Status:檢查結果的返回狀態
Action:採取行為 ok,done,die,bad,ignore,reset
ok 模組通過,繼續檢查
done 模組通過,返回最後結果給應用
bad 結果失敗,繼續檢查
die 結果失敗,返回失敗結果給應用
ignore 結果忽略,不影響最後結果
reset 忽略已經得到的結果
PAM認證機制
module-path: 模組路徑
相對路徑:
/lib64/security目錄下的模組可使用相對路徑
如:pam_shells.so、pam_limits.so
絕對路徑:
模組通過讀取設定檔完成使用者對系統資源的使用控制
/etc/security/*.conf
注意:修改PAM設定檔將馬上生效
建議:編輯pam規則時,保持至少開啟一個root會話,以防止
root身分識別驗證錯誤
Arguments 用來傳遞給該模組的參數
user/share/doc/pam-*
rpm -qd pam
man –k pam_
man 模組名 如man rootok
《The Linux-PAM System Administrators‘ Guide》
PAM模組樣本
模組:pam_shells
功能:檢查有效shell
man pam_shells
樣本:不允許使用/bin/csh的使用者本地登入
vim /etc/pam.d/login
auth required pam_shells.so
vim /etc/shells
去掉 /bin/csh
useradd –s /bin/csh testuser
testuser將不可登入
tail /var/log/secure
模組:pam_securetty.so
功能:只允許root使用者在/etc/securetty列出的安全終端上
登陸
樣本:允許root在telnet登陸
vi /etc/pam.d/login
#auth required pam_securetty.so #將這一行加上注釋
或者/etc/securetty檔案中加入
pts/0,pts/1…pts/n
模組:pam_nologin.so
功能:如果/etc/nologin檔案存在,將導致非root使用者不能登陸
,如果使用者shell是/sbin/nologin 時,當該使用者登陸時,會顯
示/etc/nologin.txt檔案內容,並拒絕登陸
塊:pam_limits.so
功能:在使用者層級實現對其可使用的資源的限制,例如:可
開啟的檔案數量,可啟動並執行進程數量,可用記憶體空間
修改限制的實現方式:
(1) ulimit命令,立即生效,但無法儲存
-n 最多的開啟的檔案描述符個數
-u 最大使用者進程數
-S 使用 `soft‘(軟)資源限制
-H 使用 `hard‘(硬)資源限制
(2) 設定檔:/etc/security/limits.conf,
/etc/security/limits.d/*.conf
設定檔:每行一個定義;
<domain> <type> <item> <value>
Username 單個使用者
@group 組內所有使用者
* 所有使用者
<type> 限制的類型
Soft 軟式節流,普通使用者自己可以修改
Hard 硬限制,由root使用者設定,且通過kernel強制生效
- 二者同時限定
<item> 限制的資源
nofile 所能夠同時開啟的最大檔案數量,預設為1024
nproc 所能夠同時啟動並執行進程的最大數量,預設為1024
<value> 指定具體值
樣本:pam_limits.so
限制使用者最多開啟的檔案數和運行進程數
/etc/pam.d/system-auth
session required pam_limits.so
vim /etc/security/limits.conf
apache – nofile 10240 apache使用者可開啟10240個檔案
student hard nproc 20 不能運行超過20個進程
su ,sudo,TCP_Wrappers的相關命令用法及PAM認證機構