三、 权限之chattr

chatrr只有超人root用户可以使用,用来修改文件的权限属性,建立凌驾于rwx基础权限之上的授权。

在此介绍两个常用选项:

a 只允许在文件后追加数据,如果目录具有此属性,系统将只允许在目录下建立和修

改文件,而不允许删除任何文件。

i 不允许对文件进行任何修改,如果目录具有此属性,那么只能修改目录下的文件,

不允许建立和删除文件。

案例一:无法删除和更改的文件

如果要建立一个公共访问的目录,大家都可以删除和创建、拷贝文件,但是有一个基本的使用此目录的规则,要建立一个说明文件README ,这个文件不允许大家删除和修改,则可以如下设置:

chattr +i README

这时,README文件所在目录所有用户都有读写权限,但是任何用户都无法删除README文件(包括root),尝试删除会提示:

rm README

rm: remove write-protected regular empty file `README'? y

rm: cannot remove `README': Operation not permitted

同样也不可以改变文件的内容,可以查看到README文件被增加了一个不可更改的属性:

lsattr README

----i-------- README

此时,README变成了一个非常牛XX的文件,即便你是SuperUser也无法删除和修改它,想对它干嘛都不成。

若要更改或删除文件也必须先去掉i属性才可以:

chattr -i README

案例二:备份目录应用

假设有这样一种应用,我们每天自动化实现把上海服务器的日志通过scp和rsync远程备份到北京的备份服务器上,备份服务器的存储目录可设置为只可创建文件而不可删除。

chattr +a /backup/log

设置后,可在本机测试:

cp /var/log/messages /backup/log # 可以拷贝文件

rm /backup/log/messages # 删除文件则被禁止

rm: remove regular file `messages'? y

rm: cannot remove `messages': Operation not permitted

chattr命令不宜对目录/、/dev、/tmp、/var等设置,严重者甚至容易导致系统无法启动,比如根目录如果设置了i属性,谨慎设置,看过此文试验后造成系统问题者,笔者概不负责……

四 权限之ACL

Linux中默认的权限管理比较菜,难以实现复杂的权限控制,如针对一个文件设置几个用户或用户组具有不同权限,这就需要依靠ACL(Access Control List)访问控制列表实现,可以针对任意指定的用户/用户组分配权限。

开启分区的ACL功能 ,需要在/etc/fstab文件中加入acl选项,如:

LABEL=/backup /backup ext3 defaults,acl 1 2

然后重新加载分区即可生效:

mount -o remount /backup

如果想临时生效可不修改/etc/fstab文件,直接执行命令“mount -o remount,acl /backup”即可。

案例:设定复杂权限控制目录

设定目录/backup/log用户zhangsan有读写执行权限,用户lisi有读权限,用户wangwu有读写权限,而用户组bakgroup有读和执行权限,则可做如下设置:

setfacl -m u:zhangsan:rwx,u:lisi:r,u:wangwu:rw,g:bakgroup:rx /backup/log

setfacl -m可以设置文件/目录的访问权限,至于权限设定的写法包括三个组成部分,第一部分列出设定对象是用户u或用户组g ;第二部分指定用户名或用户组名;第三部分指定访问权限rwx ,设定多组权限中间用逗号分隔。如“u:lisi:r”表示设定用户lisi为只读权限。

查看目录属性:

ls -ld /backup/log

drwxrwxr-x+ 2 root root 4096 May 25 07:16 /backup/log

会发现文件权限位后增加了一个加号,这说明/backup/log设置了ACL ,同时可以查看其详细的权限设置:

getfacl /backup/log

# file: backup/log

# owner: root

# group: root

user::rwx

user:zhangsan:rwx

user:lisi:r--

user:wangwu:rw-

group::r-x

group:bakgroup:r-x

mask::rwx

other::r-x

这样即可实现Linux中文件/目录的复杂权限控制,要注意的是ACL优先于基本权限设置,也就是说如果默认所属组为rx权限,但是ACL若指定了所属组中某个成员为rwx权限,则此成员拥有rwx权限。


相关内容