◆ SUID ( Set User ID )
Linux里,用戶的ID被稱作UID。在實際生產中,可能需要臨時借用別的用戶執行程序,因此需要能夠臨時變更自己UID的機能叫做SUID。借助SUID權限,用戶可以臨時調用root權限。
※ 通常,文件的執行是由所屬者發起,然而,賦予SUID權限后可臨時繼承所有者的權限(來執行文件)。通常用于二進制可執行文件上,文件夾賦予該權限無意義。
舉個例子,假如我們要變更密碼、需要編輯/etc/shadow文件,然而這個文件一般用戶并沒有修改權限。但由于更改密碼的命令?passwd擁有SUID權限、一般用戶就可以通過該命令來(繼承root的權限進而)更改密碼。同時我們也可以看到在ll命令下,擁有SUID權限的文件,執行權限的位置會由x變為s。
$?ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 25980 Sat 07 2018 /usr/bin/passwd |
從上面的命令中可以看到,所有者的權限顯示為rws,其中,執行權變成了s。也就是說,有執行該命令權限的而用戶可以臨時繼承所有者(root)的權限。
需要通過chmod來賦予(二進制可執行)文件SUID時,可通過添加數字“4000”來賦予權限。比如,原來的權限為755(rwx r-x r-x),賦予SUID權限后變成4755,即(rws r-x r-x)。若想用字母表示,則可用u+s來代替4755.
◆ 例子 : 給magedu.txt賦予「 rws r-x r-x 」權限
$?chmod 4755 magedu.txt |
◆ 或 : 把magedu.txt的權限由755變為4755 (SUID)
$?chmod u+s magedu.txt |
◆ SGID ( Set Group ID )
除了繼承所有者權限的SUID、與之相對的還有繼承組權限的SGID。默認情況下,用戶創建文件(夾)時,其屬組為此用戶所屬的主組。一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此目錄中創建的文件所屬的組為此目錄的屬組。在生產生活當中,GUID權限通常用于創建協作目錄。擁有SUID權限時,所有者的執行權限表現為s,而擁有GUID權限的情況下則是組權限中表達執行權限的x變為s。
通過chmod設置權限時,可以加算數字2000、或者使用文字g+s來賦予權限。
注:很少用來設置單個文件。
◆ 例子 : 把文件夾magedu 賦予「 rwx r-s r-x 」權限
$?chmod 2755 magedu |
◆ 或 : 用字母來添加GUID 權限
$?chmod g+s magedu |
◆ 粘滯位(sticky bit)
被設置了粘滯位的文件夾,其中的文件及子目錄原來具有的權限將無效化。只有所有者及root才能對文件進行修改或刪除。當需要「使一個目錄既可以讓任何用戶寫入文件,又不讓用戶刪除這個目錄下他人的文件」的時候,sticky位即可派上用場。比如系統中的?/tmp?目錄就已經設定了粘滯位。
$?ll -d /tmp
drwxrwxrwt. 10 root root 4096 Sat 06 16:25 /tmp |
粘滯位在“其它用戶權限”中的執行權上顯示為t。用chmod賦予該權限時、可加算數字?1000?來設置。同時也可以用字母(o+t)來賦予權限。
◆ 例 : 給目錄magedudir 賦予「 rwx rwx rwt 」權限
$?chmod 1755 magedudir |
◆ 或 : 把目錄magedudir 的權限由「755」變為「1755」
$?chmod o+t magedudir |
◆ SUID、SGID、粘滯位的區別
權限類型 | 權限作用對象 | 數字標記 | 字母標記 |
SUID | 所有者 | 4000 | u+s |
SGID | 組 | 2000 | g+s |
Sticky Bit | 其它用戶 | 1000 | o+t |
◆ umask 命令(權限默認值)
文件或目錄創建后都有其默認權限,而默認權限的設置與查看,由umask負責。
可以直接執行umask命令來查看umask的值。新建文件的默認權限則由數字666減去umask值,而新建目錄的權限則由數字777減去umask的值。root用戶的默認umask值為「0022」。則新建文件的權限為 666-022=644、新建目錄的權限為 777-022=755。
※注:文件默認權限用666減去umask后可能會出現個位為奇數的情況,這樣就會默認具有執行權限。為避免這種現象,系統會自行將奇數+1。例如:666-125=541(r-x rw- –x),所有奇數+1后,實際權限為642(rw- r– -w-)
◆ 例子 : 確認當前umask值
$?umask 0022 |
※ umask值可以由用戶指定。
※? ? 如需長期使用,umask設置需要寫入配置文件。全局設置: /etc/bashrc 用戶設置:~/.bashrc
◆ 例子 : 把umask值從0022變為0027
$?umask 0027 |
※ 變更umask值后新建文件的權限即為(-rw r– —)。
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/95320