Linux权限那些事儿(2)



  • 摘要:Linux的权限管理与Windows差异较大,很多Linux使用者难以系统的理 解,而权限的重要性不言而喻,本文通过案例式循序渐进的讲解,来为读者朋友们庖丁解牛。在《从ls命令开始》和《深入理解SetUID》文章中,笔者已经 分别讲解了rwx权限和特殊权限SetUID ,本文查缺补漏把剩下的权限一一剖析,期望网友能够看完这三篇文章后对Linux权限有一个整体的把握。
  • 标签:Linux  权限
  •  


三、 权限之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权限。


转载于:https://blog.51cto.com/mangodata/574327