首頁 >運維 >linux運維 >linux系統下檔案的特殊權限

linux系統下檔案的特殊權限

齐天大圣
齐天大圣原創
2020-09-13 16:05:341729瀏覽

是不是感覺linux檔案權限太複雜了,使用者、群組、檔案權限、預設權限、隱藏屬性、ACL,現在怎麼又來一個特殊權限。心疼頭髮三秒~。

我們來看一個檔案

ls /usr/bin/passwd  -l
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

發現沒有,怎麼出現了一個奇怪的東西s。這個s出現在了檔案擁有者的x上面,此時就被稱為Set UID,簡稱為SUID。如果出現在所屬群組的x上面,則表示SGID。如果是在其他人的x上面,則表示Sticky。

下面透過一個表格來解釋下各特殊權限的用處:

#目錄無意義此目錄下所有使用者新檔案都會自動繼承此目錄的使用者群組  目錄中每個使用者只能刪除、移動或改名自己的檔案或目錄

檔案
SUID  此使用者將繼承此程式的擁有者權限 
SGID 此使用者將繼承此程式的所屬群組權限
Sticky 無意義


下面,我們透過/usr/bin/passwd這個檔案來講解下SUID的用途。

我們知道,linux下每個使用者都可以修改自己的密碼,而root則可以修改所有使用者的密碼。那你有沒有想過,為什麼一般用戶也可以修改自己的密碼?密碼不是保存在/etc/shadow檔案中的麼?這個檔案對於普通使用者沒有寫入權限阿。

# ls -l /etc/shadow
---------- 1 root root 969 Sep 10 09:37 /etc/shadow

這就是SUID的用途了,一般使用者透過passwd指令來修改自己的密碼。執行期間,使用者會暫時擁有該檔案擁有者即root的權限,所以一般使用者可以修改自己的密碼。如果該檔案特殊權限為SGID,那麼執行期間就會擁有該檔案所屬群組的權限。

SGID除了可以作用於檔案外,還可以作用於目錄,注意,對於檔案和目錄,它的作用完全不同。我們透過一個場景來講解SGID對於目錄的作用。

下面,我們模擬一個場景:公司現在需要開發一個項目,原型圖已經給出,需要交給設計部門design進行設計。現在建立一個目錄project1_ps。 design部門所有人員對這個目錄下的檔案都有rwx權限。

我們知道,在linux中,當新建一個檔案或目錄時,擁有者是自己,所屬群組為自己所屬的群組。這樣一來,當設計師a新建了一個檔案時,其他使用者對這個檔案是其他人的權限,不符合我們的要求。所以,我們需要SGID來完成需求。

# groupadd design  #创建design用户组
# useradd -G design --no-create-home dgn1 # 创建用户
# useradd -G design --no-create-home dgn2 # 创建用户
# id dgn1
uid=1003(dgn1) gid=1004(dgn1) 组=1004(dgn1),1003(design)
# id dgn2
uid=1004(dgn2) gid=1005(dgn2) 组=1005(dgn2),1003(design)
 
# mkdir design # 工作目录
# chgrp design design/
# chmod 2770 design/  <== 如果是SUID则是4770
# ll -d design/
drwxrws--- 2 root design 4096 5月   5 19:06 design/
 
# su dgn1
$ umask
0022
$ umask 0002
$ touch design/1.ps
$ ls design -l
总用量 0
-rw-rw-r-- 1 dgn1 design 0 5月   5 19:31 1.ps  <=== 新创建的文件默认组为design了
###最後,我們來看看Sticky。這個非常好理解,目錄中每個使用者只能刪除、移動或改名自己的檔案或目錄。其實/tmp目錄就是要使用該特殊權限。 ###
# ll /tmp -d
drwxrwxrwt. 9 root root 868352 Sep 13 08:24 /tmp

以上是linux系統下檔案的特殊權限的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn