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,即創建的文件或目錄的屬組為父目錄的屬組。
[[email protected] data]# mkdir project
[[email protected] data]# chmod 2777 project/
[[email protected] data]# ls -lh
total 0
drwxrwsrwx 2 root root 6 Apr 20 23:42 project
[[email protected] data]# su bob
[[email protected] data]$ mkdir project/test_for_bob
[[email protected] 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
。
- 第一個數字表示:特殊權限位的八進制數
- 第二個數字表示:屬主的八進制數的反掩碼
- 第三個數字表示:屬組的八進制數的反掩碼
- 第四個數字表示:其他人的八進制數的反掩碼
例如:手動更改,可使用八進制,也可以使用字符表示
[[email protected] data]# umask
0022
[[email protected] data]# mkdir test_dir
[[email protected] data]# touch test_txt
[[email protected] 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
[[email protected] data]# rm -rf *
[[email protected] data]# umask 0777
[[email protected] data]# mkdir test_dir
[[email protected] data]# touch test_txt
[[email protected] 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
Linux 權限位詳解