Linux ACL權限管理

    關於對文件和目錄權限的(文件所有者,所屬羣組,其他用戶)管理,查看文章:Linux 權限管理基本命令

一、ACL權限基礎知識

1、什麼是 ACL 權限?

      ACL,是 Access Control List(訪問控制列表)的縮寫,是一個針對文件/目錄的訪問控制列表。

      在 Linux 系統中, ACL 可實現對單一用戶設定訪問文件的權限。

      也可以這麼說,設定文件的訪問權限,它在傳統方式(3 種身份搭配 3 種權限)UGO權限管理的基礎上爲文件系統提供一個額外的、更靈活的權限管理機制。ACL允許你給任何的用戶或用戶組設置任何文件/目錄的訪問權限。。

2、ACL 權限有什麼用

     ACL 權限作爲UGO權限管理的補充,ACL自然要有UGO辦不到或者很難辦到的本事,例如:

1)可以針對用戶來設置權限
2)可以針對用戶組來設置權限
3)子文件/目錄繼承父目錄的 ACL權限

3、檢查系統是否支持ACL

     ACL需要Linux內核和文件系統的配合才能工作,當前大多數Linux發行版本默認都是支持的。

    CentOS7.X創建的xfs文件系統默認內置支持ACL功能。

    CentOS7.X之前版本,手工創建的ext4文件系統可能沒有開ACL功能。如果沒有需手動重新掛載開啓,但一般情況都是開着的。最好還是查看一下,自行百度

4、檢查系統是否安裝ACL,一般情況都是安裝了的,最好看一下:

[root@centos7 ~]# rpm -qa | grep acl   
acl-2.2.51-14.el7.x86_64
libacl-2.2.51-14.el7.x86_64
# 沒看到就用yum安裝一下這兩個軟件

二、ACL權限設置(setfacl和getfacl)

     設定 ACl 權限,常用命令有 2 個,經常搭配使用,分別是:

1)getfacl命令:用於查看文件或目錄當前設定的 ACL 權限信息。使用非常簡單

該命令的基本格式爲:# getfacl 文件名

2)setfacl命令:用於設定用戶或羣組對指定文件或目錄的 ACL訪問權限。

此命令的基本格式爲:# setfacl 選項 文件名

選項 功能
-m 參數 設定 ACL 權限。如果是給予用戶 ACL 權限,參數則使用 "u:用戶名:權限" 的格式,例如 setfacl -m u:st:rx /project 表示設定 st 用戶對 project 目錄具有 rx 權限;如果是給予組 ACL 權限,參數則使用 "g:組名:權限" 格式,例如 setfacl -m g:tgroup:rx /project 表示設定羣組 tgroup 對 project 目錄具有 rx 權限。不可與 -x 合用
-x 參數 刪除指定用戶(參數使用 u:用戶名)或羣組(參數使用 g:羣組名)的 ACL 權限,例如 setfacl -x u:st /project 表示刪除 st 用戶對 project 目錄的 ACL 權限。不可與 -m 合用
-b 刪除所有的 ACL 權限,例如 setfacl -b /project 表示刪除有關 project 目錄的所有 ACL 權限。
-d 設定默認 ACL 權限,命令格式爲 "setfacl -m d:u:用戶名:權限 文件名"(如果是羣組,則使用 d:g:羣組名:權限),只對目錄生效,指目錄中新建立的文件擁有此默認權限,例如 setfacl -m d:u:st:rx /project 表示 st 用戶對 project 目錄中新建立的文件擁有 rx 權限。
-R 遞歸設定 ACL 權限,指設定的 ACL 權限會對目錄下的所有子文件生效,命令格式爲 "setfacl -m u:用戶名:權限 -R 文件名"(羣組使用 g:羣組名:權限),例如 setfacl -m u:st:rx -R /project 表示 st 用戶對已存在於 project 目錄中的子文件和子目錄擁有 rx 權限。
-k 刪除默認 ACL 權限。

針對用戶設置ACL權限

[root@centos7 ~]# mkdir /root/d_acl
[root@centos7 ~]# useradd user1
[root@centos7 ~]# passwd user1
[root@centos7 ~]# ll
drwxr-xr-x  2 root root       6 2月  21 18:37 d_acl

1、setfacl -m:給用戶設定 ACL 權限(rx):

[root@centos7 ~]# setfacl -m u:user1:rx /root/d_acl

    查看文件的ACL 權限

[root@centos7 ~]# ll
總用量 1240
drwxr-xr-x  5 root root     144 1月  19 11:45 abc
-rw-------. 1 root root    1440 12月  1 20:34 anaconda-ks.cfg
drwxr-xr-x+ 2 root root       6 2月  21 18:37 d_acl
# 如果ll查詢時會發現,在權限位後面多了一個"+",表示此目錄擁有ACL權限

[root@centos7 ~]# getfacl /root/d_acl/
getfacl: Removing leading '/' from absolute path names
# file: root/d_acl/
# owner: root
# group: root
user::rwx
user:user1:r-x   #用戶user1的ACL權限
group::r-x
mask::r-x
other::r-x

此時,在d_acl目錄中創建文件、目錄是沒有 ACL權限的

[root@centos7 ~]# cd d_acl
[root@centos7 d_acl]# touch aa.f
[root@centos7 d_acl]# mkdir d_aa
[root@centos7 d_acl]# ll
總用量 0
-rw-r--r-- 1 root root 0 2月  21 18:46 aa.f
drwxr-xr-x 2 root root 6 2月  21 18:46 d_aa

2、setfacl -m d:給目錄設定默認 ACL 權限

     默認 ACL 權限的作用:如果給父目錄設定了默認 ACL 權限,那麼父目錄中所有新建的子文件都會繼承父目錄的 ACL 權限。需要注意的是,默認 ACL 權限只對目錄生效。

     對 d_acl目錄設定默認ACL 權限

[root@centos7 d_acl]# setfacl -m d:u:user1:rx /root/d_acl/
[root@centos7 d_acl]# mkdir d_bb
[root@centos7 d_acl]# touch bb.f
[root@centos7 d_acl]# ll
總用量 0
-rw-r--r--  1 root root 0 2月  21 18:46 aa.f
-rw-r--r--+ 1 root root 0 2月  21 18:53 bb.f
drwxr-xr-x  2 root root 6 2月  21 18:46 d_aa
drwxr-xr-x+ 2 root root 6 2月  21 18:52 d_bb

3、setfacl -R:設定遞歸 ACL 權限

     遞歸 ACL 權限指的是父目錄在設定 ACL 權限時,所有的子文件和子目錄也會擁有相同的 ACL 權限。

[root@centos7 d_acl]# setfacl -m u:user1:rwx -R /root/d_acl/
[root@centos7 d_acl]# ll
總用量 0
-rw-rwxr--+ 1 root root 0 2月  21 18:46 aa.f
-rw-rwxr--+ 1 root root 0 2月  21 18:53 bb.f
drwxrwxr-x+ 2 root root 6 2月  21 18:46 d_aa
drwxrwxr-x+ 2 root root 6 2月  21 18:52 d_bb
[root@centos7 d_acl]# getfacl aa.f
# file: aa.f
# owner: root
# group: root
user::rw-
user:user1:rwx
group::r--
mask::rwx
other::r--

4、setfacl -x:刪除指定用戶的 ACL 權限

      刪除指定用戶和用戶組的對 project 文件/目錄的ACL權限

[root@centos7 d_acl]# setfacl -x u:user1 aa.f
[root@centos7 d_acl]# getfacl aa.f
# file: aa.f
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
[root@centos7 d_acl]# ll
總用量 0
-rw-r--r--+ 1 root root 0 2月  21 18:46 aa.f
-rw-rwxr--+ 1 root root 0 2月  21 18:53 bb.f
drwxrwxr-x+ 2 root root 6 2月  21 18:46 d_aa
drwxrwxr-x+ 2 root root 6 2月  21 18:52 d_bb

