Linux基礎:檔案許可權

來源:互聯網
上載者:User

標籤:使用者權限   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列的意思。

  • 第一列代表這個檔案的類型和許可權(permission)

    它由十個字元組成,第一個字母描述了對象的類型(- 在這個例子中表示普通檔案),剩下的 9 個字母每三個字母為一組,分別對應屬主(owner),屬組(group)和其他人(other)的許可權。第一組表示檔案所有者的讀、寫和執行許可權。- 表示相應的許可權沒有被授予。

第一個字元表示檔案的類型

  • [d]    目錄(directory)

  • [-]    檔案(file, f)

  • [l]    符號連結檔案(Symbolic links file)

  • [b]    塊裝置檔案(block)

  • [c]    字元裝置檔案(character)

  • [p]    具名管道(pipe)

  • [s]    通訊端(socket)

接下來的字元中,以三個為一組,且均為『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)。

    每個檔案都將它的許可權和屬性記錄到檔案系統的 inode 中,不過Linux使用的倒置分類樹結構的組織中,檔案名稱卻是存放在目錄檔案中的,因此每個檔案名稱就會串連到一個inode。這個屬性記錄的就是有多少不同的檔案名稱串連到相同的一個inode號。因此會存在有多個檔案名稱串連到一個 inode 的情況,這就是永久連結,而該列就是指的永久連結數。

  • 第三列表示這個檔案(或目錄)的所有者(屬主)。

  • 第四列表示這個檔案(或目錄)的所屬組。

  • 第五列表示這個檔案的大小,單位為位元組(byte)。

    其中連結檔案(上面的 b.txt 檔案)的大小正好是指向的目標檔案名的字元數。

  • 第六列表示檔案的最近修改時間(mtime)。其實檔案屬性中還包括建立時間和最近讀取時間,只是並未顯示出來。

  • 第七列為該檔案的檔案名稱。


目錄許可權的意義

    目錄和常規檔案一樣使用相同的許可權標識,但是它們的翻譯不同。目錄的讀許可權允許使用者使用該許可權列出目錄內容。寫入權限意味著使用者使用該許可權能夠在目錄中建立或者刪除檔案。執行許可權允許使用者輸入目錄並訪問任意子目錄。沒有執行許可權,目錄下的檔案系統對象就是不可訪問的。沒有讀許可權,目錄下的檔案系統對象在目錄清單下就是不可見的,但是如果知道磁碟上對象的完整路徑,這些對象仍是可訪問的。


對於普通檔案的許可權

  • 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的許可權(可以建立檔案),則使用者所建立的新檔案的使用者組與此目錄的使用者組相同。


對於檔案來說:  

  • SGID對二進位程式有用

  • 程式執行者對於該程式來說,需具備x的許可權

  • 執行者在執行的過程中將會獲得該程式使用者組的支援。


Sticky Bit 只針對目錄有效。其作用是:

  • 當使用者對於此目錄有w,x許可權時,建立的檔案或目錄僅有自己與root才有權力刪除。

換句話說:當甲使用者對於A目錄來說具有群組或其他人的身份,並且擁有該目錄的w許可權,這表示甲使用者對該目錄內任何人建立的目錄或檔案均可進行“刪除、更名、移動”等操作。不過,如果將A目錄加上了 Sticky Bit 許可權位時,則甲只能夠針對自己建立的檔案或目錄進行“刪除、更名、移動”等操作,而無法改動其他人的。最具代表性的就是 /tmp 目錄。



檔案預設許可權: umask

預設的情況下:

  • 若使用者建立“檔案“則預設沒有可執行(x)許可權,即只有r、w這兩個選項,也就是最大為666,預設許可權如下:-rw-rw-rw-

  • 若使用者建立“目錄“,則由於x與是否可以進入此目錄有關,因此預設為所有許可權均開放,即為777,預設許可權如下:drwxrwxrwx

怎麼查看預設的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基礎:檔案許可權

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.