一文帶你徹底搞懂Linux 文件權(quán)限管理

Linux下文件/目錄的權(quán)限和歸屬

訪問權(quán)限

  • 讀?。╮): 允許查看文件內(nèi)容,顯示目錄列表
  • 寫入(w): 允許修改文件內(nèi)容,允許在目錄中新建、刪除、移動文件或者子目錄
  • 可執(zhí)行(x): 允許運行程序,切換目錄
  • 無權(quán)限(-): 沒有權(quán)限

權(quán)限介紹

- rw-r--r-- . 1 root root 1258 Jun 3 2019 initial-setup-ks.cfg

d rwxr-xr-x . 2 root root 6 Jun 3 2019 Music

- 代表普通文件
d 代表目錄
c 代表字符型文件
l 代表鏈接文件
rwx r-x r-x root root
屬主權(quán)限 屬組權(quán)限 其他人權(quán)限 屬主 屬組
權(quán)限項 執(zhí)行 執(zhí)行 執(zhí)行
字符表示 r w x r w x r w x
數(shù)字表示 4 2 1 4 2 1 4 2 1
權(quán)限分配 文件所有者(屬主) 文件所有者(屬主) 文件所有者(屬主) 文件所屬組(屬組) 文件所屬組(屬組) 文件所屬組(屬組) 其他用戶 其他用戶 其他用戶
r w - r - - r - -
4 2 0 4 0 0 4 0 0
  • 這個文件權(quán)限就是 6 4 4

權(quán)限修改


  • 格式一:

    • chmod [ugoa][+-=][rwx] 文件/目錄

      • u,g,o,a 分別代表 屬主,數(shù)組,其他用戶,所有用戶
      • +,-,= 分別代表 增加,減去,設(shè)置一個權(quán)限
    • ex:

        [root@localhost ~]# touch /root/a.txt
        [root@localhost ~]# ls a.txt -l
        -rw-r--r--. 1 root root 0 May 21 05:56 a.txt
        [root@localhost ~]# chmod g+w,o+w /root/a.txt 
        [root@localhost ~]# ls a.txt -l
        -rw-rw-rw-. 1 root root 0 May 21 05:56 a.txt
      
  • 格式二

    • chmod nnn(三位八進制數(shù)) 文件/目錄

    • ex:

        [root@localhost ~]# chmod 644 /root/a.txt 
        [root@localhost ~]# ls a.txt -l
        -rw-r--r--. 1 root root 0 May 21 05:56 a.txt
      
  • 常用選項

    • -R 遞歸修改指定目錄下所有文件或子目錄的權(quán)限

歸屬(所有權(quán))

  • 屬主: 擁有該文件或目錄的用戶賬號
  • 屬組: 擁有該文件或目錄的組賬號

權(quán)限修改

  • 格式:

    • chown 屬主 文件/目錄
    • chown :屬組 文件/目錄
    • chown 屬主:屬組 文件/目錄
  • 常用選項

    • -R: 遞歸修改指定目錄下所有文件或子目錄的歸屬權(quán)限

    • ex:

        [root@localhost ~]# chown tom a.txt 
        [root@localhost ~]# chown :manager a.txt
        [root@localhost ~]# ls a.txt -l
        -rw-r--r--. 1 tom manager 0 May 21 05:56 a.txt
        [root@localhost ~]# chown root:root a.txt 
        [root@localhost ~]# ls a.txt -l
        -rw-r--r--. 1 root root 0 May 21 05:56 a.txt
        [root@localhost ~]# 
      

