中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

如何理解ACL的訪問權限控制

如何理解ACL的訪問權限控制,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

創(chuàng)新互聯(lián)建站是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設公司,自成立以來公司不斷探索創(chuàng)新,始終堅持為客戶提供滿意周到的服務,在本地打下了良好的口碑,在過去的十年時間我們累計服務了上千家以及全國政企客戶,如輕質隔墻板等企業(yè)單位,完善的項目管理流程,嚴格把控項目進度與質量監(jiān)控加上過硬的技術實力獲得客戶的一致贊美。

在普通權限中,Linux用戶對文件只有三種身份,就是屬主、屬組和其他人;每種用戶身份擁有讀(read)、寫(write)和執(zhí)行(execute)三種權限。但是在實際工作中,這三種身份實在是不夠用,我們舉個例子來看看。

如何理解ACL的訪問權限控制

圖 1 的根目錄中有一個 /project 目錄,這是班級的項目目錄。班級中的每個學員都可以訪問和修改這個目錄,老師也需要對這個目錄擁有訪問和修改權限,其他班級的學員當然不能訪問這個目錄。需要怎么規(guī)劃這個目錄的權限呢?應該這樣:老師使用 root 用戶,作為這個目錄的屬主,權限為 rwx;班級所有的學員都加入 tgroup 組,使 tgroup 組作為 /project 目錄的屬組,權限是 rwx;其他人的權限設定為 0。這樣這個目錄的權限就可以符合我們的項目開發(fā)要求了。

有一天,班里來了一位試聽的學員 st,她必須能夠訪問 /project 目錄,所以必須對這個目錄擁有 r 和 x 權限;但是她又沒有學習過以前的課程,所以不能賦予她 w 權限,怕她改錯了目錄中的內(nèi)容,所以學員 st 的權限就是 r-x。可是如何分配她的身份呢?變?yōu)閷僦??當然不行,要?root 該放哪里?加入 tgroup 組?也不行,因為 tgroup 組的權限是 rwx,而我們要求學員 st 的權限是 r-x。如果把其他人的權限改為 r-x 呢?這樣一來,其他班級的所有學員都可以訪問 /project 目錄了。

當出現(xiàn)這種情況時,普通權限中的三種身份就不夠用了。ACL 權限就是為了解決這個問題的。在使用 ACL 權限給用戶 st 陚予權限時,st 既不是 /project 目錄的屬主,也不是屬組,僅僅賦予用戶 st 針對此目錄的 r-x 權限。這有些類似于 Windows 系統(tǒng)中分配權限的方式,單獨指定用戶并單獨分配權限,這樣就解決了用戶身份不足的問題。

ACL是Access Control List(訪問控制列表)的縮寫,不過在Linux系統(tǒng)中,ACL用于設定用戶針對文件的權限,而不是在交換路由器中用來控制數(shù)據(jù)訪問的功能(類似于防火墻)。

開啟ACL權限

在 CentOS 6.x 系統(tǒng)中 ACL 權限默認是開啟的,不需要手工開啟。不過,如果你的操作系統(tǒng)不是 CentOS 6.x,那該如何查看 ACL 權限是否開啟了呢?可以這樣查看:

[root@localhost ——]# mount

/dev/sda1 on /boot type ext4 (rw)

/dev/sda3 on I type ext4 (rw)

…省略部分輸出…

#使用mount命令可以看到系統(tǒng)中已經(jīng)掛載的分區(qū),但是并沒有看到ACL權限的設置

[root@localhost ——]# dumpe2fs -h /dev/sda3

#dumpe2fs是查詢指定分區(qū)文件系統(tǒng)詳細信息的命令

…省略部分輸出…

Default mount options: user_xattr acl

…省略部分輸出…

其中,dumpe2fs 命令可選的選項及其含義如下:

-h:僅顯示超級塊中的信息,而不顯示磁盤塊組的詳細信息;

