Linux 筆記分享十一:sudo 許可權

yuanshang發表於2019-01-08

注意:特殊許可權盡量少修改,容易出現安全隱患

一、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 協議》,轉載必須註明作者和本文連結
我們是一群被時空壓迫的孩子。 ---- 愛因斯坦

相關文章