練習(xí)題-01

  • 新建文件 /root/bb.txt,屬主為 harry,屬組為manager,屬主可以讀寫執(zhí)行,屬組可以讀寫執(zhí)行,其他人只讀

      [root@localhost ~]# touch /root/bb.txt
      [root@localhost ~]# useradd harry
      [root@localhost ~]# groupadd manager
      [root@localhost ~]# chown harry:manager /root/bb.txt
      [root@localhost ~]# chmod 774 /root/bb.txt
      [root@localhost ~]# ls bb.txt -l
      -rwxrwxr--. 1 harry manager 0 May 21 10:40 bb.txt
    
  • 新需求

    • 設(shè)置susa用戶對文件擁有讀和執(zhí)行權(quán)限
    • 設(shè)置group組內(nèi)的成員對文件擁有讀的權(quán)限
    • 此需求根據(jù)上面知識無法解決,需要設(shè)置 ACL 權(quán)限
        [root@localhost ~]# useradd susa
        [root@localhost ~]# setfacl -m u:susa:rw bb.txt 
        [root@localhost ~]# getfacl bb.txt 
        # file: bb.txt
        # owner: harry
        # group: manager
        user::rwx
        user:susa:rw-
        group::rwx
        mask::rwx
        other::r--
        [root@localhost ~]# groupadd group
        [root@localhost ~]# setfacl -m g:group:r bb.txt 
        [root@localhost ~]# getfacl bb.txt 
        # file: bb.txt
        # owner: harry
        # group: manager
        user::rwx
        user:susa:rw-
        group::rwx
        group:group:r--
        mask::rwx
        other::r--

ACL權(quán)限

  • ACL(Access Control List),主要目錄是在提供傳統(tǒng)的owner,group,otherd的read,write,execute權(quán)限之外細(xì)部權(quán)限設(shè)頂
  • ACL 可以針對單一使用者,或者單一文件/目錄進行r,w,x的權(quán)限使用規(guī)范
  • 設(shè)置ACL
    setfacl -m u:username:rwx filename
        u: 屬主
        username: 用戶名稱
        rwx: 權(quán)限
        filename: 文件
    setfacl -m g:groupname:rwx filename
        g: 屬組
        groupname: 組名稱
    查看
        getfacl filename
    刪除
        setfacl -x u:username filename


    刪除用戶權(quán)限
        [root@localhost ~]# setfacl -m u:susa:rw a.txt 
        [root@localhost ~]# getfacl a.txt 
        # file: a.txt
        # owner: root
        # group: root
        user::rw-
        user:susa:rw-
        group::r--
        mask::rw-
        other::r--
        [root@localhost ~]# setfacl -x u:susa a.txt 
        [root@localhost ~]# getfacl a.txt 
        # file: a.txt
        # owner: root
        # group: root
        user::rw-
        group::r--
        mask::r--
        other::r--

    刪除組權(quán)限
        [root@localhost ~]# setfacl -m g:group:r a.txt 
        [root@localhost ~]# getfacl a.txt 
        # file: a.txt
        # owner: root
        # group: root
        user::rw-
        group::r--
        group:group:r--
        mask::r--
        other::r--
        
        [root@localhost ~]# setfacl -x g:group a.txt 
        [root@localhost ~]# getfacl a.txt 
        # file: a.txt
        # owner: root
        # group: root
        user::rw-
        group::r--
        mask::r--
        other::r--

練習(xí)題-02

  • 拷貝文件 /etc/fstab到 /var/tmp/fstab,配置文件 /var/tmp/fstab的權(quán)限
    • 文件 /var/tmp/fstab的擁有者是root用戶
    • 文件 /var/tmp/fstab屬于root組
    • 文件 /var/tmp/fstab對任何人都不可執(zhí)行
    • 用戶natasha 能夠?qū)ξ募?/var/tmp/fstab執(zhí)行讀和寫操作
    • 用戶harry 對文件 /var/tmp/fstab既不能讀,也不能寫
    • 所有其他用戶(當(dāng)前的和將來的)能夠?qū)ξ募?/var/tmp/fstab進行讀操作
        [root@localhost ~]# useradd harry
        [root@localhost ~]# useradd natasha
        [root@localhost ~]# cp /etc/fstab /var/tmp/fstab
        [root@localhost ~]# cd /var/tmp/
        [root@localhost tmp]# ls fstab -l
        -rw-r--r--. 1 root root 465 May 21 11:09 fstab
        [root@localhost tmp]# setfacl -m u:natasha:rw fstab 
        [root@localhost tmp]# setfacl -m u:harry:-- fstab 
        [root@localhost tmp]# getfacl fstab 
        # file: fstab
        # owner: root
        # group: root
        user::rw-
        user:harry:---
        user:natasha:rw-
        group::r--
        mask::rw-
        other::r--

