分享
 
 
 

Linux 档案权限的新功能 Access Control Lists

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

来源:CnLinux.net

ACL(Access Control Lists)

传统的 Unix like 档案系统只能针对 user/group/other 来对档案设定权限(无法针对各别的使用者,群组来设定),而 ACL 可以针对各别的使用者/群组来设定权限.

Step 0:检查你的核心是否有支持 ACL 的功能

并不是每一个版本的核心都有支持 ACL 的功能,最简单的方式就是检查目前核心是否有支持.

#cat /boot/config-kernel-version | grep -i ext3

CONFIG_EXT3_FS=m

CONFIG_EXT3_IDEX=y

CONFIG_EXT3_FS_XATTR_SHARING=y

CONFIG_EXT3_FS_XATTR_USER=y

CONFIG_EXT3_FS_XATTR_TRUSTED=y

CONFIG_EXT3_FS_ACL=y

此时如果能看到上叙几项功能已经编译至核心中,那你的 ext3 档案系统已经有支持 ACL 的功能

如果没有那请自己编译一个含有上叙功能的模块吧!!这些功能在编译核心选项中的 File systems 下都可以找到.

如果你在编译核心时找不到上叙功能的模块,请至 ACL 的官方网站来安装 Kernel Patch

<http://acl.bestbits.at/>

Step 1:挂载扇区

你可以用下列的方式挂载扇区

#mount -t ext3 -o acl /dev/sda1 /fs1

你也可以直接写在 /etc/fstab 档案中,这样就可以在开机后支持 ACL 的功能

#vi /etc/fstab

-----------------------------------------------------------------------

..........略...................

LABEL=/fs1 /fs1 ext3 acl 1 2

-----------------------------------------------------------------------

Step 2:设定 ACL 的权限

ACL 可以针对下面四种权限来设定

1.个别的使用者

2.个别的群组

3. effective mask 的权限.

4.其它的使用者

下面是个别的说明

1.个别的使用者

假设 user1 user2 user3的使用者都以建立,或者用下面的方式来建立

root 登入系统

[root@unsvr root]#adduser user1

[root@unsvr root]#adduser user2

[root@unsvr root]#adduser user3

[root@unsvr root]#passwd user1

[root@unsvr root]#passwd user2

[root@unsvr root]#passwd user3

mount 一个 ext3 档案系统至目录 /fs1

[root@unsvr root]#mount -t ext3 -o acl /dev/sda1 /fs1

ex:user1 建立的档案开读写的权限给 user2

[root@unsvr root]#chmod -R 777 /fs1

让所有的使用者都能新增档案进入目录的权限

user1 登入系统

[user1@unsvr user1]# cd /fs1

[user1@unsvr fs1]# echo "Create by user1" > user1.txt

[user1@unsvr fs1]# chmod go-r user1.txt

[user1@unsvr fs1]# ll user1.txt

-rw------- 1 user1 user1 17 Jul 14 22:11 user1.txt

此时除了 user1 有读写的权限外没有其它人有读写 user1.txt 的权限(root 除外)

user2 登入系统

[user2@unsvr user2]# cd /fs1

[user2@unsvr fs1]# cat user1.txt

cat : user1.txt Permission denied

user1 登入系统

[user1@unsvr fs1]# setfacl -m u:user2:rw user1.txt

修改权限让 user2 有这个档案的读写权限

看一下他的档案属性变化

[user1@unsvr fs1]# ll

-rw-rw-r--+ 1 user1 user1 10 Feb 16 13:52 user1.txt

你会看到后面多了一个 "+" 表示这个档案有使用 ACL 的属性设定

再用指令 getfacl 来看 ACL 的档案属性设定为何

[user1@unsvr fs1]# getfacl user1.txt

# file: user1.txt

# owner: user1

# group: user1

user::rw-

user:user2:rw-

group::rw-

mask::rw-

other::r--

可以看到 user2 有权限读写这个档案.

user2 登入系统

[user2@unsvr user2]# cd /fs1

[user2@unsvr fs1]# cat user1.txt

Create by user1

user2 可以读取 user1.txt 档案了

[user2@unsvr fs1]# echo "Modify by user2" >> user1.txt

[user2@unsvr fs1]# cat user1.txt

Create by user1

Modify by user2

user2 也可以修改 user1.txt 档案了

user3 登入系统

[user3@unsvr user3]# cd /fs1

[user3@unsvr fs1]# cat user1.txt

cat : user1.txt Permission denied

除了 user1,user2 外没有其它人有读写 user1.txt 的权限(root 除外)

2.个别的群组

