1. 程式人生 > >04-Linux系統ACL控制

04-Linux系統ACL控制

Linux系統ACL控制

設定acl只能是root管理員用戶. 相關命令: getfacl , setfacl

acl基本用法

//環境準備
[root@localhost ~]# cp /etc/passwd /root/passwd
//文件在沒有設定acl, 看到的和傳統權限是一樣
[root@localhost ~]# ll passwd
-rw-r--r-- 1 root root 0 10-26 13:59 /home/test.txt

//使用getacl查看權限
[root@localhost ~]# getfacl passwd 
# file: passwd
# owner: root
# group: root
user::rw-   //文件owner權限
group::r--  //文件擁有組權限
other::r--  //其他人權限

設定acl權限案例如下:

-rw-r--r-- 1 root root 1380 Feb 27 11:25 passwd

alice 擁有讀寫權限    rw
bgx  沒有任何權限     -
jack 組擁有讀權限     r
匿名用戶擁有讀寫權限  rw

//建立相關用戶
[root@localhost ~]# useradd alice
[root@localhost ~]# useradd bgx
[root@localhost ~]# useradd jack

//增加用戶 alice 權限
[root@localhost ~]# setfacl -m u:alice:rw passwd

//增加用戶 bgx 權限
[root@localhost ~]# setfacl -m u:bgx:- passwd

//增加匿名用戶權限
[root@localhost ~]# setfacl -m o::rw passwd

//增加組權限
[root@localhost ~]# setfacl -m g:jack:r passwd

註意: 如果用戶同時屬於不同的兩個組,並且兩個組設定了acl訪問控制
    1.根據acl訪問控制優先級進行匹配規則
    2.如有用戶擁有多個組的權限不同的權限,優先使用最高權限(模糊匹配)

查看acl權限:

[root@localhost ~]# ll passwd
-rw-rw-rw-+ 1 root root 1531 Jan 26 07:52 passwd

[root@localhost ~]# getfacl passwd
# file: passwd
# owner: root
# group: root
user::rw-
user:bgx:---
user:alice:rw-
group::r--
group:jack:r--
mask::rw-
other::rw-

移除acl權限:

//移除jack組的acl權限
[root@localhost ~]# setfacl -x g:jack passwd

//移除bgx用戶的acl權限
[root@localhost ~]# setfacl -x u:bgx passwd

//移除文件和目錄所有acl權限
[root@localhost ~]# setfacl -b passwd

//刪除目錄的所有默認acl
[root@localhost ~]# setfacl -k dir

ACL實踐案例

案例1: 將新建文件的屬性修改tom:admin, 權限默認為644
要求: tom對該文件有所有的權限, mary可以讀寫該文件, admin組可以讀寫執行該文件, jack只讀該文件, 其他人一律不能訪問該文件

//實驗前, 建立幾個普通用戶
[root@localhost ~]# useradd tom
[root@localhost ~]# useradd bean
[root@localhost ~]# useradd mary
[root@localhost ~]# useradd jack
[root@localhost ~]# useradd sutdent
[root@localhost ~]# groupadd admin
[root@localhost ~]# gpasswd -a mary admin
[root@localhost ~]# gpasswd -a bean admin

//檢查用戶屬性
[root@linux-node1 ~]# id tom
uid=1004(tom) gid=1004(tom) groups=1004(tom)
[root@linux-node1 ~]# id mary
uid=1006(mary) gid=1006(mary) groups=1006(mary),1007(admin)
[root@linux-node1 ~]# id bean
uid=1005(bean) gid=1005(bean) groups=1005(bean),1007(admin)
[root@linux-node1 ~]# id jack
uid=1002(jack) gid=1002(jack) groups=1002(jack)
[root@linux-node1 ~]# id sutdent
uid=1007(sutdent) gid=1008(sutdent) groups=1008(sutdent)

//準備相關文件
[root@linux-node1 ~]# cp /etc/passwd /root/
[root@linux-node1 ~]# chown tom:admin passwd
[root@linux-node1 ~]# chmod 644 passwd

//檢查設定前的acl列表
[root@linux-node1 ~]# getfacl passwd
# file: passwd
# owner: tom
# group: admin
user::rw-
group::r--
other::r--

//設定acl權限
[root@linux-node1 ~]# setfacl -m u::rwx,u:mary:rw,u:jack:r,g:admin:rwx,o::- passwd

//檢查acl權限
[root@linux-node1 ~]# getfacl passwd
# file: passwd
# owner: tom
# group: admin
user::rwx
user:jack:r--
user:mary:rw-
group::r--
group:admin:rwx
mask::rwx
other::---

acl的控制規則是從上往下匹配的
tom由於他是文件的擁有者,所以直接按照user::rwx指定的權限去操作rwx
mary不是文件的擁有著, 從上往下找規則,發現user:mary:rw-能夠精確匹配mary用戶
盡管mary是屬於admin組,admin組有rwx的權限,但是由於mary的規則在前面,所有優先生效
bean由於找不到精確匹配bean用戶的規則, 而bean是屬於admin組,根據文件的定義,該文件是屬於admin組的, 所以bean的權限是按照group::rwx的權限去操作。rwx
jack不是文件的主人, 並且找到user:jack:r--, 所以只讀
student不是文件主人, 也找不到精確匹配的user定義規則, 也找不到相關組的定義規則,最後屬於other, 無任何權限

案例2: lab acl setup

controller組成員有:student
sodor組成員有:thomas,james

目錄: /shares/steamies
文件: /shares/steamies/file
腳本: /shares/steamies/test.sh

controller屬於該目錄的所屬組, 新建文件必須屬於controller組
sodor組的成員對該目錄擁有所有權限
sodor組成員james對該目錄及子目錄(包括以後新建立的文件)沒有任何權限

實際操作:

//準備用戶
[root@linux-node1 ~]# groupadd controller
[root@linux-node1 ~]# groupadd sodor
[root@linux-node1 ~]# useradd student -G controller
[root@linux-node1 ~]# useradd thomas -G sodor
[root@linux-node1 ~]# useradd james -G sodor

//準備目錄
[root@linux-node1 ~]# mkdir /shares/steamies -p
[root@linux-node1 ~]# echo "file" >> /shares/steamies/file
[root@linux-node1 ~]# echo "echo 123" >> /shares/steamies/test.sh
[root@linux-node1 ~]# chmod 755 /shares/steamies/test.sh
[root@linux-node1 ~]# chown -R  :controller /shares/steamies/

//設定權限(X表示,如果原本有執行權限就保留,如果沒有則不添加)
[root@linux-node1 ~]# setfacl -R -m g:sodor:rwX,u:james:- /shares/steamies/

//設定繼承規則
[root@linux-node1 ~]# setfacl -R -m d:g:sodor:rwX,d:u:james:- /shares/steamies/

04-Linux系統ACL控制