特殊權(quán)限

  • umask 反掩碼 0022 權(quán)限的一種補碼 777-022=755
    # root身份默認(rèn)權(quán)限
    [root@localhost ~]# mkdir root_dir
    [root@localhost ~]# touch root_file
    drwxr-xr-x. 2 root root     6 May 22 08:46 root_dir 755
    -rw-r--r--. 1 root root     0 May 22 08:46 root_file 644

    # 普通用戶身份默認(rèn)權(quán)限
    [ruochen@localhost ~]$ touch ruochen_file
    [ruochen@localhost ~]$ mkdir ruochen_dir
    drwxrwxr-x. 2 ruochen ruochen 6 May 22 08:49 ruochen_dir 775
    -rw-rw-r--. 1 ruochen ruochen 0 May 22 08:49 ruochen_file 664

    [root@localhost ~]# umask 0
    [root@localhost ~]# umask
    0000
    [root@localhost ~]# touch new_file
    [root@localhost ~]# mkdir new_dir
    drwxrwxrwx. 2 root root     6 May 22 08:55 new_dir
    -rw-rw-rw-. 1 root root     0 May 22 08:55 new_file

附加權(quán)限

SET位權(quán)限

  • SUID:

    • 為可執(zhí)行文件設(shè)置(文件具有x位權(quán)限),

    • 權(quán)限標(biāo)識字符: 's' u+s 4 4***

    • 當(dāng)執(zhí)行這個可執(zhí)行文件時,調(diào)用該文件的屬主的身份執(zhí)行

        [root@localhost ~]# ll /etc/shadow
        ----------. 1 root root 1585 May 22 07:33 /etc/shadow
      
    • \color{red}為什么shadow 文件無權(quán)限,普通用戶還能登錄/修改密碼?

    • 我們先拿一個 ping 命令來舉例,先將 /bin/ping 拷貝到 /home/ruochen 這個用戶下,然后執(zhí)行 /home/ruochen/ping 127.0.0.1 看看會發(fā)生什么?

        [ruochen@localhost ~]$ /home/ruochen/ping 127.0.0.1
        ping: icmp open socket: Operation not permitted
      
    • 顯然,沒有權(quán)限。那么我們?nèi)绻o他設(shè)置 SUID 權(quán)限會怎么樣?

        [root@localhost ~]# chmod u+s /home/ruochen/ping
      
    • 現(xiàn)在再來執(zhí)行

        [ruochen@localhost ~]$ /home/ruochen/ping 127.0.0.1
        PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
        64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.019 ms
        64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.069 ms
      
    • 顯然,現(xiàn)在可執(zhí)行。

    • \color{red}由此,我們可以看出SUID權(quán)限的作用也就能解釋前面所說的普通用戶登錄/修改密碼問題

  • SGID: 老鼠的兒子會打洞

    • 一般設(shè)置在目錄上,這時候在該目錄下新建的文件/目錄自動繼承父目錄的屬組

    • 我們先在ruochen 用戶下新建一個文件夾和一個文件

        [ruochen@localhost ~]$ mkdir sgid_dir
        [ruochen@localhost ~]$ cd sgid_dir/
        [ruochen@localhost sgid_dir]$ touch ruochen.txt
      
    • 然后,我們在root 用戶下,切換到/home/ruochen/sgid_dir 目錄下,新建一個 root.txt 文件

        [root@localhost ~]# cd /home/ruochen/sgid_dir/
        [root@localhost sgid_dir]# touch root.txt
      
    • 然后,我們給剛才新建的目錄加一個 sgid 權(quán)限

        [root@localhost ruochen]# chmod g+s sgid_dir/
      
    • 在root 用戶下,在 sgid_dir 文件夾中繼續(xù)新建一個目錄

        [root@localhost sgid_dir]# mkdir root_dir
        [root@localhost sgid_dir]# ll
        total 0
        drwxr-sr-x. 2 root    ruochen 6 May 22 09:37 root_dir
        -rw-r--r--. 1 root    root    0 May 22 09:32 root.txt
        -rw-rw-r--. 1 ruochen ruochen 0 May 22 09:30 ruochen.txt
      
    • 這時,我們發(fā)現(xiàn) \color{red}root\_dir 的屬組不是root,而是 ruochen,我們看一下 root_dir 父目錄的屬組

        [root@localhost sgid_dir]# cd ..
        [root@localhost ruochen]# ll
        total 0
        drwxrwxr-x. 2 ruochen ruochen  6 May 22 08:49 ruochen_dir
        -rw-rw-r--. 1 ruochen ruochen  0 May 22 08:49 ruochen_file
        drwxrwsr-x. 3 ruochen ruochen 54 May 22 09:37 sgid_dir
      
    • 由此,我們可看出 sgid 權(quán)限的作用,也即 \color{red}“老鼠的兒子會打洞”