ACL 的个别群组权限设定就如同之前个别的使用者方法一样,不过群组的权限设定还要先设定 /etc/group,所以我们要做下列的练习要先做些设定.

假设 user1 user2 user3的使用者以及 group1 group2 群组都已建立,或者用下面的方式来建立

root 登入系统

[root@unsvr root]#adduser user1

[root@unsvr root]#adduser user2

[root@unsvr root]#adduser user3

[root@unsvr root]#passwd user1

[root@unsvr root]#passwd user2

[root@unsvr root]#passwd user3

设定群组

[root@unsvr root]#groupadd group1

[root@unsvr root]#groupadd group2

[root@unsvr root]#vi /etc/group

-----------------------------------------------------------------------

..................

group1:x:503:user1,user2

group2:x:504:user3

-----------------------------------------------------------------------

user1 user2 属于 group1 群组

user3 属于 group2 群组

mount 一个 ext3 档案系统至目录 /fs1

[root@unsvr root]#mount -t ext3 -o acl /dev/sda1 /fs1

ex:user1 想将他的档案分享给 group1 的人读写的权限.

user1 登入系统

[user1@unsvr user1]# cd /fs1

[user1@unsvr fs1]# echo "Create by group1's user1" > group1.txt

[user1@unsvr fs1]# chmod go-r user1.txt

[user1@unsvr fs1]# ll user1.txt

-rw------- 1 user1 user1 17 Jul 14 22:11 group1.txt

此时除了 user1 有读写的权限外没有其它人有读写 user1.txt 的权限(root 除外)

user2 登入系统

[user2@unsvr user2]# cd /fs1

[user2@unsvr fs1]# cat group1.txt

cat : group1.txt Permission denied

user1 登入系统

[user1@unsvr fs1]# setfacl -m g:group1:rw user1.txt

设定 group1 有权限读写这个档案.

note:

看一下他的档案属性变化

[user1@unsvr fs1]# ll

-rw-rw-r--+ 1 user1 user1 10 Feb 16 13:52 group1.txt

你会看到后面多了一个 "+" 表示这个档案有使用 ACL 的属性设定

再用指令 getfacl 来看 ACL 的档案属性设定为何

[user1@unsvr fs1]# getfacl group1.txt

# file: group1.txt

# owner: user1

# group: user1

user::rw-

group::rw-

group1:group1:rw-

mask::rw-

other::---

可以看到 group1 群组的人有权限读写这个档案.

user2 登入系统

[user2@unsvr user2]# cd /fs1

[user2@unsvr fs1]# cat group1.txt

Create by group1's user1

user2(group1 群组的人包括 user1 user2) 可以读取 group1.txt 档案了

[user2@unsvr fs1]# echo "Modify by group1's user2" >> group1.txt

[user2@unsvr fs1]# cat group1.txt

Create by group1's user1

Modify by group1's user2

user2(group1 群组的人包括 user1 user2) 也可以修改 group1.txt 档案了

user3 登入系统

[user3@unsvr user3]# cd /fs1

[user3@unsvr fs1]# cat group1.txt

cat : group1.txt Permission denied

除了 user1,user2(group1 群组的人包括 user1 user2) 外没有其它人有读写 group1.txt 的权限(root 除外)

3. effective mask 的权限.

这时 user1 想将刚才的权限暂时移除,就可以用下面的方式来设定

[user1@unsvr fs1]# setfacl -m m:--- user1.txt

[user1@unsvr fs1]# getfacl user1.txt

# file: user1.txt

# owner: user1

# group: user1

user::rw-

user:user2:rw- #effective:---

group::rw- #effective:---

mask::---

other::---

[user1@unsvr fs1]# setfacl -m m:--- group1.txt

[user1@unsvr fs1]# getfacl group1.txt

# file: group1.txt

# owner: user1

# group: user1

user::rw-

group::rw- #effective:---

group1:group1:rw- #effective:---

mask::rw-

other::---

这种 effective mask 的设定会影响到个别的使用者,群组,和使用者群组.

4.其它的使用者的权限设定

[user1@unsvr fs1]#setfacl -m o:rw user1.txt

他的设定就如同下面的一般权限设定

[user1@unsvr fs1]# chmod o+rw user1.txt

目录权限的设定

对目录而言:

可读(r):对目录而言单独有此权限是没有用的,还要同时有x的权限.才能有 ls 读取目录的内容.

可写(w): 对目录而言单独有此权限是没有用的,还要同时有x的权限.才能有cp,move,touch目录内的档案.

可执行(x): 具有 cd (change directory)进入目录的权限

所以我们要针对 x 的权限来搭配 rw 使用

root 登入系统

