注意:特殊許可權盡量少修改,容易出現安全隱患
一、SetUID許可權
- 只有可以執行的二進位制程式才能設定SUID許可權
- 命令執行者要對該程式擁有x(執行)許可權
- 命令執行者在執行改程式時獲得該程式檔案屬主的身份(在執行程式的過程中靈魂附體為檔案的屬主)(變成root)
- SetUID許可權只在該程式執行過程中有效,也就是說身份改變只在程式執行過程中有效
1、設定SUID許可權
chmod 4755 檔名
chmod u+s 檔名
4就代表所屬使用者SUID
2、關於非執行許可權的檔案賦予SUID許可權
- 有執行許可權的
chmod 4755 abc
ll
返回:
-rwsr-xr-x. 1 root root 0 7月 1 18:05 ==abc==
- 無執行許可權的
chmod 4644 bcd
ll
返回:
-rwSr--r--. 1 root root 0 7月 1 18:05 ==bcd==
注意賦予特殊許可權是
S
的,無效;只有s
是有效的可以理解為
s = S + x
關於有許可權的,普通使用者能夠執行abc,則普通使用者就能獲取s許可權,因為
-rwsr-xr-x
3、passwd命令
- 下面是passwd命令的許可權
-rwsr-xr-x
- 下面是
/etc/shadow
密碼檔案的許可權
----------
root擁有無視許可權集的能力,即就算檔案所屬者沒有任何許可權,而所屬者恰好又是root,則root能夠強制操作檔案
- 有關上面的解釋
passwd
是擁有SUID許可權的命令,由許可權可以看出,普通使用者可以執行passwd命令,因此在執行過程中,普通使用者會變身為root,所以就能改沒有任何許可權的密碼檔案了
4、設定 SetUID 的方法
- 4 代表 SUID
chmod 4755 檔名
或者
chmod u+s 檔名
取消 SUID
chmod 0755 檔名
# 或者
chmod u-s 檔名
5、危險的 SetUID 命令
- 關鍵目錄應嚴格控制寫許可權。比如
/
、/user
等 - 使用者的密碼設定要嚴格遵守密碼三原則
- 對系統中預設應該具有 SetUID 許可權的檔案作一列表,定時檢查有沒有這之外的檔案被設定了 SetUID 許可權
舉個例子
chmod 4755 /bin/vi
/bin/vi /etc/shadow
這樣操作之後,所有使用者,都可以開啟 shadow 並進行修改,當然也能改 root 的密碼,這就相當於把伺服器送給別人了
記得改回來:chmod 0755 /bin/vi
所以不要手動給檔案賦予 SetUID 許可權
6、檢測系統中額外出現的 SetUID 許可權的指令碼
#!/bin/bash
# 搜尋系統中所有擁有 SUID 和 SGID 的檔案,並儲存到臨時目錄中
find / -perm -4000 -o -perm -2000 > /tmp/setuid.check
# 做迴圈,每次迴圈取出臨時檔案中的檔名
for i in $(cat /tmp/setuid.check)
do
# 對比這個檔名是否在模板檔案中
grep $i /root/suid.log > /dev/null
if ["$?" != "0"]
# 檢測上一個命令的返回值,如果不為 0,證明上一個命令報錯
then
# 如果檔名不在模板檔案中,則輸出錯誤資訊,並把報錯輸出到日誌中
echo "$i isn't in listfile!" >> /root/suid_log_$(date +%F)
fi
done
# 清理快取檔案
rm -rf /tmp/setuid.check
二、SetGID 檔案特殊許可權
SetUID 僅能對執行的檔案進行設定
SetGID 不僅能對執行的檔案進行設定,也能對目錄進行設定
1、SetGID 針對檔案的作用
- 只有可執行的二進位制程式才能設定 SGID 許可權
- 命令執行者要對該程式擁有 x (執行)許可權
- 命令執行在執行程式的時候,組身份升級為該程式檔案的陣列
- SetGID 許可權同樣只在該程式執行過程中有效,也就是說身份改變只在程式執行過程中有效
典型例子
ll /usr/bin/locate
返回
-rwx--s--x 1 root slocate 35612 8月 24 2010 /usr/bin/locate
locate
命令搜尋的資料庫
ll /var/lib/mlocate/mlocate.db
返回
-rw-r----- 1 root slocate 1838850 1月 20 04:29 /var/lib/mlocate/mlocate.db
我們看到 locate
所搜尋的資料庫,普通使用者沒有任何許可權,則透過給 locate
新增 SetGID 許可權,使得普通使用者能夠在執行時,加入 slocate
組,這時候就對資料庫檔案擁有的讀的許可權
2、SetGID 針對目錄的作用
- 普通使用者必須對此目錄擁有 r 和 x 許可權,才能進入此目錄
- 普通使用者在此目錄中的有效組會變成此目錄的屬組
- 若普通使用者對此目錄擁有 w 許可權時,新建的檔案的預設屬組是這個目錄的屬組
舉個例子
root 使用者執行以下命令
cd /tmp
mkdir test
ll # 檢視 test 許可權發現為 755
chmod 777 test
chmod 2777 test # 給 test 目錄賦予 SGID 許可權
普通使用者進入此目錄執行以下命令
cd /tmp/test
touch blos # 這個 blos 所屬組不是普通使用者所在組,而是 test 目錄所在組
3、SetGID 設定
chmod 2777 檔案或目錄
# 或者
chmod g+s 檔案或目錄
三、Sticky BIT 許可權
1、SBIT 粘著位許可權
- 粘著位目前只對目錄有效
- 普通使用者對該目錄擁有 w 和 x 許可權,即普通使用者可以在此目錄擁有寫入許可權
- 如果沒有粘著位,普通使用者擁有 w 許可權,所有可以刪除除此目錄下所有檔案,包括其他使用者建立的檔案。一但賦予了粘著位,除了 root 可以刪除所有檔案,普通使用者就算擁有 w 許可權,也只能刪除自己建立的檔案,但是不能刪除其他使用者建立的檔案
2、設定與取消粘著位
- 設定粘著位
chmod 1755 目錄名
# 或者
chmod o+t 目錄名
- 取消粘著位
chmod 0777 目錄名
# 或者
chmod o-t 目錄名
- 檢視 SBIT 許可權
drwxrwxrwt. 2 root root 4096 7月 1 22:57 test
- 典型例子
根目錄下的 tmp 目錄預設擁有 SBIT 許可權
四、不可改變位許可權(chattr 屬性)
SBIT 的擴充套件,限制目錄中其他使用者檔案,防止當前使用者進入檔案瞎改
1、chattr 命令格式
chattr [+-=] [選項] 檔案或目錄
+:增加許可權
-:刪除許可權
=:等於某許可權
- chattr 常用選項
i:insert 指插入,如果對檔案設定 i 屬性,那麼不允許對檔案進行刪除、改名,也不能新增和修改資料;如果對目錄設定 i 屬性,那麼只能修改目錄下檔案的資料,但不允許建立和刪除檔案,root 都不行
a:append 指追加,如果對檔案設定 a 屬性,那麼 只能在檔案中增加資料,但是不能刪除也不能修改資料;如果對目錄設定 a 屬性,那麼只允許在目錄中建立和修改檔案,但是不允許刪除,root 都不行
2、檢視 chattr 屬性
chattr +i abc
lsattr abc # 看目錄用 lsattr -d 目錄名
返回
----i--------e- abc
其中 i 代表 i 許可權,e 呢是指檔案系統(ext4)
- 注意
關於 a 屬性,說是對檔案只有追加能力,但是不能用 vi 工具進行操作,因為系統,無法判斷,你是修改了還是追加了。所有隻能用 echo bbbbb >> dt
本作品採用《CC 協議》,轉載必須註明作者和本文連結