我们专注服务于当下互联网基础设施建设与云计算、大数据时代的各种需求!

linux文件系统高级权限属性

最近在cu论坛看见有同学在问,如何给一个目录设定root都不能删除的权限。

其实linux有高级权限,除了0777的权限位还有更高级的权限控制。在Linux下我们可以用lstat命令查看文件的相关属性信息,除了这些属性之外,Linux下的文件还有一些隐藏的属性,我们可以用lsattr命令来查看:

root@sklinux:/opt# lsattr
——a——e– ./src
如上面的a\e权限

上面这条命令的输出表示src文件具有扩展属性a和e,即只能向该文件添加数据,而不能删除,并且该文件使用extends来映射磁盘块。显然,将那些只允许增长但不允许修改和删除的文件设置为这样的隐藏属性是非常有利于保护数据安全的。

chattr
用chattr命令可以改变一个文件的隐藏属性。其语法格式为:

chattr [ -RVf ] [ -v version ] [ mode ] files…

下面给出几个选项的含义:

选项 含义
-R 递归更改目录下所有子目录和文件的属性
-V 显示详细信息
-f 忽略大部分错误信息
-v version 设置文件的档案号码
mode 设置文件的隐藏属性,其格式为+-=[acdeijstuACDST]
最关键的是在[mode]部分,[mode]部分的格式是+-=[acdeijstuACDST],这部分是用来设置文件的属性。其中+表示在原有参数设定基础上追加参数;-表示在原有参数设定基础上移除参数;=表示更新为指定参数。下面列出几个常用的属性参数的含义:

属性 含义
A 文件的atime(access time)不可被修改,这样可以减少磁盘I/O数量,对于笔记本电脑有利于提高续航能力

S 硬盘I/O同步选项,功能类似sync

a 即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性

i 文件不能被删除、改名、设定链接关系,同时不能写入或新增内容(即使是root用户)。只有root才能设定这个属性

c 即compresse,文件会自动的经压缩后再存储,读取时会自动的解压

d 即no dump,设定文件不能成为dump程序的备份目标

j 即journal,设定此参数使得当通过mount参数”data=ordered”或”data=writeback”挂载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为data=journal,则该参数自动失效

s 即secure,保密选项。设置了s属性的文件在被删除时,其所有数据块会被写入0

u 即undelete,反删除选项。与s相反,文件在被删除时,其所有的数据块都保留着,用户今后可以恢复该文件

例如这条命令,可以将sk目录下的文件设置为不允许任何人修改:

$ sudo chattr -R =i ~/sk
1
lsattr
用lsattr命令列出文件的隐藏属性。其语法格式为:

lsattr [ -RVadv ] [ files… ]

下面给出几个选项的含义:

选项 含义
-R 递归显示目录下所有子目录和文件的属性
-V 显示lsattr程序的版本信息
-a 显示所有文件的属性信息,包括以.开头的文件
-d 显示目录的属性,而不是目录下的文件的属性
-v 显示文件的档案号码
例如,下面这条命令显示sk目录的隐藏属性:

$ lsattr -Rd sk/
—-i———– sk/
———————