標籤:使用者權限 uid others 安全性 所有權
使用者與使用者組
Linux是一個多使用者、多任務的作業系統,為了讓各個使用者具有較保密的檔案資料,因此未見的許可權管理就比較重要了。Linux的檔案所有權和訪問授權是與使用者id和組密切相關的。Linux 一般將檔案可存取訪問的身份分為3個類別,分別是owner, group, others,且3中身份各有 read, write, execute等許可權。
當使用者登入系統時,就會進行身分識別驗證。成功登入系統後的使用者,都攜帶使用者身份(User ID, UID)以及組身份(Group ID, GID),當需要訪問檔案或者執行程式時,需要檢查使用者是否擁有訪問的許可權。
一般來說,Linux的使用者資訊儲存在/etc/passwd中,組資訊儲存在/etc/group中,檔案的每一行代表一個使用者/組。早期的Linux將密碼以明文的形式儲存在/etc/passwd中,而現在則多以暗碼(也就是加密之後的形式)的形式儲存在/etc/shadow中。將密碼儲存在/etc/shadow中提高了密碼的安全性,因為/etc/passwd允許所有人查看,而/etc/shadow只允許root使用者查看。
使用 id 命令,您可以找出使用者和組資訊。類似的,您可以使用 groups 命令找出您在什麼組中。
[[email protected] ~]# iduid=0(root) gid=0(root) groups=0(root)[[email protected] ~]# groupsroot[[email protected] ~]#
Linux檔案屬性
要瞭解Linux許可權控制,就必須學習Linux的檔案許可權和屬性。Linux 許可權模型每個檔案系統對象有 3 種類型。這些許可權就是讀(r),寫(w)和執行(x)。寫入權限包括修改和刪除對象的能力。此外,這些許可權被分別指定給檔案所有者、檔案群組成員和其他人。
可以使用 # ls -l 命令查看
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5B/34/wKioL1UCU4jjrarBAADdH4DvcUc923.jpg" title="1.png" alt="wKioL1UCU4jjrarBAADdH4DvcUc923.jpg" />
我們來解釋一下上面7列的意思。
它由十個字元組成,第一個字母描述了對象的類型(- 在這個例子中表示普通檔案),剩下的 9 個字母每三個字母為一組,分別對應屬主(owner),屬組(group)和其他人(other)的許可權。第一組表示檔案所有者的讀、寫和執行許可權。- 表示相應的許可權沒有被授予。
第一個字元表示檔案的類型:
接下來的字元中,以三個為一組,且均為『rwx』 的三個參數的組合。
其中,[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執行(execute)。 要注意的是,這三個許可權的位置不會改變,如果沒有許可權,就會出現減號[ - ]而已。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5B/3A/wKiom1UCVADy2mxZAACAXOgpNVY288.jpg" title="1.png" alt="wKiom1UCVADy2mxZAACAXOgpNVY288.jpg" />
每個檔案都將它的許可權和屬性記錄到檔案系統的 inode 中,不過Linux使用的倒置分類樹結構的組織中,檔案名稱卻是存放在目錄檔案中的,因此每個檔案名稱就會串連到一個inode。這個屬性記錄的就是有多少不同的檔案名稱串連到相同的一個inode號。因此會存在有多個檔案名稱串連到一個 inode 的情況,這就是永久連結,而該列就是指的永久連結數。
其中連結檔案(上面的 b.txt 檔案)的大小正好是指向的目標檔案名的字元數。
目錄許可權的意義
目錄和常規檔案一樣使用相同的許可權標識,但是它們的翻譯不同。目錄的讀許可權允許使用者使用該許可權列出目錄內容。寫入權限意味著使用者使用該許可權能夠在目錄中建立或者刪除檔案。執行許可權允許使用者輸入目錄並訪問任意子目錄。沒有執行許可權,目錄下的檔案系統對象就是不可訪問的。沒有讀許可權,目錄下的檔案系統對象在目錄清單下就是不可見的,但是如果知道磁碟上對象的完整路徑,這些對象仍是可訪問的。
對於普通檔案的許可權:
r(read):允許讀許可權,比如可以使用cat <file name>之類的命令來讀取某個檔案的內容
w(write):允許寫入權限,表示你可以編輯和修改某個檔案的內容
x(execute):允許執行許可權,通常指可以啟動並執行二進位程式檔案或者指令檔。Linux上不是通過檔案尾碼名來區分檔案的類型。 不過擁有可以執行的能力, 與能否執行成功,是兩碼子事兒。
對於目錄檔案的許可權:
但是對於目錄的許可權位則很容易混淆,這裡要注意區分:
r (read contents in directory):讀取目錄裡面的內容。
所以當你具有讀取(r)一個目錄的許可權時,表示你可以查詢該目錄下的檔案。
w (modify contents of directory):編輯目錄裡面的內容。擁有更改該目錄結構列表的許可權:
主要包括
1、建立新的檔案與目錄
2、刪除目錄下面的檔案與目錄(無論該檔案的許可權是什麼,這一點很重要)
3、對目錄裡面的檔案與目錄重新命名
4、移動目錄裡面的檔案與目錄的位置
x (access directory):代表的是使用者能否進入該目錄成為工作目錄。(相當重要的概念)
注意:目錄要同時具有讀許可權和執行許可權才可以開啟,而一個目錄要有寫入權限才允許在其中建立其它檔案,這是因為目錄檔案實際儲存著該目錄裡面的檔案的列表等資訊
要編輯檔案內容,那麼必須對該檔案擁有 rw 許可權。
要編輯目錄內容,那麼必須對該目錄擁有 wx 許可權。
如何修改檔案屬性與許可權
我們已經知道檔案許可權對於一個系統的重要性了,但如何對檔案的屬性和許可權進行修改呢?這裡主要用到三個命令:chgrp, chown, chmod,分別對應修改使用者組、擁有者和檔案許可權。
改變所屬組: chgrp
改變所有者: chown
改變檔案許可權: chmod
## chgrp/chown/chmod [-R] dirname/filename-R : 進行遞迴 recursive## 改變屬組# chgrp users a.txt## 改變屬主# chown users a.txt# chown root:root a.txt# chown :users a.txt# chown -R root:root ./tmp # 遞迴,其子目錄下的所有檔案都會更改
符號方式改變檔案許可權:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5B/36/wKioL1UCfbSh4IUTAABR78KAJTA759.jpg" title="1.png" alt="wKioL1UCfbSh4IUTAABR78KAJTA759.jpg" />
[[email protected] ~]# chmod --helpUsage: chmod [OPTION]... MODE[,MODE]... FILE... or: chmod [OPTION]... OCTAL-MODE FILE... or: chmod [OPTION]... --reference=RFILE FILE...Change the mode of each FILE to MODE.
Mode可以分成如下3塊: [who] operator [permission]
[ugoa]*([-+=]([rwxXst]*|[ugo]))+
who的含義是:
u 檔案屬主許可權
g 同組使用者權限
o 其它使用者權限
a 所有使用者(all 設定所有使用者的許可權,這就相當於忽略它)
operator的含義:
+ 增加許可權
- 取消許可權
= 設定許可權
permission的含義:
r 讀許可權
w 寫入權限
x 執行許可權
X 表示只有當該檔案是個子目錄或者該檔案已經被設定過為可執行。
s 檔案屬主和組id
l 給檔案加鎖,使其它使用者無法訪問
樣本:
# chmod u=rwx,go=rx a.txt # 注意: u=rwx,go=rx 之間沒有任何空格# chmod u=rwx,g=rx,o=rx a.txt# chmod o=- a.txt# chmod a+x a.sh# chmod +x a.sh
八進位方式改變檔案許可權:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/5B/3C/wKiom1UCevmgQaXjAAA3tvibDOc845.jpg" title="1.png" alt="wKiom1UCevmgQaXjAAA3tvibDOc845.jpg" />
r=4,w=2,x=1, 每種身份(owner, group, others)各自的三個許可權(r, w, x)分數是需要累加的。這三個數字中的每一個都通過添加所需的使用權限設定來構建:讀(4),寫(2)和執行(1)。
owner = rwx = 4 + 2 + 1 = 7
group = r-x = 4 + 0 + 1 = 5
other = r-x = 4 + 0 + 1 = 5
suid 和 sgid
Linux 許可權模型有兩個特殊的訪問模式,名為 suid(設定使用者 id)和 sgid(設定組 id)。當可執行檔程式設定為 suid 訪問模式,它就會開始運行,好像是由檔案所有者啟動而不是由真正啟動它的使用者啟動。類似的,設定為 sgid 訪問模式,程式就會運行,好像啟動使用者屬於檔案組,而不屬於他所有的組。可以單獨或者同時設定兩個訪問模式。
suid 和 sgid 位與長目錄清單中使用者和組的 x 佔據相同的空間。如果檔案是可執行檔,suid 或 sgid 位如果已設定,將會顯示為小寫 s,否則就顯示為大寫的 S。
雖然 suid 和 sgid 很便利,甚至在很多環境下是必需的,但是這些訪問模式不適當的使用會造成系統安全上的漏洞。您要盡量少地使用 suid 程式。passwd 命令是少數 必須 為 suid 的命令之一。
設定 suid 和 sgid
suid 和 sgid 位使用字母 s 在符號上進行設定和重設;例如,u+s 設定 suid 訪問模式,g-s 刪除 sgid 模式。在八進位格式中,suid 在第一位(高階)為值 4,而 sgid 是值 2。
# chmod u+s aaa# chmod 4755 aaa
SUID的目的:
SUID許可權僅對二進位程式(binaryprogram)有效,不能夠用在shell script上面。
執行者對於該程式需要具有x的可執行許可權
本許可權僅在執行該程式的過程中(run-time)有效
執行者將暫時具有該程式所有者(owner)的許可權
對目錄無效
SUID的目的就是:讓本來沒有相應許可權的使用者運行這個程式時,可以訪問他沒有許可權訪問的資源。在Linux/Unix下,可執行檔可以被setUid,這使得任意使用者在執行該檔案時,都綁定了檔案擁有者的許可權。就好像檔案帶了一把尚方寶劍一樣,預設情況下,使用者執行一個指令,會以該使用者的身份來運行進程。指令檔案上的強制位,可以讓使用者執行的指令,以指令檔案的擁有者或所屬組的身份運行進程。註:這個SUID只能運行在二進位的程式上(系統中的一些命令),不能用在指令碼上(script),因為指令碼還是把很多的程式集合到一起來執行,而不是指令碼自身在執行。同樣,這個SUID也不能放到目錄上,放上也是無效的。setUid檔案通常用來提升使用者的許可權.最有代表性的su命令.普通使用者可以可以執行該命令,使自己升級為root。
SET GID 強制位的作用:
預設情況下,使用者建立的檔案屬於使用者所在的組。但是目錄設定了setgid,表示在此目錄中,任何人建立的檔案,都會屬於目前的目錄所屬的組。如果使用者在此目錄下具有w許可權的話,若使用者在此目錄下建立新檔案,則新檔案的群組與此目錄的群組相同。
對於目錄來說:
使用者若對於此目錄具有r與x的許可權時,該使用者能夠進入此目錄
使用者在此目錄下的有效使用者組(effective group)將會變成該目錄的使用者組
若使用者在此目錄下具有w的許可權(可以建立檔案),則使用者所建立的新檔案的使用者組與此目錄的使用者組相同。
對於檔案來說:
Sticky Bit 只針對目錄有效。其作用是:
換句話說:當甲使用者對於A目錄來說具有群組或其他人的身份,並且擁有該目錄的w許可權,這表示甲使用者對該目錄內任何人建立的目錄或檔案均可進行“刪除、更名、移動”等操作。不過,如果將A目錄加上了 Sticky Bit 許可權位時,則甲只能夠針對自己建立的檔案或目錄進行“刪除、更名、移動”等操作,而無法改動其他人的。最具代表性的就是 /tmp 目錄。
檔案預設許可權: umask
預設的情況下:
怎麼查看預設的umask:
[[email protected] ~]# umask0022[[email protected] ~]# umask -Su=rwx,g=rx,o=rx
umask的分數指的是“該預設值需要減掉的許可權“; 假設umask為022
建立檔案時:(-rw-rw-rw-) - (-----w--w-) = (-rw-r--r--)
建立目錄時:(drwxrwxrwx) - (-----w--w-) = (drw-r-xr-x)
umask的設定檔為:/etc/profile 或 ~/.profile 或 ~/.bash_profile,可通過修改這些檔案裡的umask值,改變其預設的 umask。
本文出自 “Share your knowledge” 部落格,請務必保留此出處http://skypegnu1.blog.51cto.com/8991766/1620167
Linux基礎:檔案許可權