linux命令 chattr、setfacl

chattr

可以修改文件的相关属性,该指令在Ext2/Ext3/Ext4完整生效, 其他的文件系统可能无法完整的支持这个指令。

chattr

+ :增加某一个特殊参数,其他原本存在参数则不动。
- :移除某一个特殊参数,其他原本存在参数则不动。
= :设置一定,且仅有后面接的参数
-R  Recursively change attributes of directories and their contents

A :若你有存取此文件( 或目录) 时,他的存取时间 atime 将不会被修改,
S :当你进行任何文件的修改,该更动会“同步”写入磁盘中。
a :当设置 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root 才能设置这属性
c :这个属性设置之后,将会自动的将此文件“压缩”,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存
d :当 dump 程序被执行的时候,设置 d 属性将可使该文件( 或目录) 不会被 dump 备份
i :他可以让一个文件“不能被删除、改名、设置链接也无法写入或新增数据!”只有 root 能设置此属性
s :如果这个文件被删除,他将会被完全的移除出这个硬盘空间,
u :如果该文件被删除了,则数据内容其实还存在磁盘中,可以使用来救援该文件喔!

e:该文件在磁盘块映射上使用了extents,不一定能被chattr 移除。文件系统底层的概念,有兴趣的可以查看相关文档。
[root@izj6cfw9yi1iqoik31tqbgz c]# chattr +i tmp.txt 
[root@izj6cfw9yi1iqoik31tqbgz c]# lsattr
----i--------e-- ./tmp.txt
[root@izj6cfw9yi1iqoik31tqbgz c]# rm tmp.txt 
rm: remove regular empty file ‘tmp.txt’? y
rm: cannot remove ‘tmp.txt’: Operation not permitted
[root@izj6cfw9yi1iqoik31tqbgz c]# chattr -i tmp.txt 
[root@izj6cfw9yi1iqoik31tqbgz c]# rm tmp.txt 
rm: remove regular empty file ‘tmp.txt’? y

lsattr 列出文件属性

lsattr

-a :将隐藏文件的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
-R :连同子目录的数据也一并列出来!


setfacl

设置文件访问控制列表,也就是在原来的基础上增加对文件的权限更加精细的控制

setfacl

-m :设置后续的 acl 参数给文件使用,不可与 -x 合用
-x :删除后续的 acl 参数,不可与 -m 合用
-b :移除“所有的” ACL 设置参数  brush
-k :移除“默认的” ACL 参数,关于所谓的“默认”参数于后续范例中介绍
-R :递回设置 acl ,亦即包括次目录都会被设置起来
-d :继承 设置“默认 acl 参数”的意思!只对目录有效,在该目录新建的数据会引用此默认值

-n,--no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定。 
--mask/m:重新计算有效权限,即使ACL mask被明确指定。
[root@izj6cfw9yi1iqoik31tqbgz c]# ll
total 4
drwxr-xr-x 2 root root 4096 Jul  2 10:28 freecls
-rw-r--r-- 1 root root    0 Jul  2 10:12 tmp.txt

#给nobody用户设置读写权限
setfacl -m u:nobody:rw tmp.txt
[root@izj6cfw9yi1iqoik31tqbgz c]# getfacl tmp.txt 
# file: tmp.txt
# owner: root
# group: root
user::rw-
user:nobody:rw-
group::r--
mask::rw-
other::r--

#这里mask代表有效权限,上面显示只有rw有效,就算设置了x执行权限也是不生效的,我们可以修改有效权限遮罩。
[root@izj6cfw9yi1iqoik31tqbgz c]# setfacl -m m:rwx tmp.txt 
[root@izj6cfw9yi1iqoik31tqbgz c]# getfacl tmp.txt 
# file: tmp.txt
# owner: root
# group: root
user::rw-
user:nobody:rw-
group::r--
mask::rwx
other::r--

如果我们要对目录设置,并希望目录里新建的文件都能继承设置的属性,可以使用如下指令设置默认权限控制。

[root@izj6cfw9yi1iqoik31tqbgz c]# ll
total 4
drwxr-xr-x  2 root root 4096 Jul  2 10:28 freecls
-rw-rwxr--+ 1 root root    0 Jul  2 10:12 tmp.txt

[root@izj6cfw9yi1iqoik31tqbgz c]# setfacl -d -m u:nobody:rw freecls
[root@izj6cfw9yi1iqoik31tqbgz c]# getfacl freecls
# file: freecls
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:nobody:rw-
default:group::r-x
default:mask::rwx
default:other::r-x
[root@izj6cfw9yi1iqoik31tqbgz c]# touch freecls/a.txt
[root@izj6cfw9yi1iqoik31tqbgz c]# getfacl freecls/a.txt 
# file: freecls/a.txt
# owner: root
# group: root
user::rw-
user:nobody:rw-
group::r-x			#effective:r-- 代表只有 r 生效
mask::rw-
other::r--
[root@izj6cfw9yi1iqoik31tqbgz c]# setfacl -m m:rwx freecls
[root@izj6cfw9yi1iqoik31tqbgz c]# setfacl -d -m u:nobody:rw freecls
[root@izj6cfw9yi1iqoik31tqbgz c]# getfacl freecls
# file: freecls
# owner: root
# group: root
user::rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:nobody:rw-
default:group::r-x
default:mask::rwx
default:other::r-x
[root@izj6cfw9yi1iqoik31tqbgz c]# mkdir freecls/dir1
[root@izj6cfw9yi1iqoik31tqbgz c]# getfacl freecls/dir1
# file: freecls/dir1
# owner: root
# group: root
user::rwx
user:nobody:rw-
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:nobody:rw-
default:group::r-x
default:mask::rwx
default:other::r-x

设置 nobody 用户无法使用该目录(删除所有权限)

[root@izj6cfw9yi1iqoik31tqbgz c]# setfacl -m u:nobody:- freecls
[root@izj6cfw9yi1iqoik31tqbgz c]# getfacl freecls
# file: freecls
# owner: root
# group: root
user::rwx
user:nobody:---
group::r-x
mask::r-x
other::r-x
default:user::rwx
default:user:nobody:rw-
default:group::r-x
default:mask::rwx
default:other::r-x
递归移除所有acl
setfacl -b -R freecls

#移除特定的acl
setfacl -x u:nobody tmp.txt
上一篇: linux用户相关命令
下一篇: linux文件对比及打补丁diff、patch
作者邮箱: 203328517@qq.com