Linux下的進階檔案許可權ACL

來源:互聯網
上載者:User

ACL(Access Control List)即存取控制清單。主要是針對單一使用者,單一檔案或目錄進行rwx許可權的細部設定。可以針對使用者(User)、群組(Group)、預設屬性掩碼(mask)進行設定。ACL是Linux系統許可權額外支援的一項功能,需要檔案系統的支援,例如:ReiserFS , EXT2 , EXT3 , EXT4 , JFS , XFS等都支援ACL功能。 *擁有ACL功能:

  1. [root@rhel6 ~]# mount -o acl /dev/iscsi/sharedisk /data/
  2. [root@rhel6 ~]# mount | grep sharedisk
  3. /dev/mapper/iscsi-sharedisk on /data type ext4 (rw,acl)
  4. 註:如果是用tune2fs命令啟用分區的ACL功能,用mount命令是看不到的.
  5. [root@rhel6 ~]# tune2fs -o acl /dev/iscsi/sharedisk
  6. [root@rhel6 ~]# tune2fs -l /dev/iscsi/sharedisk | grep -i "default mount option"
  7. Default mount options: acl
  8. [root@rhel6 ~]# umount /data/
  9. [root@rhel6 ~]# mount /dev/iscsi/sharedisk /data/
  10. [root@rhel6 ~]# mount | grep sharedisk
  11. /dev/mapper/iscsi-sharedisk on /data type ext4 (rw)
