linux中文件的特殊權限(SetUID/SetGID/SBIT)


1.SetUID

一.SetUID的功能

SetUID主要是給命令提供一個root權限,就是命令運行時擁有root用戶權限,命令運行結束后root權限消失

1.只有執行的二進制程序才能設定SUID權限

2.命令執行者要對該程序有用x(執行)權限

3.命令執行者在執行該程序時獲得該程序文件屬主(所有者)的身份(在執行程序的過程中靈魂附體為文件的屬主)

4.SetUID權限只在該程序執行過程中有效,也就是說身份改變只在程序執行過程中有效.

passwd

passwd命令擁有SetUID權限,所以普通用戶可以修改自己的密碼
修改密碼是向/etc/shadow寫入數據的
但是/etc/shadow文件的權限是---------,只有root用戶可以操作,普通用戶連看都不可以
[root@izm5e2q95pbpe1hh0kkwoiz ~]# ll /etc/shadow
---------- 1 root root 1097 Dec 10 17:02 /etc/shadow
所以passwd命令擁有SetUID權限,讓普通用戶在修改自己密碼的時候,短暫擁有root權限,
修改完密碼之后,root權限也就沒有了
passwd命令中其他組擁有的權限是r-x,普通用戶划歸在其他組中,對應上面第2條,命令執行者要對該程序有用x(執行)權限


