[关闭]
@gy-ban 2017-06-04T07:33:22.000000Z 字数 2186 阅读 498

linux 隐藏权限

linux


前言

Linux中除了我们熟悉的读写执行那9个权限位之外,还有一些隐藏权限和特殊属性,平常可能很少用到,但是作用却是非常大,尤其在系统安全方面。
除了基本r, w, x权限外,在Linux传统的Ext2/Ext3/Ext4文件系统下,我们还可以设置其他的系统隐藏属性,最重要的属性就是可以设置其不可修改的特性!让连文件的拥有者都不能进行修改! 这个属性可是相当重要的,尤其是在安全机制上面 (security)!比较可惜的是,在 CentOS 7.x 当中利用 xfs 作为默认文件系统, 但是 xfs 就没有支持所有的 chattr 的参数了!仅有部份参数还有支持而已!
有两个命令 lsattr 和 chattr 用来管理属性

chattr 命令

chattr - 改变 Linux 文件系统中的文件属性(change file attributes on a Linux file system)

  1. chattr [ -RVf ] [ -v version ] [ mode ] files...
  2. -R 递归处理,将指定目录下的所有文件及子目录一并处理。
  3. -V 显示指令执行过程以及展示当前 chattr 的版本号。
  4. -f Suppress most error messages
  5. -v<版本编号> 设置文件或目录版本。
  6. mode 格式为 +-=[acdeijstuACDST]
  7. +<属性> 文件或目录的该项属性。
  8. -<属性> 关闭文件或目录的该项属性。
  9. =<属性> 指定文件或目录的属性。

mode 常用属性

  1. a: append only; 系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
  2. c: compressed; 系统以透明的方式压缩这个文件。从这个文件读取时,返回的是解压之后的数据;而向这个文件中写入数据时,数据首先被压缩之后才写入磁盘。
  3. d: no dump; 在进行文件系统备份时,dump程序将忽略这个文件。
  4. i: immutable; 系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。j: data journalling; 如果一个文件设置了该属性,那么它所有的数据在写入文件本身之前,写入到ext3文件系统日志中,如果该文件系统挂载的时候使用了”data=ordered 或”data=writeback”选项。当文件系统采用”data=journal”选项挂载时,所有文件数据已经记录日志,因此这个属性不起作用。仅仅超级用户或者拥有CAP_SYS_RESOURCE能力的进程可以设置和删除该属性。
  5. s: secure deletion; 让系统在删除这个文件时,使用0填充文件所在的区域。
  6. t: no tail-merging; 和其他文件合并时,该文件的末尾不会有部分块碎片(为支持尾部合并的文件系统使用)。
  7. u: undeletable; 当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件。
  8. A: no atime updates; 告诉系统不要修改对这个文件的最后访问时间
  9. D: synchronous directory updates; 任何改变将同步到磁盘;这等价于mount命令中的dirsync选项:
  10. S: synchronous updates; 一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。
  11. T: top of directory hierarchy; 如果一个目录设置了该属性,它将被视为目录结构的顶极目录

使用限制:

  1. 1. 属性 csu 在当前的ext2, ext3文件系统是不能使用的
  2. 2. 选项 j 只对 ext3 文件系统有效
  3. 3. 选项 D Linux kernel 2.5.19以上才有效

lsattr 命令

lsattr -- 列出 Linux 第二扩展文件系统上文件属性( list file attributes on a Linux second extended file system)
命令用法:

  1. lsattr [ -RVadv ] [ files... ]
  2. -R: 递归处理,将指定目录下的所有文件及子目录一并处理
  3. -V 显示当前 lsattr 的版本号。
  4. -a: 显示所有文件和目录,包括隐藏文件
  5. -d: 显示目录名称
  6. -v: 显示文件或目录版本

实例

1、防止系统关键文件被修改

  1. [root@gy-vm02 ~]# chattr +i /etc/resolv.conf
  2. [root@gy-vm02 ~]# lsattr /etc/resolv.conf
  3. ----i--------e- /etc/resolv.conf

此时我们对该文件进行mv操作

  1. [root@gy-vm02 ~]# mv /etc/resolv.conf .
  2. mv: cannot move `/etc/resolv.conf' to `./resolv.conf': Operation not permitted

即使是root也没有权限
编辑该文件也会提示"/etc/resolv.conf" [readonly]
移除该属性

  1. [root@gy-vm02 ~]# chattr -i /etc/resolv.conf
  2. [root@gy-vm02 ~]# lsattr /etc/resolv.conf
  3. -------------e- /etc/resolv.conf

2、让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:
chattr +a /var/log/messages

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注