1、SSH端口轉(zhuǎn)發(fā)
- 遠(yuǎn)程端口轉(zhuǎn)發(fā)
實驗過程
準(zhǔn)備三個主機,并檢查三個主機的防火墻是否關(guān)閉,selinux是否禁用,然后將郵件服務(wù)器的主機的配置文件更改為下圖所示
打開郵件服務(wù)器的配置文件/etc/postfix/main.cf
在郵件服務(wù)器上拒絕來自107機器的連接,模擬現(xiàn)實中的防火墻
[root@centos6 ~]#iptables -A INPUT -s 172.18.21.107 -j REJECT
[root@centos6 app]#ssh -R 9527:172.18.21.106:25 -Nf 172.18.21.107
[root@centos6 app]#ss -nt ---發(fā)現(xiàn)ssh客戶端已經(jīng)連接到遠(yuǎn)程的ssh服務(wù)器
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 172.18.21.6:58720 172.18.21.107:22
ESTAB 0 64 172.18.21.6:22 172.18.252.32:57431
[root@centos7 app]#ss -nt ---發(fā)現(xiàn)ssh客戶端和服務(wù)器已經(jīng)建立好隧
道
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 52 172.18.21.107:22 172.18.252.32:56505
ESTAB 0 0 172.18.21.107:22 172.18.21.6:58720
[root@centos7 app]#telnet 127.0.0.1 9527 ---連接本機的9527端口,就可以和遠(yuǎn)程的郵件服務(wù)器相連
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 centos6.magedu.com ESMTP Postfix
[root@centos6 ~]#ss -nt ---發(fā)現(xiàn)是中間的ssh客戶端連接到了郵件服務(wù)器
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 172.18.21.106:25 172.18.21.6:48522
ESTAB 0 64 172.18.21.106:22 172.18.252.32:56112
可以給郵件服務(wù)器發(fā)一封郵件如下圖
在郵件服務(wù)器切換到zhang用戶,然后輸入mail就可以看到郵件了。
- 動態(tài)端口轉(zhuǎn)發(fā)
實驗
在c機器上搭建一個http服務(wù),并且防火墻拒絕a去訪問
在A上執(zhí)行如下命令
[root@centos7 app]#ssh -D 1080 172.18.21.6 ----172.18.21.6為B
的ip地址,1080端口是在A上打開的
Last login: Tue Sep 12 19:58:26 2017 from 172.18.252.32
然后在a的圖形界面上對filefox(火狐瀏覽器)進(jìn)行如下圖設(shè)置
這樣就可以穿過防火墻去連接C了,也可以在字符界面下執(zhí)行如下命令去訪問C
[root@centos7 app]#ssh -D 1080 172.18.21.6 -Nf
[root@centos7 app]#ss -nt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 52 172.18.21.107:22 172.18.252.32:56505
ESTAB 0 0 172.18.21.107:54478 172.18.21.6:22
ESTAB 0 0 172.18.21.107:22 172.18.21.6:58720
[root@centos7 app]#curl --socks5 127.0.0.1:1080 http://172.18.21.106
<h1>welcome to haerbing </h1>
當(dāng)用firefox訪問internet時,本機的1080端口做為代理服務(wù)器,firefox的訪問請求被轉(zhuǎn)發(fā)到sshserver上,由sshserver替之訪問internet。
2、ssh服務(wù)器的配置文件
[root@centos7 app]#cd /etc/ssh
[root@centos7 ssh]#ls ---這個目錄下存放的是服務(wù)器各種算法的公
鑰和私鑰,以及客戶端和服務(wù)器端的配置文件,公鑰和私鑰用于連接
時,客戶端對服務(wù)器端進(jìn)行身份驗證,連接時輸入yes,客戶端會得到
服務(wù)器端的公鑰,保存到當(dāng)前用戶的家目錄.ssh/known_hosts
文件中,下次連接時先用公鑰加密數(shù)據(jù)傳給服務(wù)器,如果服務(wù)器能夠
解開,證明是想要連接的服務(wù)器
moduli ssh_host_ecdsa_key ssh_host_ed25519_key.pub
ssh_config ssh_host_ecdsa_key.pub ssh_host_rsa_key
sshd_config ssh_host_ed25519_key ssh_host_rsa_key.pub
ssh服務(wù)器端的配置文件為/etc/ssh/sshd_config
?Port
為了避免被攻擊建議把端口號改掉,默認(rèn)是22端口
?ListenAddress ip
本機的哪個ip地址允許監(jiān)聽22端口,建議這一項改一下。不要所有的地址
?LoginGraceTime 2m
連接時兩分鐘一直不輸入密碼就退出
?PermitRootLogin yes
允許root賬號直接連接,建議改為no,改為no后只有普通用戶可以連接,但可以su切換為root
?StrictModes yes
檢查文件的各種屬性,權(quán)限等
?MaxAuthTries 6
如果密碼輸錯3次就退出,是6的一半
?MaxSessions 10 同一個連接最大會話
比如用xshell連接后,用復(fù)制的方式打開十個終端,就不能再打開了。
?PubkeyAuthentication yes
允許基于key驗證
?PermitEmptyPasswords no
允許空口令驗證
?PasswordAuthentication yes
基于密碼驗證,如果關(guān)掉只能基于key的驗證
?GatewayPorts no
啟用網(wǎng)關(guān),啟用之后就相當(dāng)于自己是網(wǎng)關(guān),跟自己同一個網(wǎng)段的主機都可以連到本主機,也可以通過本主機去連接到外面的網(wǎng)絡(luò)
?ClientAliveInterval(單位:秒)
連上去之后什么也不干,多長時間斷開
?ClientAliveCountMax(默認(rèn)3)
探測次數(shù)。連上什么也不干,次數(shù)乘以上面的時間,才是真正斷開的時間。
?UseDNS yes
啟用DNS。建議改為no,提高連接速度,不然會把地址方向解析,但由于沒有配置dns,解析半天解析不出來才讓連接
?GSSAPIAuthentication yes 提高速度可改為no
GSSAPI認(rèn)證,建議改為no,提高連接速度
?MaxStartups未認(rèn)證連接最大值,默認(rèn)值10
用戶個數(shù)到達(dá)10個就開始拒絕30%,按比例拒絕,到達(dá)60個就全拒絕,控制用戶連接,最大只能連接60個用戶
?Banner /path/file
連接時候的提示信息,可以后面跟一個文件,然后編輯這個文件中的內(nèi)容,就可做為連接提示信息
限制用戶登錄的辦法
AllowUsers user1 user2 user3 --表示允許遠(yuǎn)程主機以本機的哪個用戶的身份登錄本主機
DenyUsers ---表示不允許遠(yuǎn)程主機用本機的哪個用戶的身份登錄本主機
AllowGroups ---表示允許遠(yuǎn)程主機以本機哪個組里的用戶的身份登錄本主機
DenyGroups
具體的解釋可以查看幫助man /etc/ssh/sshd_config
135 #Match User anoncvs
136 # X11Forwarding no
137 # AllowTcpForwarding no
138 # ForceCommand cvs server
139 AllowUsers zhang ---在配置文件的最后加上一行就可以了,
表示只允許遠(yuǎn)程主機以zhang的身份登錄本主機,所以遠(yuǎn)程主機在連
接的時候要知道zhang的密碼才能連接到本主機
-ssh服務(wù)的最佳實踐
?禁止使用默認(rèn)端口
?禁止使用protocol version 1
?限制可登錄用戶
?設(shè)定空閑會話超時時長
?利用防火墻設(shè)置ssh訪問策略
?僅監(jiān)聽特定的IP地址
?基于口令認(rèn)證時,使用強密碼策略
tr-dc A-Za-z0-9_ < /dev/urandom| head -c 30| xargs
?使用基于密鑰的認(rèn)證
?禁止使用空密碼
?禁止root用戶直接登錄
?限制ssh的訪問頻度和并發(fā)在線數(shù)
?做好日志,經(jīng)常分析
ssh的日志文件是/var/log/secure,每一次連接日志文件都會有記錄。
3、編譯安裝dropbear示例
ssh協(xié)議的另一個實現(xiàn):dropbear
1、查看是否安裝開發(fā)包組,如果沒有安裝就安裝
2、解壓縮dropbear-2017.75.tar.bz2文件
3、進(jìn)入dropbear-2017.75
4、cat README cat INSTALL 查看一下服務(wù)的信息和安裝信息
5、 ./configure --help 查看一下如何執(zhí)行這個腳本
6、 ./configure --prefix=/app 執(zhí)行configure腳本
7、 yum install zlib-devel ---執(zhí)行過程報錯,需要安裝這個包文件
8 、./configure --prefix=/app ---繼續(xù)執(zhí)行configure腳本
9、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
10、 make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install
到此安裝過程就結(jié)束了,下面就是安裝私鑰和驗證服務(wù)
11、cd /app/bin ./dropbearkey -t rsa -f dropbear_rsa_host_key---安
裝私鑰和公鑰,這個和sshd服務(wù)一樣,在/etc/ssh/目錄一下也有公鑰
和私鑰。
12、cd /app/sbin ./dropbear -E -p 2222 ---開啟這個服務(wù),并指定
端口為2222,-E選項是執(zhí)行的時候如果報錯會在屏幕上顯示
13、發(fā)現(xiàn)出錯,F(xiàn)ailed loading /etc/dropbear/dropbear_rsa_host_key ---找不到鑰匙
14、 mkdir /etc/dropbear ---創(chuàng)建一個目錄
ln -s /app/bin/dropbear_rsa_host_key /etc/dropbear/dropbear_rsa_host_key ---創(chuàng)建一個軟連接指向指向
存放鑰匙的文件
15、./dropbear -E -p 2222 ---再次執(zhí)行就可以了,在遠(yuǎn)程用ssh 172.18.21.107 -p 2222就可以連接到本主機了
16、cd/app bin/ ./dbclient 172.18.21.106 ----驗證一下客戶端的命
令,發(fā)現(xiàn)也可以連接到遠(yuǎn)程主機
4、AIDE
?AIDE(Adevanced Intrusion Detection Environment)
(高級入侵檢測環(huán)境)是一個入侵檢測工具,主要用途是檢查文件的完整性,審計計算機上的那些文件被更改過了。
?AIDE能夠構(gòu)造一個指定文件的數(shù)據(jù)庫,它使用aide.conf作為其配置文件。AIDE數(shù)據(jù)庫能夠保存文件的各種屬性,包括:權(quán)限(permission)、索引節(jié)點序號(inode number)、所屬用戶(user)、所屬用戶組(group)、文件大小、最后修改時間(mtime)、創(chuàng)建時間(ctime)、最后訪問時間(atime)、增加的大小以及連接數(shù)。AIDE還能夠使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每個文件的校驗碼或散列號,也就是哈希運算,用來判斷文件的內(nèi)容是否被更改。
?這個數(shù)據(jù)庫不應(yīng)該保存那些經(jīng)常變動的文件信息,例如:日志文件、郵件、/proc文件系統(tǒng)、用戶起始目錄以及臨時目錄。
示例
[root@centos7 app]#rpm -q aide
package aide is not installed
[root@centos7 app]#yum install aide
[root@centos7 app]#rpm -ql aide ---查看一下這個軟件包都生成了
哪些文件
/etc/aide.conf ---配置文件
/usr/sbin/aide ---主程序文件
/var/lib/aide ----數(shù)據(jù)庫文件
/var/log/aide ---日志文件
[root@centos7 app]#cp /etc/fstab f1
[root@centos7 app]#cp /etc/fstab f2
[root@centos7 app]#cp /etc/fstab f3
[root@centos7 app]#ls ---復(fù)制三個文件,下步實驗時只監(jiān)控f1和f2文件,f3文件不監(jiān)控
f1 f2 f3
[root@centos7 app]#vim /etc/aide.conf ---進(jìn)入這個文件會發(fā)現(xiàn)有很
多默認(rèn)的設(shè)置,這里為了實驗方便,把默認(rèn)的都刪除了,自己寫了一
個設(shè)置,指定監(jiān)控/app目錄的mon這些特性,但不監(jiān)控f3文件
mon = p+u+g+sha512+m+s+b
/app mon
!/app/f3
[root@centos7 app]#aide --help ---查看一下用法
[root@centos7 app]#aide -i ---初始化數(shù)據(jù)庫,也就是生成數(shù)據(jù)庫
[root@centos7 app]#cd /var/lib/aide/
[root@centos7 aide]#ls ---發(fā)現(xiàn)數(shù)據(jù)庫文件已經(jīng)生成
aide.db.new.gz
[root@centos7 aide]#mv aide.db.new.gz aide.db.gz ---要把數(shù)據(jù)庫文件名改成aide.db.gz,才能使用
[root@centos7 aide]#aide -C ---檢查文件是否監(jiān)控的文件是否發(fā)生
變化和數(shù)據(jù)庫進(jìn)行對比
AIDE, version 0.15.1
### All files match AIDE database. Looks okay!
[root@centos7 app]#chown zhang f1
[root@centos7 app]#echo 1 > f2
[root@centos7 app]#aide -C
AIDE 0.15.1 found differences between database and filesystem!!
Start timestamp: 2017-09-13 11:13:19
Summary:
Total number of files: 4
Added files: 0
Removed files: 0
Changed files: 2
---------------------------------------------------
Changed files:
---------------------------------------------------
changed: /app/f1
changed: /app/f2
---------------------------------------------------
Detailed information about changes:
---------------------------------------------------
File: /app/f1
Uid : 0 , 1000
File: /app/f2
Size : 595 , 2
Mtime : 2017-09-13 10:55:20 , 2017-09-13 11:13:16
SHA512 : spFcC7zJqC72A03MBygd2sAHLu6W82le , Ortmd680rFfAylgo/ZT52IbCbOWajOYO
[root@centos7 app]#aide -u --更新數(shù)據(jù)庫
[root@centos7 app]#cd /var/lib/aide/
[root@centos7 aide]#ls ---發(fā)現(xiàn)又新生成了一個數(shù)據(jù)庫文件,把原
來的刪除,把新生成的文件改名后就可以使用了
aide.db.gz aide.db.new.gz
對于沒有監(jiān)控的f3文件,確檢查不出來。
aide是檢查文件完整性的一個很好的工具,對于那些不改動的文件或目錄都可以用aide去監(jiān)控,比如/usr/bin和/usr/sbin下的二進(jìn)制程序
5、sudo 授權(quán)指定用戶在指定主機上運行某些命令
1、 簡介
su切換身份:su–l username –c ‘command‘ 切換到某個用戶執(zhí)行命令再切換回原來用戶
?sudo
?來自sudo包
?man 5 sudoers
?sudo能夠授權(quán)指定用戶在指定主機上運行某些命令。如果未授權(quán)用戶嘗試使用sudo,會提示聯(lián)系管理員
?sudo可以提供日志,記錄每個用戶使用sudo操作
?sudo為系統(tǒng)管理員提供配置文件,允許系統(tǒng)管理員集中地管理用戶的使用權(quán)限和使用的主機
?sudo使用時間戳文件來完成類似“檢票”的系統(tǒng),默認(rèn)存活期為5分鐘的“入場券”,也就是過五分鐘再執(zhí)行sudo,授權(quán)某個用戶執(zhí)行哪個命令的的時候又要輸密碼驗證,5分鐘之內(nèi)如果輸過一次就不需要再輸入了。
?通過visudo命令編輯配置文件,具有語法檢查功能,但默認(rèn)是用vi打開的,沒有顏色,可以使用export EDITOR=vim來讓其使用vim編輯。如果要長期有效保存到/etc/profile.d目錄下的一個文件中。
visudo–c 檢查語法
2、配置文件
?配置文件:/etc/sudoers, /etc/sudoers.d/,可以把設(shè)置放到/etc/sudoers.d/目錄下,自己創(chuàng)建一個文件,格式和/etc/sudoers的相同就可以,和/etc/crontab用法類似。
?時間戳文件:/var/db/sudo
?日志文件:/var/log/secure
?配置文件支持使用通配符glob:
?:任意單一字符
*:匹配任意長度字符
[wxc]:匹配其中一個字符
[!wxc]:除了這三個字符的其它字符
\x : 轉(zhuǎn)義
[[alpha]] :字母示例:/bin/ls [[alpha]]*
3、授權(quán)規(guī)則格式
用戶 登入主機=(代表用戶) 命令
?示例:
wang ALL=(ALL) ALL 表示授權(quán)wang用戶在所有主機,代表所有人可以執(zhí)行任何操作
?格式說明:
user: 運行命令者的身份
host: 通過哪些主機
(runas):以哪個用戶的身份
command: 運行哪些命令
4、別名
?Users和runas:
username ----wang zhang root
#uid ---0uid表示root用戶
%group_name
%#gid ---%1000gid表示gid為1000的用戶
user_alias|runas_alias ---別名
?host:
ip或hostname
network(/netmask)
host_alias
?command:
command name
directory ---只能指執(zhí)行特定文件夾下的所有程序
sudoedit ---授權(quán)用戶去更改sudo策略,也就是可以改sudo的配置文件,用戶在用的時候執(zhí)行的命令是sudoedit /etc/sudoers或者sudoedit /etc/sudoers.d/test
Cmnd_Alias
?別名有四種類型:User_Alias, Runas_Alias, Host_Alias ,Cmnd_Alias
?別名格式:[A-Z]([A-Z][0-9]_)* ---必須是大寫字母開頭,后面是大寫字母、數(shù)字或者下劃線
?別名定義:
Alias_Type NAME1 = item1, item2, item3 : NAME2 = item4, item5
示例1
student ALL=(root) /sbin/pidof,/sbin/ifconfig
%wheel ALL=(ALL) NOPASSWD: ALL ---收錢wheel組里的用戶能夠代表任何人在不輸入口令的前提下執(zhí)行所有操作
示例2
User_Alias NETADMIN= netuser1,netuser2
Cmnd_Alias NETCMD = /usr/sbin/ip
NETADMIN ALL=(root)NETCMD
示例3
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
?示例4
User_Alias ADMINUSER = adminuser1,adminuser2
Cmnd_Alias ADMINCMD = /usr/sbin/useradd, /usr/sbin/usermod, /usr/bin/passwd[a-zA-Z]*,!/usr/bin/passwdroot
ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel ---表示執(zhí)行前者操作時不用輸入口令,執(zhí)行后者操作時要輸入口令
示例5
Defaults:wang runas_default=tom ---表示不寫-u代替誰時,網(wǎng)用戶默認(rèn)代替的是tom用戶執(zhí)行什么操作
wang ALL=(tom,jerry) ALL ---授權(quán)wang用戶可以代替兩個人執(zhí)行所有操作,但不寫-u時默認(rèn)代替的是tom
示例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*
這種寫法有個問題,就是wang用戶可以用sudo cat /var/log/messages /etc/shadow,為了出現(xiàn)這種情況??梢詫懗扇缦赂袷?wang ALL=(ALL) /bin/cat /var/log/messages*,!/bin/cat /var/log/messages *
5、sudo命令
?ls -l /usr/bin/sudo
?sudo–i–u wang切換身份
?sudo[-u user] COMMAND
-V 顯示版本信息等配置信息
-u user 默認(rèn)為root
-l,ll列出用戶在主機上可用的和被禁止的命令
-v 再延長密碼有效期限5分鐘,更新時間戳
-k 清除時間戳(1970-01-01),下次需要重新輸密碼
-K 與-k類似,還要刪除時間戳文件
-b在后臺執(zhí)行指令
-p 改變詢問密碼的提示符號
示例:-p”password on %h for user %p:"
[zhang@centos7 ~]$sudo -p "password on %h for user %p:" cat /etc/shadow
password on centos7 for user zhang:
注意:這些命令都是在切換身份之后,被授權(quán)的用戶執(zhí)行的命令。
實驗
[root@centos7 sbin]#su - zhang
Last login: Wed Sep 13 09:44:09 CST 2017 on pts/0
[zhang@centos7 ~]$su -l root -c 'cat /etc/shadow'
[root@centos7 profile.d]#visudo ---執(zhí)行這個命令,默認(rèn)就會打
開/etc/sudoers文件,并且如果編寫的時候有語法錯誤,在保存的時
候會有提示,進(jìn)行如下編輯
zhang ALL=(ALL) /bin/mount /dev/sr0/ /mnt/cdrom, /usr/bin/unmout
[root@centos7 profile.d]#visudo -c ---檢查一下語法沒有錯誤,用
vim打開這個配置文件時是只讀的,可以用wq!強制保存,也可以用
這條命令檢查語法錯誤
/etc/sudoers: parsed OK
[zhang@centos7 ~]$sudo mount /dev/sr0 /mnt/cdrom/ ---發(fā)現(xiàn)授權(quán)
的時候是嚴(yán)格匹配的,多一個/都執(zhí)行不了
[sudo] password for zhang:
Sorry, user zhang is not allowed to execute '/bin/mount /dev/sr0 /mnt/cdrom' as root on centos7.magedu.com.
[zhang@centos7 ~]$sudo mount /dev/sr0/ /mnt/cdrom
[sudo] password for zhang:
mount: /dev/sr0 is write-protected, mounting read-only
[root@centos7 bin]#ll /usr/bin/ /bin -d ---這個兩個文件是軟連接的關(guān)系
lrwxrwxrwx. 1 root root 7 Jul 14 11:16 /bin -> usr/bin
dr-xr-xr-x. 2 root root 49152 Sep 11 16:36 /usr/bin/
[root@centos7 profile.d]#cd /etc/sudoers.d/ ---進(jìn)入這個目錄下,創(chuàng)
建一個自己的文件,也可以授權(quán)用戶,但格式要和/etc/sudoers相同
[root@centos7 sudoers.d]#ls ---默認(rèn)是個空目錄
[root@centos7 sudoers.d]#vim test ---創(chuàng)建test文件,并編輯如下
zhang 172.18.21.107=(tom) /bin/cat /etc/shadow
[root@centos7 sudoers.d]#visudo -f test ---編輯完也可以用visudo
命令打開進(jìn)行編輯,但要加上-f
zhang 172.18.21.107=(tom) /bin/cat /etc/shadow
[root@centos7 bin]#setfacl -m u:tom:r /etc/shadow ---給tom用戶設(shè)置一個acl權(quán)限,使其可以訪問shadow文件
[root@centos7 bin]#getfacl /etc/shadow
getfacl: Removing leading '/' from absolute path names
# file: etc/shadow
# owner: root
# group: root
user::r--
user:tom:r-- ---設(shè)置成功
group::---
mask::r--
other::---
[root@centos7 bin]#su - zhang
Last login: Wed Sep 13 14:34:09 CST 2017 on pts/1
[zhang@centos7 ~]$sudo -u tom cat /etc/shadow ---可以看這個文件了
[root@centos7 sudoers.d]#visudo -f test ---設(shè)置如下授權(quán)
User_Alias NETADMIN = zhang, tom : DBA = zhang
Cmnd_Alias NETCMD = /usr/sbin/ip, /usr/sbin/ifconfig
NETADMIN ALL=(ALL) NOPASSWD:NETCMD
DBA ALL=(ALL) NOPASSWD:/bin/cat /etc/shadow
[root@centos7 sudoers.d]#visudo -c ---檢查一下,要求更改權(quán)限,
因為前面創(chuàng)建的時候使用vim創(chuàng)建的,所以權(quán)限不是要求的權(quán)限,如
果用visudo test,權(quán)限就不用改了
/etc/sudoers: parsed OK
/etc/sudoers.d/test: bad permissions, should be mode 0440
[root@centos7 sudoers.d]#chmod 0440 test
[root@centos7 sudoers.d]#visudo -c
/etc/sudoers: parsed OK
/etc/sudoers.d/test: parsed OK
執(zhí)行都是成功的
[root@centos7 sudoers.d]#visudo -f test
Defaults:zhang runas_default=tom ---表示不用指定,默認(rèn)zhang用戶代表的就是tom去執(zhí)行操作
zhang ALL=(ALL) /bin/cat /var/log/messages*,!/bin/cat /var/log/messages* *
[zhang@centos7 ~]$sudo cat /var/log/messages /etc/shadow
Sorry, user zhang is not allowed to execute '/bin/cat /var/log/messages /etc/shadow' as tom on centos7.magedu.com.
這樣就可以避免看shadow文件了
[root@centos7 zhang]#visudo -f /etc/sudoers.d/test
zhang ALL=(ALL) sudoedit ---授權(quán)zhang用戶能夠編輯/etc/sudoers文件和/etc/sudoers.d/test文件
[zhang@centos7 ~]$sudoedit /etc/sudoers.d/test
zhang ALL=(ALL) sudoedit
6、TCP_Wrappers介紹
1、介紹
?工作在第四層(傳輸層)的TCP協(xié)議
?對有狀態(tài)連接的特定服務(wù)進(jìn)行安全檢測并實現(xiàn)訪問控制
?以庫文件形式實現(xiàn)
?某進(jìn)程是否接受libwrap的控制取決于發(fā)起此進(jìn)程的程序在編譯時是否針對libwrap進(jìn)行編譯的
?判斷服務(wù)程序是否能夠由tcp_wrapper進(jìn)行訪問控制的方法:
[root@centos7 zhang]#which sshd ---二進(jìn)制程序名,而不是
服務(wù)名
/usr/sbin/sshd
[root@centos7 zhang]#ldd /usr/sbin/sshd |grep "libwrap.so"
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f2a8273e000)
[root@centos7 zhang]#strings /usr/sbin/sshd |grep "libwrap.so"
libwrap.so.0
[root@centos7 zhang]#ldd `which vsftpd`|grep "libwrap.so" ---受控制
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fc7f941a000)
[root@centos7 zhang]#ldd `which httpd`|grep "libwrap.so" ---不受控制
總結(jié):有些服務(wù)是受tcp_ wrappers控制,有些不受控制,比如http服務(wù)就不受控制。
2、TCP_Wrappers的使用
?配置文件:/etc/hosts.allow, /etc/hosts.deny
?幫助參考:man 5 hosts_access,man 5 hosts_options
?檢查順序:hosts.allow,hosts.deny(默認(rèn)允許)
注意:一旦hosts.allow規(guī)則匹配,直接生效,將不再繼續(xù),如果不匹配就看hosts.deny,如果都不匹配,默認(rèn)是允許的。
?基本語法:
?daemon_list@hostIP: client_list[ :options:option… ]
sshd@172.18.21.107: 172.18.21.106
如果放到hosts.deny文件里,表示拒絕IP地址為172.18.21.106的主機去訪問ip地址為172.18.21.107的主機的sshd服務(wù)
的107的ip地址
?Daemon_list格式
?單個應(yīng)用程序的二進(jìn)制文件名,而非服務(wù)名,例如vsftpd,intelnetd
[root@centos7 zhang]#rpm -ql telnet-server ---比如telnet服務(wù)來自
于telnet-server軟件包
/usr/lib/systemd/system/telnet.socket ---服務(wù)名,開啟或者關(guān)閉服
務(wù)的時候可以用systemctl start telnet.socket
/usr/lib/systemd/system/telnet@.service
/usr/sbin/in.telnetd ---應(yīng)用程序的二進(jìn)制文件名,開啟或者關(guān)閉服
務(wù)時也可直接運行這個文件,其實用systemctl可以管理這個服務(wù)是因
為在/usr/lib/systemd/system目錄或者在/etc/systemd/system/目錄下
有對應(yīng)的服務(wù)unit文件,而centos6中是在/etc/init.d目錄下有很多服務(wù)
腳本,使服務(wù)受service管理。
/usr/share/man/man5/issue.net.5.gz
/usr/share/man/man8/in.telnetd.8.gz
/usr/share/man/man8/telnetd.8.gz
?以逗號或空格分隔的應(yīng)用程序文件名列表,如:sshd,vsftpd
sshd@172.18.0.107,vsftpd: ALL
如果放到hosts.deny文件里,表示拒絕所有外部主機去訪問我的ssh
服務(wù)的172.18.0.107的地址,訪問我的vsftpd服務(wù)的所有ip地址。
?ALL表示所有接受tcp_wrapper控制的服務(wù)程序
?主機有多個IP,可用@hostIP來實現(xiàn)控制
如:in.telnetd@192.168.0.254
?客戶端Client_list格式
?以逗號或空格分隔的客戶端列表
?基于IP地址:192.168.10.1 192.168.1.
?基于主機名:www.magedu.com .magedu.com 較少用
?基于網(wǎng)絡(luò)/掩碼:192.168.0.0/255.255.255.0
?基于net/prefixlen: 192.168.1.0/24(CentOS7)
---注意CIDR表示法只能centos7中使用
?基于網(wǎng)絡(luò)組(NIS 域):@mynetwork
?內(nèi)置ACL:ALL,LOCAL,KNOWN,UNKNOWN,PARANOID
ALL:表示所有的
LOCAL:主機名不帶點的就匹配
KNOWN:名字可以解析成ip地址的就匹配
UNKNOWN:名字不可以解析成ip地址的就匹配
PARANOID:正向解析和反向解析不對應(yīng)的就匹配,正向解析把名字解析成ip地址后反向解析把ip地址解析成名字后,跟前面的名字不對應(yīng)的就匹配
?EXCEPT用法:
示例
vsftpd: 172.16. EXCEPT 172.16.100.0/24 EXCEPT 172.16.100.1
如果放到hosts.deny文件里,表示拒絕172.16這個網(wǎng)段的主機連接到
我的vsftpd服務(wù),除了172.16.100.0/24這個網(wǎng)段不拒絕,但
172.16.100.1這個ip地址又拒絕
示例:只允許192.168.1.0/24的網(wǎng)段主機訪問sshd服務(wù)
/etc/hosts.allow
sshd: 192.168.1.
/etc/hosts.deny
sshd:ALL
示例:只允許192.168.1.0/24的網(wǎng)段主機訪問telnet和vsftpd服務(wù)
/etc/hosts.allow
vsftpd,in.telnetd: 192.168.1.
/etc/host.deny
vsftpd,in.telnetd: ALL
示例:拒絕172.18.21這個網(wǎng)段的主機去訪問我主機的sshd服務(wù),但如果一個主機有兩個IP地址,一個是192.168.25.0/24網(wǎng)段,一個是172.18.0.0/16網(wǎng)段,那這個主機還是會連接到我的主機。
/etc/host.deny
sshd: 172.18.21.
3、[:options]選項:
?幫助:man 5 hosts_options
deny 主要用在/etc/hosts.allow定義“拒絕”規(guī)則
如:vsftpd: 172.16. :deny
allow 主要用在/etc/hosts.deny定義“允許”規(guī)則
如:vsftpd:172.16. :allow
spawn 啟動一個外部程序完成執(zhí)行的操作
sshd: ALL :spawn echo "$(date +%%F) login attempt\: from %c to %s,%d" >>/var/log/sshd.log
?在/etc/hosts.allow中添加,允許登錄,并記錄日志
?在/etc/hosts.deny中添加,拒絕登錄,并記錄日志
?%c 客戶端信息
?%s 服務(wù)器端信息
?%d 服務(wù)名
?%p 守護(hù)進(jìn)程的PID
需要注意的是這里date后要加兩個百分號,并且用冒號也要轉(zhuǎn)義
twist 實際動作是拒絕訪問,使用指定的操作替換當(dāng)前服務(wù),標(biāo)準(zhǔn)I/O和ERROR發(fā)送到客戶端,默認(rèn)至/dev/null
vsftpd: 172.16. :twist /bin/echo “"connection prohibited"
只要加選項twist無論放到哪個文件里都表示拒絕的意思,拒絕的同時會給客戶端發(fā)送消息