[root@unsvr root]#adduser user1

[root@unsvr root]#adduser user2

[root@unsvr root]#passwd user1

[root@unsvr root]#passwd user2

mount 一个 ext3 档案系统至目录 /fs1

[root@unsvr root]#mkdir /fs1

[root@unsvr root]#mount -t ext3 -o acl /dev/sda1 /fs1

[root@unsvr root]#chmod o-rwx /fs1

不希望所有的使用者都能进入目录,新增档案等的权限

ex:/fs1 目录开放进入读写的权限给 user1

root 登入系统

[root@unsvr root]#setfacl -m u:user1:rwx /fs1

[root@unsvr root]#getfacl /fs1

# file: fs1

# owner: root

# group: root

user::rwx

user:user1:rwx

group::---

mask::--x

other::---

user1 登入系统

[user1@unsvr user1]# cd /fs1

[user1@unsvr fs1]# echo "Create by user1" > user1.txt

[user1@unsvr fs1]# ll user1.txt

-rw------- 1 user1 user1 17 Jul 14 22:11 user1.txt

此时除了 user1 有进入目录,读写档案的权限外没有其它人有进入目录,读写档案的权限

user2 登入系统

[user2@unsvr user2]# cd /fs1

-bash:cd /fs1 :Permission denied

只有 user1 有进入目录读写档案的权限

Step3:预设的 ACLs 权限

通常在建立档案的时候,预设的权限是决定在 umask (umask 定义在 /etc/bashrc),而 umask 只能依据特权使用者(root 的umask 为022,)或者非特权使用者(非特权使用者为002)来限定,无法依据目录来设定.而 ACL 可以针对目录来设定预设权限.

ex:将目录 /fs1 的预设权限设定成只有 user 本身能读写执行(rwx).

[root@unsvr fs1]#setfacl -d -m u::rwx /fs1

[root@unsvr fs1]#setfacl -d -m g::0 /fs1

[root@unsvr fs1]#setfacl -d -m o::0 /fs1

[root@unsvr fs1]#getfacl /fs1

# file: fs1

# owner: root

# group: root

user::rwx

group::r-x

other::r-x

default:user::rwx

default:group::---

default:other::---

可以看到 default 的权限已经变了,现在来建立一个档案看看

[root@unsvr fs1]#echo "default perms" > default.txt

[root@unsvr fs1]#ll

-rw--------- 1 root root 15 Jul 27 10:53 root.default

可以看到权限真的只有 user 本身有 rw 的权限,那 x 怎么不见了,那是因为 root.default 并不是一个执行档.

Step4:ACL 的权限移除

如果要将刚才练习的 acl 权限移除时,可以用下面指令来移除

[user1@unsvr fs1]# getfacl user1.txt

# file: user1.txt

# owner: user1

# group: user1

user::rw-

user:user2:rw-

group::rw-

mask::rw-

other::r--

可以看到 user2 有权限读写这个档案.

[user1@unsvr fs1]#setfacl -x u:user2 user1.txt

[user1@unsvr fs1]# getfacl user1.txt

# file: user1.txt

# owner: user1

# group: user1

user::rw-

group::rw-

mask::rw-

other::r--

可以看到 user2 的权限已经移除了.

Step5:其它范例

1.Copying the ACL of one file to another

#getfacl file1 | setfacl --set-file=- file2

2.Copying the access ACL into the Default ACL

#getfacl -a dir | setfacl -d -M -dir

Step6:setfacl 的参数使用方式

#setfacl [-bkndRLP] { -m|-M|-x|-X ...} file ...

{ -m|-M|-x|-X ...} 使用方式

#setfacl -m (rules) (files)

-m 代表是要 modify 权限设定

#setfacl -x (rules) (files)

-x 代表要 remove 权限设定

rules 的使用方式可以分成下列几种格式

u:(uid):(perms)

依使用者来设定来设定权限

g:(gid):(perms)

依群组来设定来设定权限

m:(perms)

依 effective mask 来设定来设定权限

o:(perms)

依其它来设定来设定权限

针对 other group 来设定权限

[-bkndRLP..] 参数使用方式

-b , --remove-all

Remove all extended ACL entries

-k, --remove-default

Remove the Default ACL.

-n , --no-mask

Do not recalculate the effective rights mask

--mask

Do recalculate the effective rights mask

-d, --default

All operations apply to the Default ACL.

--restore=file

Restore a permission backup created by 'getfacl -R' or similar.

--test

Test mode

-R, --recursive

Apply operations to all files and directories recursively.

-L, --logical

Logical walk,follow symbolic links

-P, --physical

Physical walk,skip all symbolic links.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有