使用 mount 命令可以査看到系統(tǒng)中已經(jīng)掛載的分區(qū),而使用 dumpe2fs 命令可以査看到這個分區(qū)文件系統(tǒng)的詳細信息。大家可以看到,我們的 ACL 權限是 /dev/sda3 分區(qū)的默認掛載選項,所以不需要手工掛載。

不過我的 Linux 系統(tǒng)如果沒有默認掛載,則可以手工掛載嗎?當然可以,執(zhí)行如下命令:

[root@localhost ——]# mount -o remount, acl /

#重新掛載根分區(qū),并加入ACL權限

使用 mount 命令重新掛載,并加入 ACL 權限。不過使用此命令是臨時生效的。要想永久生效,需要修改 /etc/fstab 文件,命令如下:

[root@localhost ——]#vi /etc/fstab

UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 /ext4 defaults, acl 1 1

#加入ACL權限

[root@localhost ——]# mount -o remount /

#重新掛載文件系統(tǒng)或重啟系統(tǒng),使修改生效

在你需要開啟 ACL 權限的分區(qū)行上(也就是說 ACL 權限針對的是分區(qū)),手工在 defaults 后面加入",acl"即可永久在此分區(qū)中開啟 ACL 權限。

ACL權限設置

(1)ACL權限管理命令

我們知道了 ACL 權限的作用,也知道了如何開啟 ACL 權限,接下來學習如何査看和設定 ACL 權限。命令如下:

[root@localhost ——]# getfacle 文件名

#查看ACL權限

[root@localhost ——]# setfacl 選項 文件名

#設定ACL權限

選項:

-m:設定 ACL 權限。如果是給予用戶 ACL 權限,則使用"u:用戶名:權限"格式賦予;如果是給予組 ACL 權限,則使用"g:組名:權限" 格式賦予;

-x:刪除指定的 ACL 權限;

-b:刪除所有的 ACL 權限;

-d:設定默認 ACL 權限。只對目錄生效,指目錄中新建立的文件擁有此默認權限;

-k:刪除默認 ACL 權限;

-R:遞歸設定 ACL 權限。指設定的 ACL 權限會對目錄下的所有子文件生效;

(2)給用戶和用戶組添加ACL權限

舉個例子,就來看看圖 1 中的權限怎么分配。我們要求 root 是 /project 目錄的屬主,權限是 rwx;tgroup 是此目錄的屬組,tgroup 組中擁有班級學員 zhangsan 和 lisi,權限是 rwx;其他人的權限是 0。這時,試聽學員 st 來了,她的權限是 r-x。我們來看具體的分配命令。

[root@localhost ——]# useradd zhangsan

[root@localhost ——]# useradd lisi

[root@localhost ——]# useradd st

[root@localhost ——]# groupadd tgroup

#添加需要試驗的用戶和用戶組,省略設定密碼的過程

[root@localhost ——]# mkdir /project #建立需要分配權限的目錄

[root@localhost ——]# chown root:tgroup /project/

#改變/project目錄的屬主和屬組

[root@localhost ——]# chmod 770 /project/

#指定/project目錄的權限

[root@localhost ——]# ll -d /project/

drwxrwx--- 2 root tgroup 4096 1月19 04:21 /project/

#查看一下權限,已經(jīng)符合要求了

#這時st學員來試聽了,如何給她分配權限

[root@localhost ——]# setfacl -m u:st:rx /project/

#給用戶st賦予r-x權限,使用"u:用戶名:權限" 格式

[root@localhost /]# cd /

[root@localhost /]# ll -d project/

drwxrwx---+ 3 root tgroup 4096 1月19 05:20 project/

#使用ls-l査詢時會發(fā)現(xiàn),在權限位后面多了一個"+",表示此目錄擁有ACL權限

[root@localhost /]# getfacl project

#查看/prpject目錄的ACL權限

#file: project <-文件名

#owner: root <-文件的屬主

#group: tgroup <-文件的屬組

user::rwx <-用戶名欄是空的,說明是屬主的權限

