◆ SUID ( Set User ID ) Linux里,用戶的ID被稱作UID。在實際生產中,可能需要臨時借用別的用戶執行程式,因此需要能夠臨時變更自己UID的機能叫做SUID。藉助SUID許可權,用戶可以臨時調用root許可權。 ※ 通常,文件的執行是由所屬者發起,然而,賦予SUID許可權後可臨時繼 ...
◆ 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、粘滯位的區別
◆ 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– —)。