本文是Linux Shell脚本系列教程的第(四)篇,更多shell教程请看:Linux Shell脚本系列教程 与许多的编程语言一样,Shell中也有注释符号,继上一篇之后,今天就为大家来介绍下Shell中的注释的语法及用法。 Shell中的注释以“#”号开头,所有以“#”号开头的代码都会被解释器所忽略。 比如下面的代码: #!/bin/bash # Author…
Linux: chattr 、lsattr 命令详解, 防止文件被删除, 添加修改文件属性, 禁止删除或只能追加内容
有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了。chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的linux系统都是2.6以上内核了。通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。lsattr命令是显示chattr命令设置的文件属性。
什么?文件还有隐藏属性?光是那九个权限就快要疯掉了,竟然还有隐藏属性,真是要命~ 但是没办法,就是有文件的隐藏属性存在啊!不过,这些隐藏的属性确实对於系统有很大的帮助的~ 尤其是在系统安全 (Security) 上面,重要的紧呢!不过要先强调的是,底下的chattr命令只能在Ext2/Ext3的文件系统上面生效, 其他的文件系统可能就无法支持这个命令了。底下我们就来谈一谈如何配置与检查这些隐藏的属性吧!
这两个命令是用来查看和改变文件、目录属性的,与chmod这个命令相比,chmod只是改变文件的读写、执行权限,更底层的属性控制是由chattr来改变的。
chattr 命令
chattr – 改变 Linux 文件系统中的文件属性(change file attributes on a Linux file system)
命令用法:
chattr [ -RVf ] [ -v version ] [ mode ] files... -R 递归处理,将指定目录下的所有文件及子目录一并处理。 -V 显示指令执行过程以及展示当前 chattr 的版本号。 -f Suppress most error messages -v<版本编号> 设置文件或目录版本。 mode 格式为 +-=[acdeijstuACDST] +<属性> 文件或目录的该项属性。 -<属性> 关闭文件或目录的该项属性。 =<属性> 指定文件或目录的属性。
mode 常用属性
a: append only; 系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。 c: compressed; 系统以透明的方式压缩这个文件。从这个文件读取时,返回的是解压之后的数据;而向这个文件中写入数据时,数据首先被压缩之后才写入磁盘。 d: no dump; 在进行文件系统备份时,dump程序将忽略这个文件。 i: immutable; 系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。 j: data journalling; 如果一个文件设置了该属性,那么它所有的数据在写入文件本身之前,写入到ext3文件系统日志中,如果该文件系统挂载的时候使用了”data=ordered” 或”data=writeback”选项。当文件系统采用”data=journal”选项挂载时,所有文件数据已经记录日志,因此这个属性不起作用。仅仅超级用户或者拥有CAP_SYS_RESOURCE能力的进程可以设置和删除该属性。 s: secure deletion; 让系统在删除这个文件时,使用0填充文件所在的区域。 t: no tail-merging; 和其他文件合并时,该文件的末尾不会有部分块碎片(为支持尾部合并的文件系统使用)。 u: undeletable; 当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件。 A: no atime updates; 告诉系统不要修改对这个文件的最后访问时间 D: synchronous directory updates; 任何改变将同步到磁盘;这等价于mount命令中的dirsync选项: S: synchronous updates; 一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。 T: top of directory hierarchy; 如果一个目录设置了该属性,它将被视为目录结构的顶极目录
不能被修改的属性:
# 以下文件属性不能被修改,但是可以通过 lsattr 命令查看 h: huge file E: compression error I: indexed directory X: compression raw access Z: compressed dirty file
使用限制:
1. 属性 c,s,u 在当前的ext2, ext3文件系统是不能使用的 2. 选项 j 只对 ext3 文件系统有效 3. 选项 D 在 Linux kernel 2.5.19以上才有效
这个命令是很重要的,尤其是在系统的数据安全上面!由於这些属性是隐藏的性质,所以需要以 lsattr 才能看到该属性呦!其中,个人认为最重要的当属 +i 与 +a 这个属性了。+i 可以让一个文件无法被更动,对於需要强烈的系统安全的人来说, 真是相当的重要的!里头还有相当多的属性是需要 root 才能配置的呢!
lsattr 命令 (显示文件隐藏属性)
lsattr — 列出 Linux 第二扩展文件系统上文件属性( list file attributes on a Linux second extended file system)
命令用法:
lsattr [ -RVadv ] [ files... ] -R: 递归处理,将指定目录下的所有文件及子目录一并处理 -V 显示当前 lsattr 的版本号。 -a: 显示所有文件和目录,包括隐藏文件 -d: 显示目录名称 -v: 显示文件或目录版本
[root@www ~]# lsattr [-adR] 文件或目录 选项与参数: -a :将隐藏档的属性也秀出来; -d :如果接的是目录,仅列出目录本身的属性而非目录内的档名; -R :连同子目录的数据也一并列出来! [root@www tmp]# chattr +aij attrtest [root@www tmp]# lsattr attrtest ----ia---j--- attrtest
应用举例:
1、用chattr命令防止系统中某个关键文件被修改:
chattr +i /etc/resolv.conf
然后用mv /etc/resolv.conf等命令操作于该文件,都是得到Operation not permitted 的结果。vim编辑该文件时会提示W10: Warning: Changing a readonly file错误。要想修改此文件就要把i属性去掉: chattr -i /etc/resolv.conf
# lsattr /etc/resolv.conf
会显示如下属性
----i-------- /etc/resolv.conf
2、让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:
chattr +a /var/log/messages
3、请尝试到/tmp底下创建文件,并加入 i 的参数,尝试删除看看。
[root@www ~]# cd /tmp [root@www tmp]# touch attrtest <==创建一个空文件 [root@www tmp]# chattr +i attrtest <==给予 i 的属性 [root@www tmp]# rm attrtest <==尝试删除看看 rm: remove write-protected regular empty file `attrtest'? y rm: cannot remove `attrtest': Operation not permitted <==操作不许可 # 看到了吗?呼呼!连 root 也没有办法将这个文件删除呢!赶紧解除配置!
4、请将该文件的 i 属性取消!
[root@www tmp]# chattr -i attrtest
使用 chattr 配置后,可以利用 lsattr 来查阅隐藏的属性。不过, 这两个命令在使用上必须要特别小心,否则会造成很大的困扰。例如:某天你心情好,突然将 /etc/shadow 这个重要的密码记录文件给他配置成为具有 i 的属性,那么过了若干天之后, 你突然要新增使用者,却一直无法新增!别怀疑,赶快去将 i 的属性拿掉吧!
本文:Linux: chattr 、lsattr 命令详解, 防止文件被删除, 添加文件属性, 禁止删除或只能追加内容