粘滯位權(quán)限(Sticky)


  • 為公共目錄設(shè)置(777), 標(biāo)識為 't'

  • 1***

  • 用戶不能刪除其目錄中其他用戶的文件

  • /tmp, /var/tmp

      drwxrwxrwt.  17 root  root  4096 May 22 09:42 tmp
    
    • 在roor 用戶下新建一個 /test 目錄

        [root@localhost ~]# mkdir /test
        drwxr-xr-x.   2 root  root     6 May 22 09:50 test
      
    • 將其權(quán)限改為 777,并在目錄下新建一個 root.txt 文件

        [root@localhost ~]# chmod 777 /test/
        drwxrwxrwx.   2 root  root     6 May 22 09:50 test
        [root@localhost test]# touch root.txt
      
    • 然后我們切換到 ruochen 用戶,發(fā)現(xiàn)可以切換到 /test 目錄,也能創(chuàng)建和查看文件

        [ruochen@localhost share]$ cd /test/
        [ruochen@localhost test]$ touch ruochen.txt
        [ruochen@localhost test]$ ll
        total 0
        -rw-r--r--. 1 root    root    0 May 22 09:53 root.txt
        -rw-rw-r--. 1 ruochen ruochen 0 May 22 09:54 ruochen.txt
      
    • 我們嘗試在ruochen 用戶下,刪除 /test 目錄中的文件

        [ruochen@localhost test]$ rm -rf root.txt
        [ruochen@localhost test]$ ll
        total 0
        -rw-rw-r--. 1 ruochen ruochen 0 May 22 09:54 ruochen.txt
        **[ruochen@localhost test]$ rm -rf ruochen.txt 
        [ruochen@localhost test]$ ll
        total 0
      
    • 我們發(fā)現(xiàn) ruochen 用戶可以把里面所有的文件都刪除,這樣,\color{red}共享文件就可以被隨意刪除,這是不可以的, 這時,\color{red}粘滯位權(quán)限就派上用場了,其可以防止用戶刪除其他用戶的文件

    • 我們在root 用戶下,給 /test/ 目錄加一個粘滯位權(quán)限,然后在該目錄下新建一個 root.txt 文件

        [root@localhost ~]# chmod o+t /test/
        [root@localhost test]# touch root.txt
      
    • 我們再次嘗試在 ruochen 用戶下刪除 root.txt 文件

        [ruochen@localhost test]$ rm -rf root.txt 
        rm: cannot remove ‘root.txt’: Operation not permitted
      
    • 發(fā)現(xiàn)刪除被拒絕,這樣,我們就可以理解粘滯位權(quán)限了

練習(xí)題-03

  • 創(chuàng)建一個共享目錄 /home/cnrts, 特性如下
    • /home/cnrts 目錄的組所有權(quán)是 manager
    • manager組的成員對目錄有讀寫和執(zhí)行的權(quán)限,除此之外的其他所有用戶沒有任何權(quán)限(root用戶能夠訪問系統(tǒng)中的所有文件和目錄)
    • 在/home/cnrts 目錄中創(chuàng)建文件,其組所有權(quán)會自動設(shè)置為屬于manager組
        [root@localhost ~]# mkdir /home/cnrts
        [root@localhost ~]# groupadd manager
        [root@localhost ~]# chown :manager /home/cnrts/
        [root@localhost ~]# chmod 2770 /home/cnrts/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容