5、setfacl -k:刪除默認 ACL 權限

[root@centos7 ~]# setfacl -k /root/d_acl/
[root@centos7 ~]# touch d_acl/cc.f
[root@centos7 ~]# ll d_acl/
總用量 0
-rw-r--r--+ 1 root root 0 2月  21 18:46 aa.f
-rw-rwxr--+ 1 root root 0 2月  21 18:53 bb.f
-rw-r--r--  1 root root 0 2月  21 19:03 cc.f
drwxrwxr-x+ 2 root root 6 2月  21 18:46 d_aa
drwxrwxr-x+ 2 root root 6 2月  21 18:52 d_bb

6、setfacl -b:刪除指定文件的所有 ACL 權限

      刪除所有與指定文件或目錄相關的 ACL 權限

[root@centos7 ~]# setfacl -b /root/d_acl/
[root@centos7 ~]# ll
總用量 1240
drwxr-xr-x  5 root root     144 1月  19 11:45 abc
-rw-------. 1 root root    1440 12月  1 20:34 anaconda-ks.cfg
drwxr-xr-x  4 root root      66 2月  21 19:03 d_acl
drwxr-xr-x  5 lisi lisi     256 7月   9 2011 manpages-zh-1.5.2
drwxr-xr-x  8  500  500    4096 1月  19 10:21 ntfs-3g_ntfsprogs-2017.3.23
-rw-r--r--  1 root root 1259054 1月  19 10:16 ntfs-3g_ntfsprogs-2017.3.23.tgz
[root@centos7 ~]# ll d_acl/
總用量 0
-rw-r--r--+ 1 root root 0 2月  21 18:46 aa.f
-rw-rwxr--+ 1 root root 0 2月  21 18:53 bb.f
-rw-r--r--  1 root root 0 2月  21 19:03 cc.f
drwxrwxr-x+ 2 root root 6 2月  21 18:46 d_aa
drwxrwxr-x+ 2 root root 6 2月  21 18:52 d_bb

   如果想遞歸刪除目錄下的 ACL權限:使用 -R

[root@centos7 ~]# setfacl -bR /root/d_acl/
[root@centos7 ~]# ll d_acl/               
總用量 0
-rw-r--r-- 1 root root 0 2月  21 18:46 aa.f
-rw-r-xr-- 1 root root 0 2月  21 18:53 bb.f
-rw-r--r-- 1 root root 0 2月  21 19:03 cc.f
drwxr-xr-x 2 root root 6 2月  21 18:46 d_aa
drwxr-xr-x 2 root root 6 2月  21 18:52 d_bb

7、最大有效權限 mask(瞭解)

      mask 權限,指的是用戶或羣組能擁有的最大 ACL 權限。也就是說,給用戶或羣組設定的 ACL 權限不能超過 mask 規定的權限範圍,超出部分做無效處理。

      我們給用戶或用戶組設定 ACL 權限其實並不是真正我們設定的權限,實則是將兩權限做“按位相與”運算,最終得出的值,一般默認mask權限都是rwx,一般不更改 mask 權限。

      mask 權限可以使用 setfacl 命令手動更改文件/目錄的 mask 權限值:

# setfacl -m m:權限 文件名

三、sudo命令

sudo 是一種權限管理機制,管理員可以授權於一些普通用戶去執行一些 root 才能執行的操作,而不需要知道 root 的密碼。

可以這樣理解:sudo 命令允許一個已授權用戶以超級用戶或者其它用戶的角色運行一個命令。

當然,能做什麼不能做什麼都是通過安全策略來指定的。

默認的安全策略記錄在 /etc/sudoers 文件中。

 

還有特殊權限SUID、SGID、Sticky等,瞭解 可參考網址:http://c.biancheng.net/view/877.html

 

ends ~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章