user:st:r-x <-用戶st的權限

group::rwx <-組名欄是空的,說明是屬組的權限

mask::rwx <-mask權限

other::--- <-其他人的權限

大家可以看到,st 用戶既不是 /prpject 目錄的屬主、屬組,也不是其他人,我們單獨給 st 用戶分配了 r-x 權限。這樣分配權限太方便了,完全不用先辛苦地規(guī)劃用戶身份了。

我想給用戶組賦予 ACL 權限可以嗎?當然可以,命令如下:

[root@localhost /]# groupadd tgroup2

#添加測試組

[root@localhost /]# setfacl -m g:tgroup2:rwx project/

#為組tgroup2紛配ACL權限,使用"g:組名:權限"格式

[root@localhost /]# ll -d project/

drwxrwx---+ 2 root tgroup 4096 1月19 04:21 project/

#屬組并沒有更改

[root@localhost /]# getfacl project/

#file: project/

#owner: root

#group: tgroup

user::rwx

user:st:r-x

group::rwx

group:tgroup2:rwx <-用戶組tgroup2擁有了rwx權限

mask::rwx

other::--

(3)最大有效權限mask

mask 是用來指定最大有效權限的。mask 的默認權限是 rwx,如果我給 st 用戶賦予了 r-x 的 ACL 權限,mj 需要和 mask 的 rwx 權限"相與"才能得到 st 的真正權限,也就是 r-x "相與"rwxtj 出的值是 r-x,所以 st 用戶擁有 r-x 權限。

如果把 mask 的權限改為 r--,和 st 用戶的權限相與,也就是 r--"相與"r-x 得出的值是 r--,st 用戶的權限就會變?yōu)橹蛔x。大家可以這么理解:用戶和用戶組所設定的權限必須在 mask 權限設定的范圍之內(nèi)才能生效,mask權限就是最大有效權限。

不過我們一般不更改 mask 權限,只要給予 mask 最大權限 rwx,那么任何權限和 mask 權限相與,得出的值都是權限本身。也就是說,我們通過給用戶和用戶組直接賦予權限,就可以生效,這樣做更直觀。

補充:邏輯與運算的運算符是"and"??梢岳斫鉃樯钪兴f的"并且"。也就是相與的兩個值都為真,結果才為真;有一個值為假,與的結果就為假。比如 A 相與 B,結果入表 2 所示。

表 2 邏輯與運算

A B and

真 真 真

真 假 假

假 真 假

假 假 假

那么兩個權限相與和上面的結果類似,我們以讀(r)權限為例,結果如表 3 所示。

表 3 讀權限相與

A B and

r r r

r - -

- r -

- - -

所以,"rwx"相與"r-x",結果是"r-x";"r--"相與"r-x",結果是"r--"。

修改最大有效權限的命令如下:

[root@localhost /]# setfacl -m m:rx project/

#設定mask權限為r-x,使用"m:權限"格式

[root@localhost /]# getfacl project/

#file:project/

#owner:root

#group:tgroup

user::rwx

group::rwx #effective:r-x

mask::r-x

#mask權限變?yōu)閞-x

other::--

(4)默認ACL權限和遞歸ACL權限

我們已經(jīng)給 /project 目錄設定了 ACL 權限,那么,在這個目錄中新建一些子文件和子目錄,這些文件是否會繼承父目錄的 ACL 權限呢?我們試試吧。

[root@localhost /]# cd /project/

