Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1765229
  • 博文数量: 184
  • 博客积分: 10122
  • 博客等级: 上将
  • 技术积分: 5566
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-08 12:32
文章存档

2011年(1)

2008年(183)

我的朋友

分类: LINUX

2008-03-04 00:47:31

#问题 :模拟 ACL 的基本操作

[答案]

首先确认当前文件系统启用了 ACL 功能

[root@mail ~]# mount |grep acl  

/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw,acl)

/dev/hdb1 on /boot type ext3 (rw,acl)

[root@mail ~]#

[root@as7 t1]# touch file1

[root@as7 t1]# ll file1

-rw-r--r--  1 root root 0 Nov 18 20:45 file1

[root@as7 t1]# getfacl file1

# file: file1

# owner: root

# group: root

user::rw-

group::r--

other::r--

 

[root@as7 t1]#

[root@as7 t1]# ll /home

total 32

drwx------   4 bob    bob   4096 Oct 12 00:34 bob              # 注释 :使用它来测试

drwx------   4 guest  guest 4096 Apr 16  2006 guest

drwx------  20 n7css  n7css 4096 Oct 11 00:44 n7css           # 注释 :使用它来测试

drwx------  15 oracle dba   4096 May 10  2006 oracle

[root@as7 t1]

n7css@as7: /mnt/t1>whoami

n7css

n7css@as7: /mnt/t1>echo "ok" >> file1

-bash: file1: Permission denied                                           # 注释 :可以看到 n7css 用户不允许写该文件

n7css@as7: /mnt/t1>

现在使用 setfacl n7css 用户添加 w 权限

[root@mail tmp]# setfacl -m u:bob:rw file1

[root@mail tmp]#

[root@mail tmp]# getfacl file1

# file: file1

# owner: root

# group: root

user::rw-

user:bob:rw-                 # 注释 :现在 bob 用户具有对 file1 的写权限

group::r--

mask::rw-                    # 注释 mask 限制了最

other::r--

 

[root@mail tmp]#

[root@mail tmp]# ll file1

-rw-rw-r--+ 1 root root 0 Nov 18 22:57 file1        # 注释 :可以看到 + 就是表示有设置了ACL 条目

[root@mail tmp]#

现在尝试用 bob 用户的身份来修改文件 file1

[bob@mail tmp]$ whoami

bob

[bob@mail tmp]$ echo "ok" >> file1

[bob@mail tmp]$ cat file1

ok                                                                # 注释 :可以看到文件 file1 已经被修改了

[bob@mail tmp]$

[root@mail tmp]# setfacl -m u:bob:rwx file1

[root@mail tmp]# getfacl file1

# file: file1

# owner: root

# group: root

user::rw-

user:bob:rwx

group::r--

mask::rwx                                               

other::r--

 

[root@mail tmp]#

===============================================================================================

#问题 setfacl 中的 mask 条目有普通 mask default mask

[答案]

[root@mail RPMS]# ll -d subdir

drwxrwxr-x+ 2 root root 4096 Nov 22 22:48 subdir

[root@mail RPMS]#

[root@mail RPMS]# getfacl subdir

# file: subdir

# owner: root

# group: root

user::rwx

user:bob:rwx

group::r-x

mask::rwx

other::r-x

default:user::rwx

default:user:bob:rwx

default:group::r-x

default:mask::rwx

default:other::r-x

 

[root@mail RPMS]#

===============================================================================================

 #问题 default mask 的介绍

[答案]

[root@mail tmp]# setfacl -m d:u:bob:rwx RPMS/

[root@mail RPMS]# getfacl .

# file: .

# owner: bob

# group: bob

user::rwx

group::r-x

other::r-x

default:user::rwx

default:user:bob:rwx

default:group::r-x

default:mask::rwx

default:other::r-x

可以看到加上了 default ACL ,它不会在 access ACL 中添加条目。但子目录就不同了,见下面

[root@mail RPMS]#

[root@mail RPMS]# touch file

[root@mail RPMS]# getfacl file

# file: file

# owner: root

# group: root

user::rw-

user:bob:rwx                    #effective:rw-             # 注释

group::r-x                      #effective:r--

mask::rw-                                                                      # 注释 :可以看到 mask 变成了 rw-,而不是父目录的 rwx

