linux命令 chattr、setfacl

2018-07-02 11:01:51

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


备注:
1.本系列命令都在centos7里测试,其他发行版如ubuntu、debian、fedora、opensuse等可能略微不同
2.本文只讲解常用用法,详细用法请自行利用 man 命令查看
3.原文地址http://www.freecls.com/a/2712/6a

 

©著作权归作者所有
收藏
推荐阅读
  • linux用户相关命令

    用户相关#新增用户 freecls 并指定组名,家目录和登录shell useradd -g groupname -d /home/freecls -s /sbin/nologin freecls ...

  • err
    linux逻辑卷管理员命令-lvm

    想要了解逻辑卷lvm相关知识请参考逻辑卷轴管理员LVM (Logical Volume Manager),这里讲解实例。第一步创建PV,指令如下pvcreate :将实...

  • linux软件磁盘阵列命令-mdadm

    linux环境下可以用mdadm来创建软件磁盘阵列,磁盘阵列相关知识请参考文章磁盘阵列[root@study ~]# mdadm --detail /dev/md0 [root@study ~]# m...

  • linux命令系列-fuser,lsof,pidof

    fuser 可以借由文件(或文件系统) 找出正在使用该文件的程序。有的时候我想要知道我的程序到底在这次启动过程中打开了多少文件,可以利用 fuser 来观察啦! 举例来说,你如果卸载时发现系统通知:“...

  • linux备份命令-cpio

    cpio可以备份任何东西,包括设备设备文件。不过cpio 不会主动的去找文件来备份!一般来说, cpio 得要 配合类似 find 等可以找到文件名的指令来告知 cpio 该被备份的数据在哪里。[ro...

  • nginx模块 ngx_http_headers_module

    ngx_http_headers_module 模块是用来增加 Expires 和 Cache-control,或者是任意的响应头。Syntax: add_header name value [alw...

  • nginx模块 ngx_http_gunzip_module、ngx_http_gzip_module、ngx_http_gzip_static_module

    ngx_http_gunzip_module 模块将文件解压缩后并在响应头加上 "Content-Encoding: gzip" 返回给客户端。为了解决客户端不支持gzip压缩。编译的时候带上 --w...

  • nginx模块 ngx_http_flv_module、ngx_http_mp4_module

    ngx_http_flv_module模块提供了对 flv 视频的伪流支持。编译的时候带上 --with-http_flv_module。它会根据指定的 start 参数来指定跳过多少字节,并在返回数...

  • nginx模块 ngx_http_fastcgi_module

    ngx_http_fastcgi_module 模块使得nginx可以与 fastcgi 服务器通信。比如目前要使得 nginx 支持 php 就得使用 fastcgi技术,在服务器上装上 nginx...

  • nginx模块 ngx_http_autoindex_module

    ngx_http_autoindex_module 模块可以将uri以 / 结尾时,列出里面的文件和目录。Syntax: autoindex on | off; Default: autoindex ...

简介
天降大任于斯人也,必先苦其心志。