歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux 文件權限 強制位和冒險位詳解

Linux 文件權限 強制位和冒險位詳解

日期:2017/2/28 14:22:42   编辑:Linux教程

Linux中,文件權限除了讀、寫、執行之外,還有強制位與冒險位的特別權限

在Linux中文件的權限如下(在Linux中目錄也是一個文件):

強制/冒險 | 用戶 | 組 | 其它
===========================================
sst rwx rwx rwx

這裡就講解一下強制位和冒險位
強制位有:setuid和setgid,主要用於文件及目錄
冒險位有:sticky,只用於目錄,多數是共享目錄

setuid(在u的x位置上使用一個s)只能對文件進行設置
對文件作用:
默認情況下,用戶執行一個指令,會以該用戶的身份來運行進程。當一個文件設置了SUID後,所有用戶執行這個文件時都是以這個用戶的所有者的權限來執行。即可以讓對此文件沒有執行權限的用戶執行此文件。

setgid(在g的x位置上使用一個s)只能對目錄設置
對目錄作用:
默認情況下,用戶建立的文件夾屬於用戶當前所在的組,但是設置了SGID後,表示在此目錄中,任何人建立的文件,都會屬於目錄所屬的組,但是用戶還是屬於創建的用戶。


sticky(o的x位置上使用一個t)只能對目錄設置
對目錄作用:
默認情況下,如果一個目錄o上有w和x權限,則任何人可以在此目錄中建立與刪除文件。一旦目錄上設置了冒險位,則表示在此目錄中,只有文件的擁有者、目錄的擁有者與系統管理員可以刪除文件。其他用戶則不能。

注意:直接在文件上面設置冒險位是沒有作用的,冒險位要創建在目錄上面

強制位和冒險位的表現方式:
強制位與冒險位添加在執行權限的位置上,強制位使用S和s來表示,冒險位使用T和t來表示。如果該位置上原已有執行權限,則強制位與冒險位以小寫字母的方式表示。否則,以大寫字母表示。即:
S:表示該位沒有x位 s: 表示該位有x位

T:表示該位沒有x位 t: 表示該位有x位

Ps:如果在強制位中S為大寫,則表示相應的執行權限位並未被設置,這是一種沒有用處的suid設置可以忽略它的存在。

設置強制位和冒險位
1:通過+,-設置強制位和冒險位
set uid: # chmod u+s filename
# chmod u-s filename 對文件取消強制位
set gid: # chmod g+s filename
sticky: # chmod o+t dir


2:通過數字設置強制位和冒險位,放在讀寫執行的三位數字前來指定
4(set uid) 2(set gid) 1(sticky)

# chmod 4--- 文件 設置setuid
# chmod 2--- 目錄 設置setgid
# chmod 1--- 目錄 設置sticky
# chmod 6--- 目錄/文件 設置GUID,UID

注意:chmod命令不進行必要的完整性檢查,可以給某一個沒用的文件賦予任何權限,但並不會對所設置的權限組合做什麼檢查。因此一個文件具有執行權限不一定程序或腳本。

SUID例子:
默認情況下所有用戶都可以使用ping此命令,但查看ping命令所在的文件時會發現,這個文件所屬的用戶和組均屬於root,按理說只有root用戶可以執行該命令,但事實上會發現所有的用戶都可以使用該命令。因為ping命令所在文件的權限x的位置有一個s
# ping -c 4 www.linuxidc.com
如果去掉suid就會發現其他用戶就使用不了改命令了
# chmod u-s /bin/ping
# su - linuxidc
$ ping -c 4 www.linuxidc.com
ping: icmp open socket: Operation not permitted

上面的例子中,指令文件上的強制位,可以讓用戶執行的指令,以指令文件的擁有者或所屬組的身份運行進程。也說明了如果某個命令沒有s權限則普通用戶不可以使用

SGID例子:
一個小組共同開發一個項目,所有的項目文件都存放在一個目錄下面,對這個目錄設置SGID,可以讓所有的用戶新建的文件都屬於同一個群組。然後對目錄設置好權限,這樣大家都可以看到其他用戶建立的文件。

STICKY例子:
如一個小組共同開發一個項目,在一個目錄上設了sticky位後,所有的小組成員都可以在這個目錄下創建文件,但只能刪除自己創建的文件(root除外),這就對目錄下的用戶文件啟到了保護的作用。

其他:
查找suid文件
# ls -l | grep '^...s'

查找suid 和guid document
# ls -l |grep '^...s..s'

Copyright © Linux教程網 All Rights Reserved