Linux 許可權位詳解
1. Linux 許可權位
對於許可權,有點繞,因為檔案的許可權和目錄的許可權是有一些區別的。
在Linux中,有5種許可權,分別是,r、w、x、s、t。
- 可讀許可權:r
- 可寫許可權:w
- 可執行許可權:x
- Setuid:s(Set User ID)
- Setgid:s(Set Group ID)
- 粘滯位:t
下面依次講解許可權位:
1.1 可讀許可權
對於檔案,可讀許可權:
- 用字元表示:r
-
用八進位制表示:4
-
可以對讀取檔案裡的內容
對於目錄,可讀許可權:
- 用字元表示:r
- 用八進位制表示:4
- 可以列出目錄下的內容
1.2 可寫許可權
對於檔案,可寫許可權:
- 用字元表示:w
-
用八進位制表示:2
-
可以對檔案進行更改
對於目錄,可寫許可權:
- 用字元表示:w
- 用八進位制表示:2
- 可以在目錄下建立檔案或目錄
1.3 可執行許可權
對於檔案,可寫許可權:
- 用字元表示:x
-
用八進位制表示:1
-
可以執行該檔案(指令碼或命令)
對於目錄,可寫許可權:
- 用字元表示:x
- 用八進位制表示:1
- 可以cd進入該目錄
1.4 Setuid
這是一個特殊的許可權位,
對於檔案,Setuid:
- 用字元表示:s
- 用八進位制表示:4000
Setuid最常用的是配合執行許可權x使用,例如,系統中內建命令passwd,它預設是帶有s許可權位,passwd命令的主要功能是修改使用者的密碼,而修改密碼的流程是:
- 將加密後的雜湊值寫入到
/etc/passwd
檔案對應的使用者條目中。 - 使用pwconv工具轉換到
/etc/shadow
檔案中。 - 而普通使用者是沒有許可權修改
/etc/passwd
和/etc/shadow
檔案
在普通使用者嘗試執行passwd,該passwd的所有者是root並且設定了Suid,因此passwd以root身份執行。
當你檢視程序時,你會發現,程序不是普通使用者,而是passwd工具的所有者(root)
1.5 Setgid
這是一個特殊的許可權位,
對於目錄,Setgid:
- 用字元表示:s
- 用八進位制表示:2000
當一個目錄擁有sgid許可權時,其他使用者在該目錄下建立檔案或目錄後,它會繼承目錄的id,即建立的檔案或目錄的屬組為父目錄的屬組。
[root@self data]# mkdir project [root@self data]# chmod 2777 project/ [root@self data]# ls -lh total 0 drwxrwsrwx 2 root root 6 Apr 20 23:42 project [root@self data]# su bob [bob@self data]$ mkdir project/test_for_bob [bob@self data]$ ls -lh project/ total 0 drwxrwsr-x 2 bob root 6 Apr 20 23:42 test_for_bob
1.6 粘滯位
這是一個特殊的許可權位,
對於目錄粘滯位:
- 用字元表示:t
- 用八進位制表示:1000
/tmp
目錄就是使用了粘滯位t,其作用是,在該目錄下建立檔案或目錄後,僅允許其作者(所有者)進行刪除操作。其他使用者無法刪除。
2. Linux 許可權表
3. ls -l 輸出詳解
例如: lrwxrwxrwx. 1 root root 7 Oct 3 02:33 bin -> usr/bin
-
第一個字元的含義:
-
-
:常規檔案 -
b
:塊特殊檔案 -
c
:字元特殊檔案 -
C
:高效能(”連續資料“)檔案 -
d
:目錄 -
D
:門(Solaris 2.5及以上版本) -
l
:符號連結 -
M
:離線(”前已“)檔案(Cray DMF) -
n
:網路專用檔案(HP-UX) -
p
:FIFO(命名管道) -
P
:斷開(Solaros 10及以上) -
s
:套接字 -
?
:其他檔案
-
-
第二個字元的含義:
-
r
:屬主的讀許可權
-
-
第三個字元的含義:
-
w
:屬主的寫許可權
-
-
第四個字元的含義:
-
x
:屬主的執行許可權 -
S
:設定了SUID,沒有執行許可權 -
s
:設定了SUID,具有執行許可權
-
-
第五個字元的含義:
-
r
:屬組的讀許可權
-
-
第六個字元的含義:
-
w
:屬主的寫許可權
-
-
第七個字元的含義:
-
x
:屬組執行許可權 -
S
:設定了SGID,沒有執行許可權 -
s
:設定了SGID,具有執行許可權
-
-
第八個字元的含義:
-
r
:其他人的讀許可權
-
-
第九個字元的含義:
-
w
:其他人的寫許可權
-
-
第十個字元的含義:
-
x
:其他人的執行許可權 -
T
:設定了粘滯位,沒有執行許可權 -
t
:設定了粘滯位,具有執行許可權
-
-
第十一個字元的含義:
-
.
:沒有任何其他替代訪問方法的SELinux安全上下文(沒有設定ACL) -
+
:具有任何其他組合訪問方法的SELinux安全上下文(設定了ACL)
-
- 第十二個字元的含義:該檔案的硬連結數量
- 第十三個字元的含義:該檔案的屬主
- 第十四個字元的含義:該檔案的屬組
- 第十五個字元的含義:該檔案的大小
- 第十六到第十八個字元的含義:最後一次修改的時間
- 第十九個字元的含義:檔案或目錄的名稱
- 第二十個字元的含義:連結符號
-
第二十一個字元的含義:連結檔案的原始檔
4. umask 掩碼
umask是一個內建命令。其作用是指定建立的檔案或目錄的預設許可權。
使用方法: umask [-S|-p] [mode]
-
-S
:打印出字元許可權位 -
-p
:列印八進位制數許可權位(預設)
使用不加任何引數的umask會打印出八進位制的許可權:預設 0022
。
- 第一個數字表示:特殊許可權位的八進位制數
- 第二個數字表示:屬主的八進位制數的反掩碼
- 第三個數字表示:屬組的八進位制數的反掩碼
- 第四個數字表示:其他人的八進位制數的反掩碼
例如:手動更改,可使用八進位制,也可以使用字元表示
[root@localhost data]# umask 0022 [root@localhost data]# mkdir test_dir [root@localhost data]# touch test_txt [root@localhost data]# ls -lh total 0 drwxr-xr-x 2 root root 6 Apr 21 01:34 test_dir -rw-r--r-- 1 root root 0 Apr 21 01:34 test_txt [root@localhost data]# rm -rf * [root@localhost data]# umask 0777 [root@localhost data]# mkdir test_dir [root@localhost data]# touch test_txt [root@localhost data]# ls -lh total 0 d--------- 2 root root 6 Apr 21 01:37 test_dir ---------- 1 root root 0 Apr 21 01:37 test_txt
注意:儘管你的umask設定為0000,後續建立檔案的許可權依然是666。出於安全著想,執行許可權必須手動新增。所以你會看到,目錄許可權為777,而檔案許可權為666