在學習了用戶、組和文件對應的User、Group、Others三類用戶以及操作權限Excute、Write和Read后我們知道了在文件或文件夾上我們可以分別對三類用戶設置不同的權限。
舉個例子:
/home/guanyu目錄下的4.txt文件
-rwxrw-r–. 1 guanyu shu 7 Aug 30 10:52 4.txt
User:guanyu擁有rwx權限,
Group:shu組用戶擁有rw權限;
Others:其他用戶擁有r權限。
如果現在Rockets用戶James需要對4.txt取得rw權限,我們會想到以下幾種辦法:
1. 給文件的other類別增加讀和寫的權限. 這樣由于James會被歸為other類別,那么
他也將擁有rw權限。
2. 將James加入到shu group. 那么James會被歸為group類別,那么他將擁有讀寫的權限。
3. 設置suid, 使James能夠以guanyu的身份對4.txt進行操作,從而獲得rw權限。
第一種做法的問題在于所有用戶都將對4.txt擁有讀寫操作,顯然這種做法不可取。
第二種做法的問題在于James被賦予了過多的權限.所有屬于shu組的文件,James都可以擁
有其等同的權限了。
第三種做法雖然可以達到只限定James用戶一人擁有對4.txt文件的rw權限.但是需要
對sudoers文件進行嚴格的格式控制. 而且當文件數量和用戶很多的時候,這種方法就相當地不靈活了。為了方便讓某些其他用戶獲得權限,我們可以單獨設置一種權限管理叫ACL。
一、Access Control List (ACL)接入控制列表簡介
簡單地來說,ACL就是可以設置特定用戶或者用戶組對于一個文件/文件夾的操作權限。ACL 是由一系列的Access Entry所組成的,每一條Access Entry定義了特定的類別可以對文件擁有的操作權限。Access Entry有三個組成部分:Entry tag type,qualifier(optional),權限。
在下面的例子中,Entry tag type , qualifier(optional)u:James,權限rw。
[root@h(Brad) guanyu]# setfacl -m u:James:rw 4.txt
[root@h(Brad) guanyu]#getfacl 4.txt
# file: 4.txt
# owner: root
# group: root
user::rwx
user:James:rw-
group::rw-
mask::rw-
other::r--
需要掌握的命令也只有三個: getfacl, setfacl, chacl。
二、安裝準備、
1.查看ACL安裝情況。使用rpm命令,檢查系統已經安裝acl。
[root@h(Brad) ~]#rpm -qa acl
acl-2.2.49-7.el6.x86_64
2.使用vim編輯/etc/fstab在 /目錄 標簽default后面添加acl標簽。
[root@h(Brad) ~]#vim /etc/fstab
#
# /etc/fstab
Created by anaconda on Mon Aug 28 17:08:51 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=2f1009b9-8157-4711-b605-f8bec7ae0ed6 / ext4 defaults,acl 1 1
UUID=77d9e29e-26d1-440d-a5ed-aa2929977787 /app ext4 defaults 1 2
UUID=8a3fdf1e-c41c-4fe3-ab8f-4269f1532c93 /boot ext4 defaults 1 2
UUID=fb7024d6-6cbc-4b1f-b543-e1637223a20f swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
"/etc/fstab" 16L, 899C written
3.在啟用了acl參數之后重新加載/data分區,出現下面的信息代表分區的acl功能已經正常加載。
[root@h(Brad) ~]#mount -o remount /
[root@h(Brad) ~]#cat /etc/mtab |grep /
/dev/sda5 / ext4 rw,acl 0 0
三、操作
1.操作步驟:
1)查看文件權限狀態;
2)用戶James對4.txt有rw權限;
3)用戶組Rockets對4.txt有r權限;
4)設置mask為x;
5)刪除4.txt的acl設定,還原成文件的原來權限。
2.操作:
在這里我們用的的命令有
getfacl:查看文件/目錄的ACL設定內容
-c過濾文件ugo權限。
setfacl:設置文件/目錄的ACL內容
語法:setfacl [-bkRd] [{-m|-x} acl參數] 文件名
-m :設置后續的acl參數
-x :刪除后續的acl參數
-b :刪除所有的ACL設定參數
-R :遞歸設置acl參數
-d :設置預設的acl參數(只對目錄有效,在該目錄新建的文件也會使用此ACL默認值)
-k :刪除預設的ACL參數
1)查看4.txt權限狀態。
[root@h(Brad) guanyu]#ll 4.txt
-rwxrw—-. 1 root root 237 Sep 1 07:06 4.txt
[root@h(Brad) guanyu]#getfacl 4.txt
# file: 4.txt
# owner: root
# group: root
user::rwx
group::rw-
other::r–
2)讓用戶James對4.txt有rw權限
[root@h(Brad) guanyu]#setfacl -m u:James:rw 4.txt
[root@h(Brad) guanyu]#ll 4.txt
-rwxrw—-+ 1 root root 237 Sep 1 07:06 4.txt
[root@h(Brad) guanyu]#getfacl 4.txt
# file: 4.txt
# owner: root
# group: root
user::rwx
user:James:rw-
group::r–
mask::rw-
other::—
這時我們就可以看到James用戶在ACL里面已經擁有了對文件的讀寫權限.在文件權限的最后多了一個+號。當任何一個文件擁有了ACL_USER或者ACL_GROUP的值以后我們就可以稱它為ACL文件.這個+號就是用來提示我們的。
特別強調如果文件有ACL_MASK值,那么文件權限標識中第二組rw-代表的就是mask值而不再是group 權限了。
當一個文件擁有了ACL_USER或者ACL_GROUP的值時ACL_MASK同時也會被定義,user和group的acl設置了mask的最大值。
3)用戶組Rockets對4.txt有r權限;
[root@h(Brad) guanyu]#setfacl -m g:Rockets:r 4.txt
[root@h(Brad) guanyu]#getfacl -c 4.txt
user::rwx
user:James:rw-
group::rw-
group:Rockets:r–
mask::rw-
other::r–
在設置了ACL之后,再設置mask,acl內容和group權限就會被影響。mask的作用是讓用戶/組對某個文件只有某些權限。mask只對其他用戶和組的權限有影響,而對owner和other的權限是沒有任何影響的。在下面的例子中因為設置了mask即acl用戶、用戶組和acl組權限的上限為–x,所以在他們的權限信息后面多了#effectiv,除了x權限其他都被限制。
4) 設置mask為x;
[root@h(Brad) guanyu]#setfacl -m mask:x 4.txt
[root@h(Brad) guanyu]#ll 4.txt
-rwx–xr–+ 1 root root 237 Sep 1 07:06 4.txt
[root@h(Brad) guanyu]#getfacl 4.txt
# file: 4.txt
# owner: root
# group: root
user::rwx
user:James:rw- #effective:—
group::rw- #effective:—
group:Rockets:r– #effective:—
mask::–x
other::r–
5)刪除4.txt的acl設定還原成文件的原來權限。
[root@h(Brad) guanyu]#setfacl -b 4.txt
[root@h(Brad) guanyu]#ll 4.txt
-rwx—r–. 1 root root 237 Sep 1 07:06 4.txt
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/86885
內容不錯,注意排版,繼續加油!