標籤:tcp_wrapper sudo su visudo libwrap
TCP_Wrapper&sudo
一、tcp_wrapper
存取控制
1.tcp協議之上的服務
2.僅一部分基於tcp傳輸的應用程式層服務可接受其控制
使用者空間:庫
libwrap.so
連結至此庫的應用才會受tcp_wrapper管理
ldd `which sshd` //查看是否連結至此庫
1.動態連結:
ldd命令對其應用執行結果中包含了libwrap.so即可
ldd $(which COMMAND)
ldd `which vsftpd` |grep wrap
2.靜態連結
strings命令對其應用程式的執行結果包含了
/etc/hosts.allow
/etc/hosts.deny
strings $(which COMMAND)
yum -y install telnet-server
rpm -ql telnet-server
ldd `which in.telnetd` //沒有連結,但是in.telnetd受xinetd超級守護進程管理,而xinetd連結到了libwrap
ldd `which xinetd` |grep -i libwrap 驗證
注意:在CentOS6系統上的超級守護進程xinetd連結到了libwrap.so
在CentOS7上沒有串連到
服務基於libwrap完成存取控制的流程;
匹配順序:
/etc/host.allow---->/etc/host.deny
假如都沒有匹配,就是用預設策略,預設allow
先檢查hosts.allow檔案,如果有顯式的授權規則,則允許,否則,則檢查hosts.deny檔案,如果有顯式的拒絕規則,則拒絕訪問,否則,預設策略
格式:
daemon_list:client_list[:options]
daemon_list:
1.單個應用程式檔案的檔案名稱,而非服務名;例如vstpd
2.以逗號分隔的應用程式檔案名列表;
vsftpd,sshd,in.telnetd
3.ALL,所有受tcp wrapper控制的服務程式
client_list:
1.單個主機:IP地址或主機名稱
2.網路地址:使用完整的掩碼格式,或使用簡短地址網路地址標記法,不能使用首碼
172.16.1.0/255.255.0.0
172.16.1. //後面的 . 是不可省略的
3.ALL所有主機
4.KNOWN,UNKNOWN,PARANOID
KNOWN:主機名稱的正反向解析都是ok的
UNKNOWN:地址無法反解的
PARANOID:麻痹的,正反向解析不對應的
EXCEPT:除了
vsftpd: 172.16. EXECPT 172.16.1.0/255.255.255.0
vsftpd: 172.16. EXECPT 172.16.1.0/255.255.255.0 EXECPT 172.16.1.1
//172.16.1.1是可以訪問的,雙重否定即是肯定
[:options]
deny:拒絕,主要用於/etc/hosts.allow中使用
vsftpd: 172.16.1.1 :deny
allow:允許,主要用在/etc/hosts.deny中使用
sshd: 172.16.1. :allow
spawn:啟動一個外部程式完成執行的操作
sshd: ALL :spawn /bin/echo $(date) login attemp from %c to %s,%d >> /var/log/sshd.log
hosts.allow/hosts.deny的宏:
%c: 用戶端資訊,[email protected]或者[email protected]
%s:服務資訊,例如sshd,守護進程名
%d:守護進程資訊
%p:daemon precess id
%u:clinet user name
假如需要記錄並拒絕所有人訪問sshd
1.在hosts.allow中記錄日誌
2.在hosts.deny中拒絕所有
或者: 只把下面這一句,寫入到/etc/hosts.deny中
sshd: ALL :spawn /bin/echo $(date) login attemp from %c to %s,%d >> /var/log/sshd.log
注:如果sshd:這一行,寫在hosts.allow中,記錄日誌並允許
二、su:switch user
使用者切換
1.su - user,su -l user //登入式切換
2.su user //非登入式切換
-c "COMMAND" //使用該使用者身份執行該命令
su wolf -c 'rm aa'
sudo:以另外一個使用者的身份執行命令
授權知己:sudo檔案,/etc/sudoers //多項記錄,最後一條為預設
兩類內容:
1.別名的定義,即為變數
2.授權項,可使用別名進行授權
visudo:有固定文法格式,檢查
注:使用者通過sudo獲得的授權,只能通過sudo命令擷取
授權項(每一行一個)
who where(runas) commands
who:
username:單個使用者,
#uid:單個使用者的id號
%group:組內的所有使用者
%#gid:組內的所有使用者
user_alias:使用者別名,例如把多個使用者定義為一個別名,然後直接授權該別名即可
where:主機地址
ip或hostname:單個ip
NetAddr:網路地址,掩碼,prefix都支援
host_alias:主機別名
runas:
username
#uid
runas_alias
commands
command;單個命令
directory;指定目錄內的所有應用程式
sudoedit:特殊許可權,可用於向其他使用者授予sudo許可權,預設是sudo命令只能自己使用
cmnd_alias:命令別名,可以把多個命令起一個名字
定義別名:
ALIAS_TYPE NAME=item1,item2,...
ALIAS_TYPE:
User_Alias
Host_Alias
Runas_Alias
Cmnd_Alias
NAME:別名的名稱字元,必須使用全大寫字母
注意:$sudo su - //假如擁有su的許可權,可以直接切換到root身份
//或者該使用者擁有wheel組,也可以使用自己的密碼切換到root
less /etc/sudoers
%wheel //該組可以擁有任何許可權,假如想要使用者擁有該許可權,只需要讓使用者加入該組
常用標籤:
NOPASSWD
PASSWD
wheel組:
usermod -aG wheel wolf //讓wolf加入wheel組
su - wheel
sudo -l //自己能夠運行所有命令,以及能夠切換到root身份
sudo用法
sudo [options] command
-u 指定使用者身份
-l 列出使用者能以sudo的方式執行的所有命令
-k:清除此前使用者認證成功的記錄,再次使用sudo仍然需要使用密碼
sudo -u admin ls /root //會提示deny
實驗1:授權wolf能夠useradd,usermod
visudo
wolf ALL=(root) /usr/sbin/useradd, /usr/sbin/usermod
誰 在何地(runas) 命令
sudo useradd tt
實驗2:別名使用
User_Alias USERADMINS=
wolf,centos
Cmnd_Alias COMMANDS=/usr/sbin/useradd,/usr/sbin/usermod,/usr/bin/passwd
visudo
USERADMINS ALL=(root) COMMANDS
sudo useraddd user1
//注此時可以修改root密碼: passwd root //直接修改root密碼
實驗3:禁止修改root使用者密碼
Cmnd_Alias COMMANDS=/usr/sbin/useradd,/usr/sbin/usermod,/usr/bin/passwd [a-z]*,!/usr/bin/passwd root,/usr/sbin/userdel
實驗4:sudo不需要輸入密碼
wolf ALL=(root) NOPASSWD: /usr/sbin/useradd,/usr/sbin/usermod
wolf ALL=(root) NOPASSWD: /usr/sbin/useradd,/usr/sbin/usermod,PASSWD: /usr/sbin/userdel //執行userdel的時候要求輸入密碼
實驗5:偽管理員
wolf ALL=(root) /usr/sbin/su //此時wolf就相當於root了
wolf $: sudo su - //就能直接切換到root,使用自己的密碼
TCP_Wrapper&sudo