传统的Linux文件系统的权限控制是通过user、group、other与r(读)、w(写)、x(执行)的不同组合来实现的。随着应用的发展,这些权限组合已不能适应现时复杂的文件系统权限控制要求。例如,我们可能需把一个文件的读权限和写权限分别赋予两个不同的用户或一个用户和一个组这样的组合。传统的权限管理设置起来就力不从心了。为了解决这些问题,Linux开发出了一套新的文件系统权限管理方法,叫文件访问控制列表(Access Control Lists,ACL)。
要启用ACL,需内核提供ACL支持和安装ACL管理工具。现在的2.6内核都提供ACL支持,在编译内核时只要在file systems分支下,把Ext2 POSIX Access Control Lists或Ext3 POSIX Access Control Lists选中就可以了。用以下命令挂接硬盘启用文件系统ACL。
我们可把选项写到/etc/fstab文件中,在需启用acl的分区选项包含acl参数.
ACL有两种,一种是存取ACL(access ACLs),针对文件和目录设置访问控制列表。一种是默认ACL(default ACLs),只能针对目录设置。如果目录中的文件没有设置ACL,它就会使用该目录的默认ACL。要设置ACL,首先要安装管理工具,它们分别是getfacl和setfacl,在debian中只要安装acl软件包即可。
setfacl工具可为文件和目录ACL,命令格式如下:
#setfacl -m
#getfacl filename -->可查看文件的属性.
#getfacl -d filename -->可查看文件属主,属组.
#setfacl -m u:redhat:rw filename -->设置文件redhat用户可读写.
#setfacl -m g:groupname:rwx filename -->设置组对文件的权限.
#setfacl -x g:groupname filename -->取消这个组对此文件的所有权限.
#setfacl -R 递归.
#setfacl -m m:groupname:rx filename -->收回组的某些权限.
下面我们举例来说明...
在要使用分区的defaults后面加上acl,用逗号隔开,保存退出.
[root@station197 ~]# mount -o remount /home -->重新挂载一次.
[root@station197 ~]# useradd sandy
[root@station197 home]# cd /home;touch test.txt;ls -l
-rw-r--r-- 1 root root 0 Apr 6 10:22 test.txt
[root@station197 home]#getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
可以看到test.txt文件其他人具备只读的权限,不可修改.如果我们想让其他人修改可以使用chmod命令,这样的话所有的人都可以修改此文件,但是我们只想让sandy修改此文件,这时就要使用文件访问控制了...
[root@station197 home ]## su - sandy
[sandy@station197 ~]$ cd /home;vim test.txt -->发现你写入的数据根本无法保存,下面警告,warning: changing a readonly file,文件只读的,无法写入...
$ su -
[root@station197 ~]# setfacl -m u:sandy:rw /home/test.txt
[root@station197 home]# getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
user:sandy:rw-
group::r--
mask::rw-
other::r--
[root@station197 home]# su - sandy
[sandy@station197 ~]$ cd /home;ls -l test.txt
-rw-rw-r--+ 1 root root 8 Apr 6 10:48 test.txt
会发现文件权限上带个"+"这是setfacl特有是性质,凡是文件权限上带着这个符号的证明此文件使用过setfacl命令设置过.
[sandy@station197 home]$ vim test.txt -->发现sandy可以修改里面的数据了...而其他用户无法修改数据.这个我测试过,大家可以去试试...
如果不想让sandy用户修改文件了,我们也可以取消他的权限,使用-x选项...
[root@station197 ~]# setfacl -x u:sandy test.txt -->取消sandy用户对其文件的权限.当再次切换到sandy用户时,发现不能再往此文件中写入数据了.但是文件的权限上还保留有"+"这个符号...
我们也可以对组来进行文件访问控制,和用户文件设置步骤差不多,这儿就不再演示了,大家可以模仿着做下,如有疑问可给我留言,欢迎交流...
阅读(1980) | 评论(0) | 转发(0) |