1. 程式人生 > >Linux 權限位詳解

Linux 權限位詳解

linux安全 bin 更改 lin 圖片 限時 info img mage



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命令的主要功能是修改用戶的密碼,而修改密碼的流程是:

  1. 將加密後的哈希值寫入到/etc/passwd
    文件對應的用戶條目中。
  2. 使用pwconv工具轉換到/etc/shadow文件中。
  3. 而普通用戶是沒有權限修改/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 權限位詳解