Linux系统管理_ACL访问控制_Redhat Enterprise 5
概述:访问控制,当文件或目录的权限不能在完全满足访问控制的实现时,可以使用acl进行设置访问权限。
即,对一个文件或者目录设置个别(特殊)用户对其有操作的权限
ACL访问控制的作用:
1,对于程序来说,可以赋予某个用户对这个程序的acl访问控制,例如,单独为某个普通用户设置为对shutdown 命令有所有的权限。
2,对目录来说,具有acl访问控制权限,那么所有用户在此目录下建立的文档或目录将会自动继承该目录acl控制策略
注:
1,在安装系统的时候创建的磁盘分区具有acl的特性;(补充里面详解)
[root@localhost~]# tune2fs -l /dev/sda2 | grep acl
Default mount options: user_xattr acl
2,系统安装后所划分的磁盘分区默认不支持acl
3,可使用tune2fs-l /dev/sdb1 | grep acl来查看一个文件系统是否支持acl
如果支持,则会有相应的输出信息,如上面的1所示的输出内容,如果不支持,则
表示不支持。
4,tune2fs -l命令只能查看安装系统时候所划分的文件系统是否支持acl,新建立的分区查看的时候只能用mount | grep 设备名(补充里面详解)
一:查看ACL控制策略
[root@localhost~]# df -h / //首先查看根目录的文件系统
文件系统容量已用 可用 已用% 挂载点
/dev/sda2 19G 2.3G 16G 13% /
[root@localhost~]# tune2fs -l /dev/sda2 | grep acl //查看/dev/sda2文件
//系统是否支持acl,可以看到输出结果中包含acl
Default mount options: user_xattr acl
[root@localhost~]# getfacl Desktop/ //查看Desktop的acl控制策略
# file: Desktop
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
[root@localhost~]#
注:默认情况下,未设置任何额外的acl策略。
二:定义ACL访问控制策略:setfacl
setfacl命令:
-格式:setfacl [选项] u:用户名:权限文件…
setfacl [选项] g:组名:权限文件…
选项有:
-m :定义一条acl策略
-x :清除指定的acl策略(补充里面详解)
-b :清除所有已设置的acl策略
-R :递归设置acl策略
-d :为目录设默认acl权限(子文档自动继承)
示例1:setfacl的-m选项
为/root设置acl策略,使user1具有rx权限
[root@localhost~]# getfacl /root/ //首先查看一下/root目录的acl权限
getfacl: Removing leading '/' from absolute path names
# file: root
# owner: root
# group: root
user::rwx
group::r-x
other::---
//可以看到,除了基本的权限之外,没有acl访问控制列表
[root@localhost~]# ll -d /root/
drwxr-x--- 17 root root 4096 02-18 21:43 /root/
[root@localhost~]# su - user1 //切换到user1用户,并尝试进入/root目录
[user1@localhost~]$ cd /root/
-bash: cd: /root/: 权限不够 //user1用户没有权限进入/root目录
[user1@localhost~]$ exit
logout
[root@localhost~]# setfacl -m user:user1:r-x /root
//给/root目录添加一条acl策略,使用户user1对/root目录具有r和x的权限。
[root@localhost/]# ll -d /root/
drwxr-x---+ 17 rootroot 4096 02-18 21:43 /root/
//可以看到,设置了acl策略的目录的权限位将会有一个“+”标示!!!文件也一样
[root@localhost~]# getfacl /root/ //查看/root目录的acl权限
getfacl: Removing leading '/' from absolute path names
# file: root
# owner: root
# group: root
user::rwx
user:user1:r-x //可以看到,这里有一条acl策略,user1具有r和x权限
group::r-x
mask::r-x
other::---
[root@localhost~]# su - user1 //再次切换到user1用户
[user1@localhost~]$ cd /root/ //可以看到,user1可以成功进入/root目录
[user1@localhostroot]$ ls
anaconda-ks.cfg Desktop file1.txt file2.txt install.log install.log.syslog
[user1@localhostroot]$ pwd
/root
[user1@localhostroot]$
示例2:setfacl的-d选项
创建一个目录/acltest,并设置权限为所有人具有所有权限
设置/acltest目录的acl权限为user1具有rwx
分别使用root用户和user2用户建立目录test1、test2以及文档file1.txt、file2.txt
查看test1、test2、file1.txt、file2.txt的acl策略。
具体操作:
[root@localhost~]# mkdir /acltest //创建/acltest目录
[root@localhost~]# chmod 777/acltest/ //设置权限为777
[root@localhost~]# getfacl /acltest/ //查看acl策略,这时没设置
getfacl: Removing leading '/' from absolute path names
# file: acltest
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
[root@localhost~]# setfacl -dm u:user1:rwx /acltest/
//为/acltest目录设置acl策略为用户user1具有rwx权限
//注:设置用户时候user可以缩写为u
[root@localhost~]# getfacl /acltest/
getfacl: Removing leading '/' from absolute path names
# file: acltest
# owner: root
# group: root
user::rwx
group::rwx
other::rwx
default:user::rwx
default:user:user1:rwx //默认的acl策略
default:group::r-x
default:mask::rwx
default:other::r-x
[root@localhost~]# mkdir /acltest/test1 //root用户建立test1目录
[root@localhost~]# touch /acltest/file1.txt //root用户的文件file1.txt
[root@localhost~]# su - user2
[user2@localhost~]$ mkdir /acltest/test2
[user2@localhost~]$ touch /acltest/file2.txt
[user2@localhost~]$ exit
logout
[root@localhost~]# getfacl /acltest/test* /acltest/file*
//查看test1、test2、file1.txt以及file2.txt的acl策略
getfacl: Removing leading '/' from absolute path names
# file: acltest/test1
# owner: root
# group: root
user::rwx
user:user1:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:user1:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
# file: acltest/test2
# owner: user2
# group: user2
user::rwx
user:user1:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:user1:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
# file: acltest/file1.txt
# owner: root
# group: root
user::rw-
user:user1:rwx #effective:rw-
group::r-x #effective:r--
mask::rw-
other::r--
# file: acltest/file2.txt
# owner: user2
# group: user2
user::rw-
user:user1:rwx #effective:rw-
group::r-x #effective:r--
mask::rw-
other::r--
[root@localhost~]#
示例三:清除所有acl控制策略
清空刚才对/root目录和/acltest目录设置的acl策略
[root@localhost~]# setfacl -b /acltest/ /root/
[root@localhost~]# getfacl /acltest/ /root/ | grep user1
//注:这里有一个提示,意思为从绝对路径中移除根目录
//也就是说,实际上是搜不到关于/root目录和/acltest目录关于acl策略的
//不适用该提示,直接cd到根目录下使用相对路径即可。
getfacl: Removing leading '/' from absolute path names
[root@localhost~]# getfacl /acltest/ | grep user1
getfacl: Removing leading '/' from absolute path names
[root@localhost~]# cd / //切换到根目录下
[root@localhost/]# getfacl acltest/
#file: acltest
#owner: root
#group: root
user::rwx
group::rwx
other::rwx
[root@localhost/]# getfacl acltest/ root/ | grep user1
//可以看到,关于对user1的策略已经清空了,这里无法查看到。
[root@localhost/]#
三:补充:
1,关于注释的第一和第四条
我新建了一个分区,格式化之后,将其挂载的时候设置为启用acl,这这时用
mount| grep 设备名可以看到是有acl支持的,但是用tune2fs不能看到
安装系统时的根目录是启用了acl的,使用tune2fs命令可以看到,但是用
mount| grep 设备名不可以看到有acl支持
具体操作:
[root@localhost/]# mount -o acl /dev/sda6 /data/sda6/
[root@localhost/]# mount | grep sda6
/dev/sda6on /data/sda6 type ext3 (rw,acl)
[root@localhost/]# tune2fs -l /dev/sda2 | grep acl
Defaultmount options: user_xattr acl
[root@localhost/]# df -h /
文件系统容量已用 可用 已用% 挂载点
/dev/sda2 19G 2.4G 16G 13% /
[root@localhost/]# tune2fs -l /dev/sda2 | grep acl
Defaultmount options: user_xattr acl
[root@localhost/]# mount | grep sda2
/dev/sda2on / type ext3 (rw)
2,关于对一个文件设置了acl策略的效果
思路:
使用user2在/acltest(/acltest是没有acl策略的)建立一个文件file2.txt
将其权限设置为只有所有者具有rw权限
使用setfacl指定一条策略为user1对file2.txt文件有可读写的权限
测试,user1是否能够修改该文件
[root@localhost/]# ll -d /acltest/
drwxrwxrwx4 root root 4096 02-20 23:53 /acltest/
[root@localhost/]# getfacl acltest/
#file: acltest
#owner: root
#group: root
user::rwx
group::rwx
other::rwx
[root@localhost/]# su - user2
[user2@localhost~]$ cd /acltest/
[user2@localhostacltest]$ touch file2.txt
[user2@localhostacltest]$ chmod 600 file2.txt
[user2@localhostacltest]$ ll file2.txt
-rw-------1 user2 user2 12 02-21 00:51 file2.txt
[user2@localhostacltest]$ echo user2 > file2.txt
[user2@localhostacltest]$ cat file2.txt
user2
[user2@localhostacltest]$ su - user1
口令:
[user1@localhost~]$ ls
[user1@localhost~]$ cd /acltest/
[user1@localhostacltest]$ ls
file2.txt
[user1@localhostacltest]$ echo user1 >> file2.txt
-bash:file2.txt: 权限不够
[user1@localhostacltest]$cat file2.txt
user2
[user2@localhostacltest]$ setfacl -m u:user1:rw- file2.txt
[user2@localhostacltest]$ getfacl file2.txt
# file: file2.txt
# owner: user2
# group: user2
user::rw-
user:user1:rw-
group::rw-
mask::rw-
other::r--
[user2@localhostacltest]$ su - user1
口令:
[user1@localhost~]$ ls
[user1@localhost~]$ cd /acltest/
[user1@localhostacltest]$ ls
file2.txt
[user1@localhostacltest]$ echo user1>>file2.txt
[user1@localhostacltest]$ cat file2.txt //这时user1有权限写入
user2
user1
[user1@localhostacltest]$
3,关于删除一条acl规则:setfacl的-x参数
思路:
为扩展2里面的user2创建的/acltest/file2.txt文件添加条规则
setfacl-m u:user3:rw- file2.txt
使得user3具有读写权限,
然后将user3的权限删除
具体操作:
[user2@localhostacltest]$ setfacl -m u:user3:rw- file2.txt
[user2@localhostacltest]$ getfacl file2.txt
#file: file2.txt
#owner: user2
#group: user2
user::rw-
user:user1:rw-
user:user3:rw- //现在有两条规则
group::---
mask::rw-
other::---
[user2@localhostacltest]$ su user3
//使用su use3的时候可在当前目录切换用户
//使用su - user3的时候会直接切换到user3的家目录
口令: //输入口令后当前用户将切换为user3,路径不变
[user3@localhostacltest]$ ls
file2.txt
[user3@localhostacltest]$ cat file2.txt
user2
user1
[user3@localhostacltest]$ echo user3 >> file2.txt
[user3@localhostacltest]$ cat file2.txt
user2
user1
user3
[user3@localhostacltest]$ exit
exit
[user2@localhostacltest]$ setfacl-x u:user3 file2.txt
//注:在百度百科里面搜索到的那个答案是错误的!!!
//-x选项后面不能接权限,只能写成-x u:用户名
[user2@localhostacltest]$ getfacl file2.txt
#file: file2.txt
#owner: user2
#group: user2
user::rw-
user:user1:rw- //user3的那条规则删除掉了
group::---
mask::rw-
other::---
[user2@localhostacltest]$
Linux系统管理_用户和用户组:http://murongqingqqq.blog.51cto.com/2902694/1360239
Linux系统管理_基本权限和归属:http://murongqingqqq.blog.51cto.com/2902694/1360265
Linux系统管理_附加控制权限:http://murongqingqqq.blog.51cto.com/2902694/1360874