other::r--

 

[root@mail RPMS]#

[root@mail RPMS]# mkdir subdir

[root@mail RPMS]# getfacl subdir

# file: subdir

# owner: root

# group: root

user::rwx

user:bob:rwx

group::r-x

mask::rwx

other::r-x

default:user::rwx

default:user:bob:rwx

default:group::r-x

default:mask::rwx

default:other::r-x

 

[root@mail RPMS]# ll -d subdir

drwxrwxr-x+ 2 root root 4096 Nov 22 22:48 subdir

[root@mail RPMS]#

[root@mail RPMS]# ll file

-rw-rw-r--+ 1 root root 0 Nov 22 22:48 file

[root@mail RPMS]#

===============================================================================================

 

#问题 setfacl 命令的用法

[答案]

      -1-b --remove-all :表示删除所有 ACL 条目,除了base acl 条目

      -2-k, --remove-default :删除 default ACL 条目。如果没有 default ACL 则什么都不做

      -3-n, --no-mask :不重新计算 mask 条目。setfacl 默认是会重新计算 MASK 条目,除非你明确指定了 Mask 条目的权限

                                   mask 条目用于设置所有者 group、所有 named user/group  的权限。

      -4--mask :重新计算 mask 条目,即使已经存在一个 mask 条目了

      -5-d, --default :设置 Default ACL 条目

      -6--restore=file :从指定文件恢复文件的 ACL 设置

      -7--test :测试

      -8-R, --recursive :递归操作

      -9-L, --logical :跟随 symbolic link

      -10-P, --physical :跳过所有 symbolic links

      -11--version :打印版本并退出

      -12-- :表示结束所有选项

      -13- :从 stdin 接受输入

      -14-m :修改当前文件的 ACL

             -M :从指定文件读取设置

      -15-x :删除某个 acl

             -X :从指定文件读取要删除的 ACL 条目

      -16--set= :替换当前文件的 ACL ,也就是先 -b -m

      -17--set-file= :从文件读取信息

===============================================================================================

 #问题 :什么是 Default ACL ?什么是Base ACL 条目

[答案]

Base ACL 条目就是指 getfacl 输出中蓝色的部分,它们是无法被删除的,它们就是 UNIX 的传统权限

[root@mail tmp]# getfacl file1

# file: file1

# owner: root

# group: root

user::rw-

user:bob:-w-

group::r--

group:bob:r--

mask::rw-

other::r--

 

[root@mail tmp]#

Default ACL 条目是针对一个目录所设置的,对文件无效。在该目录下创建的文件自动继承该目录的 Default ACL

Default ACL 一共有4 Default userDefault groupDefault maskDefault other

[root@mail tmp]# setfacl -m d:g:bob:rw file1

setfacl: file1: Only directories can have default ACLs

[root@mail tmp]#

[root@mail tmp]# setfacl -m d:g:bob:rw RPMS/

[root@mail tmp]#

[root@mail tmp]# getfacl RPMS

# file: RPMS

# owner: bob

# group: bob

user::rwx

group::r-x

other::r-x

default:user::rwx

default:group::r-x

default:group:bob:rw

default:mask::rwx

default:other::r-x

 

[root@mail tmp]#

可以看到该目录下文件的默认权限是 owner 有全部权限,同组的有 rx 权限、其他人(除了 bob 组的用户之外)也是 rx 权限

bob 组的用户有 rw 权限,但没有 x 权限

[root@mail tmp]# cd RPMS

[root@mail RPMS]# ll

total 0

[root@mail RPMS]# touch myfile

[root@mail RPMS]# ll myfile

-rw-rw-r--+ 1 root root 0 Nov 19 21:10 myfile

[root@mail RPMS]# getfacl myfile

# file: myfile

# owner: root

# group: root

user::rw-

group::r-x                      #effective:r--

group:bob:rw-

mask::rw-

other::r--

 

[root@mail RPMS]#

可以看到由于 mask 没有 x ,所以 group r-x 实际上只剩下 r 权限了。

===============================================================================================

 #问题 :如果改变了一个目录的 Default ACL ,该目录下的权限会自动修改吗?

[答案]

不会

[root@mail tmp]# setfacl -m d:g:bob:rwx RPMS/

[root@mail tmp]#

[root@mail tmp]# getfacl RPMS/

# file: RPMS

# owner: bob

# group: bob

user::rwx

group::r-x

other::r-x

default:user::rwx

default:group::r-x

default:group:bob:rwx

default:mask::rwx

default:other::r-x

 

[root@mail tmp]#

[root@mail tmp]# cd RPMS

[root@mail RPMS]# ll

total 4

-rw-rw-r--+ 1 root root 0 Nov 19 21:10 myfile

[root@mail RPMS]# getfacl myfile

# file: myfile

# owner: root

# group: root

user::rw-

group::r-x                      #effective:r--

group:bob:rw-

mask::rw-

other::r--

 

[root@mail RPMS]#

可以看到并不会自动更新

===============================================================================================

#问题 :同上,如何解决该问题?

[答案]

 

 

===============================================================================================

 #问题 ACL 条目的类型

[答案]

4 :可以看到格式是 [defaul]::[instance]:[perm],其中 [default] 是只对目录有效,如果用于文件会报错

[d[efault]:] [u[ser]:]uid [:perms]

       Permissions of a named user. Permissions of the file owner if uid is empty.

           # 注释 :用于设置用户的 basedefault、或者针对某个用户的设置

 

[d[efault]:] g[roup]:gid [:perms]

       Permissions of a named group. Permissions of the owning group if gid is empty.

           # 注释 :同上,但设置的是 group

 

[d[efault]:] m[ask][:] [:perms]

       Effective rights mask

# 注释 :设置 mask 或者默认 mask 条目。mask 是一个文件所的最高权限,如果说acl的优先级高于UGO,那么mask就是一个名副其实的最后一道防线。它决定了一个用户/组能够得到的最大的权限。这样我们在不破坏已有ACL的定义的基础上,可以临时提高或是降低安全级别:

 

[d[efault]:] o[ther][:] [:perms]

       Permissions of others.

           # 注释 :针对 other 的设置。

注意,在设置 mask other ACL 条目时,是不需要指定 uid / username 的,因为没有意义

===============================================================================================

问题 setfacl 的操作模式

[答案]

      -b :删除所有

      -m :修改某个现有条目,也可以已用于新增条目

      -x :删除某个现有条目

      -M / -X 通过文件操作

===============================================================================================

问题 setfacl 可以一次处理多个文件吗?

[答案]

可以。

[root@mail RPMS]# setfacl -m u:bob:rw file{1,2}

[root@mail RPMS]# ll file{1,2}

-rw-rw-r--+ 1 root root 0 Nov 19 21:49 file1

-rw-rw-r--+ 1 root root 0 Nov 19 21:49 file2

[root@mail RPMS]#

===============================================================================================

 

#问题 setfacl 如何一次指定多个 acl

[答案]

逗号隔开。例如 ,

[root@mail tmp]# setfacl -m u:bob:rwx,o:rw file1

[root@mail tmp]#

[root@mail tmp]# getfacl file1

# file: file1

# owner: root

# group: root

user::rw-

user:bob:rwx

group::r--

mask::rwx

other::rw-

 

[root@mail tmp]#

[root@mail tmp]# ll file1

-rw-rwxrw-+ 1 root root 0 Nov 19 21:44 file1

[root@mail tmp]# ./file1

[root@mail tmp]#

 

可以看到 file1 变成了有执行权限,因为 bob rwx 权限

===============================================================================================

 问题 setfacl -b 清除某个文件现有的 ACL

[答案]

[root@mail tmp]# getfacl file1

# file: file1

# owner: root

# group: root

user::rw-

user:bob:rw-

group::r--

mask::rw-

other::r--

 

[root@mail tmp]#

[root@mail tmp]# setfacl -b file1

[root@mail tmp]#

[root@mail tmp]# getfacl file1

# file: file1

# owner: root

# group: root

user::rw-

group::r--

other::r--

 

[root@mail tmp]#

可以看到关于 bob 用户的条目不见了,只剩下 usergroupother 三个 base ACL 条目

===============================================================================================

 问题 setfacl -b 可以用于目录下的所有文件吗?

[答案]

可以,用 -R 递归

[root@mail tmp]# ll RPMS/

total 12

-rw-r--r--+ 1 root root 0 Nov 19 21:49 file1

-rw-r--r--+ 1 root root 0 Nov 19 21:49 file2

-rw-r--r--+ 1 root root 0 Nov 19 21:49 file3

[root@mail tmp]#

[root@mail tmp]# setfacl -R -b RPMS/

[root@mail tmp]#

[root@mail tmp]# ll -d RPMS/ RPMS/*

drwxr-xr-x  2 bob  bob  73728 Nov 19 21:49 RPMS/

-rw-r--r--  1 root root     0 Nov 19 21:49 RPMS/file1

-rw-r--r--  1 root root     0 Nov 19 21:49 RPMS/file2

-rw-r--r--  1 root root     0 Nov 19 21:49 RPMS/file3

[root@mail tmp]#

可以看到 + 不见了

===============================================================================================

 

 #问题 setfacl 设置 mask 条目

[答案]

如果使用 setfacl 后多了某个权限是你不想要的,可以用 mask 屏蔽掉。

例如下面的 file1 就变成可执行的,但这是一个空文件,你不想然普通用户可以通过 ./file1 执行它

[root@mail tmp]# getfacl file1

# file: file1

# owner: root

# group: root

user::rw-

user:bob:rwx

group::r--

mask::rwx

other::rw-

 

[root@mail tmp]#

[root@mail tmp]# ll file1

-rw-rwxrw-+ 1 root root 0 Nov 19 21:44 file1

[root@mail tmp]# ./file1

[root@mail tmp]#

可以看到可以执行 file1

 

 

 

[root@mail tmp]# setfacl -m m:rw file1

[root@mail tmp]# getfacl file1

# file: file1

# owner: root

# group: root

user::rw-

user:bob:rwx                    #effective:rw- # 注释 :当实际权限小于设置权限时,就会显示 effective 行,表示 bob 实际上只有 rw 权限而已,没有 x 权限

group::r--

mask::rw-

other::rw-

 

[root@mail tmp]#

[root@mail tmp]# ll file1

-rw-rw-rw-+ 1 root root 0 Nov 19 21:44 file1       # 注释 :可以看到 group 部分不再显示 rwx 而是 rw-

可以看到 file1 不再具备执行权限了

[root@mail tmp]# su - bob

[bob@mail ~]$ cd /tmp

[bob@mail tmp]$ ./file1

-bash: ./file1: Permission denied                   # 注释 bob 用户不再具备 x 权限了

[bob@mail tmp]$

[root@mail tmp]# ./file1

-bash: ./file1: Permission denied

[root@mail tmp]# /tmp/file1

-bash: /tmp/file1: Permission denied

[root@mail tmp]# su - bob

[bob@mail ~]$ /tmp/file1

-bash: /tmp/file1: Permission denied

[bob@mail ~]$ cd /tmp/

[bob@mail tmp]$ ./file1

-bash: ./file1: Permission denied

[bob@mail tmp]$

 

===============================================================================================

#问题 ;如何通过 mask 条目计算实际权限?

[答案]

 

 

===============================================================================================

 #问题 :如何 mask 高于设置权限呢?例如 -m u:bob:rwm:rwx

[答案]

[root@mail tmp]# setfacl -m u:bob:rw,m:rwx file1       

[root@mail tmp]# getfacl file1

# file: file1

# owner: root

# group: root

user::rw-

user:bob:rw-

group::r--

mask::rwx

other::rw-

 

[root@mail tmp]#

[root@mail tmp]# ll file1

-rw-rwxrw-+ 1 root root 0 Nov 19 21:44 file1             # 注释 :可以看到 file1 group 是可执行的

[root@mail tmp]# /tmp/file1                                      # 注释 :可以看到 root (所有者)是可以执行该文件的

[root@mail tmp]# ./file1

[root@mail tmp]# su -l bob

[bob@mail ~]$ /tmp/file1

-bash: /tmp/file1: Permission denied                         # 注释 :但 bob 这个 other 却只能获得所设置的权限,无法执行

[bob@mail ~]$ cd /tmp/

[bob@mail tmp]$ ./file1

-bash: ./file1: Permission denied

[bob@mail tmp]$

 

==============================================================================================
阅读(1062) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~