[root@localhost prq'ect]# touch abc

[root@localhost prq'ect]# mkdir d1

#在/project目錄中新建了abc文件和d1目錄

[root@localhost project]#ll

總用量4

-rw-r--r-- 1 root root 01月19 05:20 abc

drwxr-xr-x 2 root root 4096 1月19 05:20 d1

#這兩個新建立的文件權限位后面并沒有"+",表示它們沒有繼承ACL權限

子文件 abc 和子目錄 d1 因為是后建立的,所以并沒有繼承父目錄的 ACL 權限。當然,我們可以手工給這??個文件分配 ACL 權限,但是如果在目錄中再新建文件,都要手工指定,則顯得過于麻煩。這時就需要用到默認 ACL 權限。

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

[root@localhost /]# setfacl -m d:u:st:rx /project/

#使用"d:u:用戶名:權限"格式設定默認ACL權限

[root@localhost project]# getfacl project/

# file: project/

# owner: root

# group: tgroup

user:: rwx

user:st:r-x

group::rwx

group:tgroup2:rwx

mask::rwx

other::--

default:user::rwx <-多出了default字段

default:user:st:r-x

default:group::rwx

default:mask::rwx

default:other::--

[root@localhost /]# cd project/

[root@localhost project]# touch bcd

[root@localhost project]# mkdir d2

#新建子文件和子目錄

[root@localhost project]# ll 總用量8

-rw-r--r-- 1 root root 01月19 05:20 abc

-rw-rw----+ 1 root root 01月19 05:33 bcd

drwxr-xr-x 2 root root 4096 1月19 05:20 d1

drwxrwx---+ 2 root root 4096 1月19 05:33 d2

#新建的bcd和d2已經(jīng)繼承了父目錄的ACL權限

大家發(fā)現(xiàn)了嗎?原先的 abc 和 d1 還是沒有 ACL 權限,因為默認 ACL 權限是針對新建立的文件生效的。

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

[root@localhost project]# setfacl -m u:st:rx -R/project/

#-R遞歸

[root@localhost project]# ll

總用量8

-rw-r-xr--+ 1 root root 01月19 05:20 abc

-rw-rwx--+ 1 root root 01月19 05:33 bcd

drwxr-xr-x+ 2 root root 4096 1月19 05:20 d1

drwxrwx--+ 2 root root 4096 1月19 05:33 d2

#abc和d1也擁有了ACL權限

總結一下:默認 ACL 權限指的是針對父目錄中新建立的文件和目錄會繼承父目錄的 ACL 權限,格式是"setfacl-m d:u:用戶名:權限 文件名";遞歸 ACL 權限指的是針對父目錄中已經(jīng)存在的所有子文件和子目錄繼承父目錄的 ACL 權限,格式是"setfacl-m u:用戶名: 權限 -R 文件名"。

(5)刪除ACL權限

我們來看看怎么刪除 ACL 權限,命令如下:

刪除指定的ACL權限:

[root@localhost /]# setfacl -x u:st /project/

#刪除指定用戶和用戶組的ACL權限

[root@localhost /]# getfacl project/

# file:project/

# owner: root

# group: tgroup

user::rwx

group::rwx

group:tgroup2:rwx

mask::rwx

other::--

#st用戶的權限已被刪除

刪除所有ACL權限:

[root@localhost /]# setfacl -b project/

#會刪除文件的所有ACL權限

[root@localhost /]# getfacl project/http://www.bbqmw.net/qm_bbqmbd/

#file: project/

#owner: root

# group: tgroup

user::rwx

group::rwx

other::--

#所有ACL權限已被刪除

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。

當前標題:如何理解ACL的訪問權限控制
文章網(wǎng)址:http://www.rwnh.cn/article40/peoiho.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設網(wǎng)站導航、營銷型網(wǎng)站建設、標簽優(yōu)化、網(wǎng)頁設計公司品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設
大安市| 杨浦区| 西平县| 红安县| 海阳市| 台南市| 鞍山市| 商都县| 乌拉特中旗| 桓台县| 仙居县| 安义县| 壤塘县| 都昌县| 泽普县| 城步| 鲁甸县| 东至县| 东海县| 贵德县| 会东县| 突泉县| 鸡东县| 富川| 灵宝市| 于都县| 汝城县| 满城县| 潮安县| 金华市| 隆尧县| 三台县| 大冶市| 肥西县| 大竹县| 溧水县| 仙桃市| 年辖:市辖区| 错那县| 永平县| 荆门市|