[root@izm5e2q95pbpe1hh0kkwoiz ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

上面所有者的權限是rws
s權限代表的就是SetUID功能

cat

cat命令沒有SetUID權限,所以普通用戶不能查看/etc/shadow文件內容

[eternity@izm5e2q95pbpe1hh0kkwoiz ~]$ ll /bin/cat
-rwxr-xr-x. 1 root root 54080 Nov  6  2016 /bin/cat
[eternity@izm5e2q95pbpe1hh0kkwoiz ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied

二.設定SetUID的方法

4代表SUID

  • chmod 4755 文件名
  • chmod u+s 文件名
4代表給所有者設定SUID權限

# 創建文件abc,權限為644
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# ll abc
-rw-r--r-- 1 root root 0 Dec 13 10:06 abc
# 賦予文件abc SUID權限
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# chmod u+s abc
# 此時顯示一個大寫的S,這是報錯的標識
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# ll abc
-rwSr--r-- 1 root root 0 Dec 13 10:06 abc

為什么會報錯呢?
2.命令執行者要對該程序有用x(執行)權限
第2條要求就是,命令執行者對程序擁有執行權限,此時除了root之外其他人對命令都沒有執行權限
所以就會報錯

怎么解決???
    權限需要設置為755,也就是rwxr-xr-x
    此時所有人都有x執行權限
    
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# ll abc
-rwSr--r-- 1 root root 0 Dec 13 10:06 abc
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# chmod u-s abc
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# ll abc
-rw-r--r-- 1 root root 0 Dec 13 10:06 abc
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# chmod 755 abc
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# chmod u+s abc
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# ll abc
-rwsr-xr-x 1 root root 0 Dec 13 10:06 abc

三.取消SetUID的方法

  • chmod 755 文件名
  • chmod u-s 文件名

四.危險的SetUID

1.關鍵目錄應嚴格控制寫權限.比如"/","/usr"等

2.用戶的密碼設置要嚴格遵守密碼三原則

3.對系統中默認應該具有SetUID權限的文件作一個列表,定時檢查有沒有這個之外的文件被設置了SetUID權限(通過shell腳本去查看)
假如對vim設定了SetUID權限,則普通用戶就可以使用vim編輯任何的文件,造成系統問題

2.SetGID

一.SetGID針對文件的作用

對文件常用,對目錄不常用.對文件主要也就是二進制程序,主要是提升程序執行者的所屬組,使程序執行者擁有較高的權限,跟SetUID類似.

1.只有可執行的二進制程序才能設置SGID權限

2.命令執行者要對該程序擁有x(執行)權限

3.命令執行在執行程序的時候,組身份升級為該程序文件的屬組

4.SetGID權限同樣只在該程序執行過程中有效,也就是說組身份改變只在程序執行過程中有效.

locate

[root@izm5e2q95pbpe1hh0kkwoiz tmp]# whereis locate
locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz
# locate擁有SetGID權限,用戶對locate有x執行權限,
# 運行locate命令的時候用戶當前組可以切locate的所屬組slocate
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# ll /usr/bin/locate
-rwx--s--x 1 root slocate 40520 Apr 11  2018 /usr/bin/locate

# locate查詢時,查詢的文件是mlocate.db文件
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# ll /var/lib/mlocate/mlocate.db
-rw-r----- 1 root slocate 7489360 Dec 13 03:07 /var/lib/mlocate/mlocate.db

# mlocate.db文件對其他人的權限時---,沒有任何權限

# 但是使用locate的時候,因為locate擁有SetGID權限,
# 用戶在使用locate命令時可以使組用戶的當前組轉換為locate的組slocate,
# 而mlocate.db的所屬組也是slocate,slocate組對mlocate.db文件擁有r讀權限,
# 所以此時用戶的所屬組為slocate,擁有了對mlocate.db的讀權限

二.SetGID針對目錄的作用

1.普通用戶必須對此目錄擁有r和x權限,才能進入此目錄

2.普通用戶在此目錄中的有效組會變成此目錄的屬組

3.若普通用戶對此目錄擁有w權限時,新建的文件的默認屬組是這個目錄的屬組.
# 在/tmp文件夾下創建test文件夾
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# mkdir test
# 創建的默認權限
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# ll -d test
drwxr-xr-x 2 root root 4096 Dec 13 10:55 test
# 給test目錄修改權限為777,並增加SetGID權限
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# chmod 2777 test
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# ll -d test
drwxrwsrwx 2 root root 4096 Dec 13 10:55 test
# 切換到eternity普通用戶
[root@izm5e2q95pbpe1hh0kkwoiz tmp]# su - eternity
Last login: Fri Dec 13 09:51:16 CST 2019 on pts/0
# 進入/tmp文件夾
[eternity@izm5e2q95pbpe1hh0kkwoiz test]$ cd /tmp
# 在/tmp文件夾下創建aaa文件
[eternity@izm5e2q95pbpe1hh0kkwoiz tmp]$ touch aaa
# aaa文件的所屬組為eternity
[eternity@izm5e2q95pbpe1hh0kkwoiz tmp]$ ll aaa
-rw-rw-r-- 1 eternity eternity 0 Dec 13 10:56 aaa
# 進入/tmp/test文件夾
[eternity@izm5e2q95pbpe1hh0kkwoiz tmp]$ cd /tmp/test
# 創建bbb文件
[eternity@izm5e2q95pbpe1hh0kkwoiz test]$ touch bbb
# 此時bbb文件的所屬組為root組
# test文件夾有SetGID權限,他的創建者所屬組為root
# 普通用戶在test文件夾下創建文件的時候,
# 文件的所屬組會默認的切換為創建test文件夾的用戶的所屬組,
# 此時是root用戶創建的test文件夾,root的組為root組,
# 所以新建的文件的組默認為root組
[eternity@izm5e2q95pbpe1hh0kkwoiz test]$ ll bbb
-rw-rw-r-- 1 eternity root 0 Dec 13 10:57 bbb

三.設定SetGID

  • chmod 2755 文件/文件名
  • chmod g+s 文件/文件名

四.取消SetGID

  • chmod 755 文件/文件名
  • chmod g-s 文件/文件名

3.Sticky BIT

一.SBIT粘着位作用

針對普通用戶,在有粘着位的文件夾下,每個用戶只能創建刪除自己的文件,不能刪除其他用戶的文件

1.粘着位目前只對目錄有效

2.普通用戶對該用戶有用w和x權限,即普通用戶可以在此目錄擁有寫入全新啊

3.如果沒有粘着位,因為普通用戶擁有w權限,則可以刪除此目錄下所有文件,包括其他用戶建立的文件.
一旦賦予了粘着位,
除了root可以刪除所有文件,普通用戶就算擁有w權限,
也只能刪除自己建立的文件,但是不能刪除其他用戶建立的文件.

二.設置和取消粘着位

設置粘着位

  • chmod 1755 目錄名
  • chmod o+t 目錄名

取消粘着位

  • chmod 777 目錄名
  • chmod o-t 目錄名

總結

SetUID只對文件生效
SetGID對文件和目錄生效
Sticky BIT只對目錄生效

擁有SetUID權限顯示

rwsr-xr-x

即所有者的執行權限x替換為了s

擁有SetGID權限

rwxr-sr-x

即所屬組的執行權限x替換為了s

擁有Sticky BIT權限

rwxrwxrwt

即其他人的執行權限x替換為了t


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM