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

  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,即創建的文件或目錄的屬組為父目錄的屬組。

[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




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM