0x00 概述
Linux文件權限是用來管理所有用戶使用文件的程度。而設置權限的目的是為了方便管理者保護文件以及確保用戶只能使用自己有權限的文件。
0x01 Ownership of Linux files
使用者(User or Owner)
文件的持有人。在預設下,文件的作者會是文件的擁有人也等同於使用者。
用戶所在群组(Group)
群組裡面可存在多個用戶。處於同一個群組裡面的所有用戶會具有相同的文件訪問權限。你可以把用戶加進同一個群組,然後再把文件權限交給此群組,這樣群裡的每個用戶都能有相同的訪問權限。
其他人(Other)
不屬於User和Group的使用者就是所謂的其他人。
0x02 文件屬性
ls -al
能用來查看文件的權限。
1 | [root@study ~]# ls -al |
當指令執行後,可以看到文件的屬性有7個欄位。下圖為7個欄位代表的意思。
第一欄位:文件種類以及權限
第一個字元的意義
d
為目錄(Directory)。-
為一般文件。l
為鏈接文件(Link file)。b
為區塊(block)文件, 儲存數據, 以提供系統隨機存取的介面設備。c
為字元(character)設備文件, 一些串列埠的介面設備, 例如鍵盤、滑鼠(一次性讀取裝置)。s
為數據介面文件(sockets), 通常被用在網路上的數據傳輸。f
為數據輸送文件(FIFO, pipe), 解決多個程序同時存取一個文件所造成的錯誤問題。
接下來的字元意義【權限】
接下來的字元中,以三個為一組,且均為『rwx』的三個參數的組合。
r
代表可讀(read)。w
代表可寫(write)。x
代表可執行(execute)。
附錄:三個權限的位置不會改變,如果沒有權限,就會出現減號[ - ]作為代表。
三組代表的含義
- 第一組為『文件擁有者可具備的權限』。
- 第二組為『加入此群組帳號的權限』。
- 第三組為『非本人且沒有加入本群組之其他帳號的權限』。
第二欄位:節點(i-node)
不重要先跳過。
關於I-note的筆記
自我提醒需看Linux磁碟與檔案系統管理
0x03 改變文件的屬性和權限
常用指令有三個:
chmod
:改變文件權限chown
:改變文件擁有者chgrp
:改變文件所屬的群組
chmod
Change access permissions, change mode.
格式如下:chmod [-cfvR] [--help] [--version] mode file
參數列表:
- -c : 若權限確實已經更改,才顯示其更改動作。
- -f : 若權限無法被更改也不要顯示錯誤的信息。
- -v : 顯示權限變更的詳細資料。
- -R : 對目前目錄下的所有檔案和子目錄進行相同的權限變更。
設置文字權限方式:
- 數字方式
- 字符方式
數字方式
在設置權限時,你可以使用數字來代表不同的權限。權限的數字對照表如下:
- r:4 Read
- w:2 Write
- x:1 Execute
例子
chmod 400 file
文件file只能讓Owner讀取。chmod 777 file
文件file能讓Owner,Group,以及Others讀取,寫入以及執行。 【7=4+2+1】
字符方式
這種方式比較容易一眼看的明白所設置的權限。
Operator的用途:
Operator | Description |
---|---|
+ | Adds a permission to a file or directory |
- | Removes the permission |
= | Sets the permission and overrides the permissions set earlier. |
例子
chmod a-x file
全部用戶不能執行file。chmod a+r file
全部用戶只能讀取file。chmod go+rw file
Others和Group可以讀取和寫入文件file。chmod u+x myscript.sh
只有Owner可以執行mycript.sh。chmod =rwx,g+s file
全部用戶都可以讀取,寫入和執行以及使用Group的ID。
chown
Change owner, change the user and/or group ownership of each given File to a new Owner.Chown can also change the ownership of a file to match the user/group of an existing reference file.
格式如下:
chown [Options] NewOwner File
chown [Options] Group File
chown [Options] reference=RFILE File
例子:
1 | [root@study ~]# chown [-R] 帳號名稱 檔案或目錄 |
chgrp
Change group ownership.’chgrp’ changes the group ownership of each given File to Group (which can be either a group name or a numeric group id) or to match the same group as an existing reference file.
格式如下chgrp [Options] {Group | --reference=File} File
例子:
1 | 把initial-etup-ks.cfg 的群組改成users。 |
0x04 文件的特殊權限
除了之前的rwx
權限,對於文件以及目錄還能用特殊權限來彌補之前三個權限的缺陷。特殊權限一共有3種:SUID(Set user ID),SGID (Set group ID)以及Sticky Bit。
SUID
SUID(Set owner User ID up on execution)通常用在程序執行時,給予用戶提供臨時的權限,以便用戶能使用該文件擁有者的權限去運行程序或文件。
SUID的基本限制與功能:
- SUID 權限僅對二進位程式(binary program)有效。
- 執行者對於該程式需要具備可執行
x
的權限。 - 只在執行過程中有效(run-time)。
- 執行者將具有該程式擁有者(owner)的權限。
- 4為其代表數字,
特殊權限的表示:
1 | $ ls -l /usr/bin/chsh /etc/passwd ←列出〝/usr/bin/chsh〞和〝/etc/passwd〞文件資訊。 |
更換SUID:
- 數字方法
chmod 4755 filename
- 字符方法
chmod g+s filename
SGID
SGID(Set Group ID up on execution)通常用在程序執行或者目錄時,給予用戶臨時權限,能讓該用戶為該群組的成員之一。此外,用戶也能使用擁有文件群組的權限來執行該程序。
SGID的基本限制與功能:
- SGID 對二進位程式有用。
- 程式執行者對於該程式來說,需具備可執行
x
的權限。 - 執行者在執行的過程中將會獲得該程式群組的支援!
- 2為其代表數字。
用在目錄上的功能:
- 使用者若對於該目錄具有
r
與x
的權限時,該使用者能夠進入此目錄。 - 使用者對該目錄下的有效群組(effective group)將會變成該目錄的群組。
- 用途:假如使用者在該目錄下具有
w
的權限(可以新建文件),則使用者所建立的新文件的群組也會與此目錄的群組相同。
特殊權限的表示:
1 | $ ls -l /usr/bin/wall |
更換SUID:
- 數字方法
chmod 2750 filename
- 字符方法
chmod g+s filename
應用在目錄的詳細例子:
在我的Linux系統裡面,擁有ning和yan這兩個帳號。這兩個帳戶都同時支持自己以及project
群組。現在我需要令到這兩個用戶需要共同擁有 /foryou/lovestory/ 目錄的開發權,且此目錄不能讓其他人進行查閱。
第一步:我會先設好這兩個帳戶的資料。
1 | [root@Milo ~]# groupadd project <==增加新的群組 |
第二步:建立目錄1
2
3[root@Milo ~]# mkdir /foryou/lovestory
[root@Milo ~]# ll -d /foryou/lovestory
drwxr-xr-x. 2 root root 12 March 18 00:22 /foryou/lovestory
第三步:開始設置SUID權限1
2
3
4[root@Milo ~]# chgrp project /foryou/lovestory
[root@Milo ~]# chmod 2770 /foryou/lovestory <== 在第一個位置那裡輸入其SGID代表數字2。
[root@Milo ~]# ll -d /foryou/lovestory
drwxrws---. 2 root project 12 March 18 00:25 /foryou/lovestory <==可以看到設置後2個帳戶都可以在此目錄建立新文件了。
Sticky Bit
特殊權限的混合應用
Unmask
目標: Linux File 權限
小目標:特殊權限
Sticky Bit
1.用在Owner對目錄有W,x權限時。
2.在該目錄建立文件或者目錄時,只有自己和Root才有權利
刪除該文件。
例子
Noel - 對於目錄A有群組和其他人的身份,且擁有對該目錄A的寫入權限。
他能對目錄內任何人建立的目錄以及文件均可進行刪除/換名或者搬遷等動作,但只要加了SBIT,Noel就只能對自己建立的檔案或目錄進行刪除/換名或者搬遷移動等動作,而無法刪除他人的檔案。