04-Linux系統ACL控制
阿新 • • 發佈:2018-06-05
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控制