ACL相關設定命令getfacl:擷取檔案或目錄的ACL設定資訊.setfac:設定檔案或目錄的ACL設定資訊.chacl:同setfacl,也是用來設定ACL設定資訊(不常用).
  1. [root@rhel6 data]# setfacl --help
  2. setfacl 2.2.49 -- set file access control lists
  3. Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
  4. -m, --modify=acl 變更檔或目錄的ACL規則
  5. -M, --modify-file=file 從一個檔案讀入ACL設定資訊並以此為模版修改當前檔案或目錄的ACL規則
  6. -x, --remove=acl 刪除檔案或目錄指定的ACL規則
  7. -X, --remove-file=file 從一個檔案讀入ACL設定資訊並以此為模版刪除當前檔案或目錄的ACL規則
  8. -b, --remove-all 刪除檔案或目錄所有的ACL規則
  9. -k, --remove-default 刪除檔案或目錄預設的ACL規則
  10. --set=acl 設定當前檔案的ACL規則
  11. --set-file=file 從檔案讀入ACL規則來設定當前檔案或目錄的ACL規則
  12. --mask 重新計算有效許可權,即使ACL mask被明確指定
  13. -n, --no-mask 不要重新計算有效許可權。setfacl預設會重新計算ACL mask,除非mask被明確的制定
  14. -d, --default 設定目錄預設的ACL規則(只對目錄有效)
  15. -R, --recursive 遞迴處理
  16. -L, --logical logical walk, follow symbolic links
  17. -P, --physical physical walk, do not follow symbolic links
  18. --restore=file restore ACLs (inverse of `getfacl -R')
  19. --test test mode (ACLs are not modified)

註:設定了ACL的目錄或檔案,在屬性的最後一位會出現一個“+”號,查看檔案或目錄所屬群組的準確許可權應該使用getfacl命令。

 
  1. 目錄:
  2. [root@rhel6 data]# mkdir acl_dir
  3. [root@rhel6 data]# ll -d acl_dir
  4. drwxr-xr-x. 2 root root 1024 Mar 24 10:29 acl_dir/
  5. [root@rhel6 data]# getfacl acl_dir/
  6. # file: acl_dir
  7. # owner: root "基本規則"
  8. # group: root
  9. user::rwx
  10. group::r-x "預設規則"
  11. other::r-x
  12. [root@rhel6 data]# su - user1
  13. [user1@rhel6 ~]$ touch /data/acl_dir/acl_user1
  14. touch: cannot touch `/data/acl_dir/acl_user1': Permission denied //user1使用者對acl_dir目錄不具有寫入權限,無法建立檔案
  15. [user1@rhel6 ~]$ exit
  16. [root@rhel6 data]# setfacl -m u:user1:rwx acl_dir/ //賦予user1使用者對acl_dir目錄具有讀寫執行的許可權
  17. [root@rhel6 data]# getfacl --all-effective acl_dir/
  18. # file: acl_dir
  19. # owner: root
  20. # group: root
  21. user::rwx
  22. user:user1:rwx #effective:rwx
  23. group::r-x #effective:r-x
  24. mask::rwx
  25. other::r-x
  26. [root@rhel6 data]# su - user1
  27. [user1@rhel6 ~]$ touch /data/acl_dir/acl_user1 //可成功建立檔案
  28. [user1@rhel6 ~]$ ll -d /data/acl_dir/ //acl_dir目錄屬性後面多了一個"+"
  29. drwxr-xr-x+ 2 root root 1024 Mar 24 10:33 /data/acl_dir/
  30. 註:對於目錄而言,必須給予可執行檔許可權,否則無法cd到對應的目錄中
  31. 檔案:
  32. [root@rhel6 data]# touch acl_file
  33. [root@rhel6 data]# getfacl acl_file
  34. # file: acl_file
  35. # owner: root
  36. # group: root
  37. user::rw-
  38. group::r--
  39. other::r--
  40. [root@rhel6 data]# su - user1
  41. [user1@rhel6 ~]$ echo "access test" > /data/acl_file
  42. -bash: /data/acl_file: Permission denied //user1使用者對acl_file檔案不具有寫入權限
  43. [root@rhel6 data]# setfacl -m u:user1:rw acl_file //賦予user1使用者對acl_file檔案的讀寫權限
  44. [root@rhel6 data]# getfacl --all-effective acl_file
  45. # file: acl_file
  46. # owner: root
  47. # group: root
  48. user::rw-
  49. user:user1:rw- #effective:rw-
  50. group::r-- #effective:r--
  51. mask::rw-
  52. other::r--
  53. [root@rhel6 data]# su - user1
  54. [user1@rhel6 ~]$ echo "access test" > /data/acl_file //可成功寫入acl_file檔案
  55. [user1@rhel6 data]$ cat acl_file
  56. access test
  57. [user1@rhel6 ~]$ ll /data/
  58. total 16
  59. drwxrwxr-x+ 2 root root 1024 Mar 24 10:33 acl_dir
  60. -rw-rw-r--+ 1 root root 12 Mar 24 10:39 acl_file
  61. drwx------. 2 root root 12288 Mar 24 10:24 lost+found
  62. mask:
  63. [root@rhel6 data]# setfacl -m m:r acl_dir/
  64. [root@rhel6 data]# getfacl acl_dir/
  65. # file: acl_dir
  66. # owner: root
  67. # group: root
  68. user::rwx
  69. user:user1:rwx #effective:r--
  70. group::r-x
  71. mask::r--
  72. other::r-x
  73. [root@rhel6 data]# su - user1
  74. [user1@rhel6 data]$ cd acl_dir/
  75. -bash: cd: acl_dir/: Permission denied
  76. 由於user1使用者在這個目錄上沒有x許可權,所以連這個目錄都不能進入,儘管我們已經賦予user1使用者rwx的ACL設定資訊。
  77. 最終許可權由mask控制,許可權必須在mask內,否則相對mask多出來的許可權也是無效的。
 
  1. [root@rhel6 data]# mkdir dir
  2. [root@rhel6 data]# setfacl -d -m u:user1:rwx dir/ //讓dir/目錄下的所有檔案和目錄繼承dir/目錄的ACL設定資訊
  3. [root@rhel6 data]# getfacl dir/
  4. # file: dir/
  5. # owner: root
  6. # group: root
  7. user::rwx
  8. group::r-x
  9. other::r-x
  10. default:user::rwx
  11. default:user:user1:rwx
  12. default:group::r-x
  13. default:mask::rwx
  14. default:other::r-x
  15. [root@rhel6 data]# touch dir/test
  16. [root@rhel6 data]# getfacl dir/test //dir目錄中建立的檔案user1使用者同樣具有rwx許可權
  17. # file: dir/test
  18. # owner: root
  19. # group: root
  20. user::rw-
  21. user:user1:rwx #effective:rw-
  22. group::r-x #effective:r--
  23. mask::rw-
  24. other::r--
  25. [root@rhel6 data]# setfacl -x u:user1 acl_file //移除acl_file中的user1的ACL設定
  26. [root@rhel6 data]# getfacl acl_file
  27. # file: acl_file
  28. # owner: root
  29. # group: root
  30. user::rw-
  31. group::r--
  32. mask::r--
  33. other::r--
  34. [root@rhel6 data]# ll acl_file
  35. -rw-r--r--+ 1 root root 12 Mar 24 10:39 acl_file //檔案屬性的"+"依然存在
  36. [root@rhel6 data]# setfacl -b acl_file //移除acl_file中所有的ACL設定
  37. [root@rhel6 data]# getfacl acl_file
  38. # file: acl_file
  39. # owner: root
  40. # group: root
  41. user::rw-
  42. group::r--
  43. other::r--
  44. [root@rhel6 data]# ll acl_file
  45. -rw-r--r--. 1 root root 12 Mar 24 10:39 acl_file //檔案屬性的"+"已還原成"."
  46. [root@rhel6 data]# getfacl dir/ > acl.bak //匯出dir目錄的ACL設定資訊
  47. [root@rhel6 data]# setfacl --set-file=acl.bak acl_dir/ //將ACL設定資訊匯入acl_dir目錄
  48. [root@rhel6 data]# getfacl acl_dir/
  49. # file: acl_dir/
  50. # owner: root
  51. # group: root
  52. user::rwx
  53. group::r-x
  54. other::r-x
  55. default:user::rwx
  56. default:user:user1:rwx
  57. default:group::r-x
  58. default:mask::rwx
  59. default:other::r-x

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.