你所不知道Linux下的chattr命令

先简单介绍一下怎么和这个命令结缘的,在说明这个命令的用途。因本人公司要在一台Azure云服务器上搭建应用,此服务器是64位centos7.1的linux系统3.0以上内核。原由起初是无法使用XFTP等相关软件上传本地软件。配置sftp后重启服务然后reboot,一个reboot后无法使用CRT等ssh连接,立刻联系原厂解决,通过后台控制登陆进去,将之前搭建SFTP的配置文件/etc/ssh/sshd_config还原,重启sshd服务后可以正常连接;但是XFTP的问题还是依旧在,怎么办呢?通过查看XFTP日志以及secure日志初步判断在建立sftp会话后就出现问题。

Secure部分日志如下:

于是乎:跑去查看sftp-server这个文件,确实有很大发现,不知道之前长啥样,反正现在就长这样了:

看到/usr/libexec/openssh/sftp-server文件的权限变成了000,这样和默认的有出入啊,这就是无法建立sftp会话的原因。一看不对劲啊,这不合适,不要想着是谁干的了,就马上想到了chmod 775 sftp-server,立刻来一打这命令呗,可是出乎意料发现报错了,没有权限啊。怎么整?放大招呗,在Linux ext文件系统中,权限控制除了常规的chmod,还会有文件属性管理,故出现了chattr命令。

在linux系统中,内核在2.6以上的,均可执行此命令。通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。lsattr命令是显示chattr命令设置的文件属性。这两个命令是用来查看和改变文件、目录属性的,与chmod这个命令相比,chmod只是改变文件的读写、执行权限,更底层的属性控制是由chattr来改变的。

先来看看lsattr和chattr的man手册吧.

[root@JiekeXu~]# man lsattr

---------------------------LSATTR(1) LSATTR(1)

NAME

lsattr - listfileattributesona Linux second extendedfilesystemSYNOPSIS lsattr [ -RVadv ] [ files... ]DESCRIPTION lsattr lists thefileattributesona second extendedfilesystem. See chattr(1)fora descriptionofthe attributesandwhat they mean.OPTIONS -R Recursively list attributesofdirectoriesandtheir contents. -V Display the program version. -a Listallfilesindirectories, including files that startwith‘.’. -d List directories like other files, rather than listing their contents. -v List thefile’s version/generation number.AUTHOR lsattr was written by Remy Card . Itiscurrently being maintained by Theodore Ts’o .BUGS There are none :-).AVAILABILITY lsattrispartofthe e2fsprogspackageandisavailable from http://e2fsprogs.sourceforge.net.

[root@JieKuXu etc]# man chattr

------------------------------CHATTR(1) General Commands Manual CHATTR(1)NAME chattr - changefileattributesona LinuxfilesystemSYNOPSIS chattr [ -RVf ] [ -v version ] [ mode ] files...DESCRIPTION chattr changes thefileattributesona Linuxfilesystem. The formatofa symbolic modeis+-=[aAcCdDeijsStTu]. The operator '+' causes the selected attributestobe addedtothe existing attributesofthe files;'-'causes themtobe removed;andThe letters'aAcCdDeijsStTu'selectthenewattributesforthe files: append only (a), no atime updates (A), compressed (c), no copyonwrite (C), no dump (d), synchronous directory updates (D), extent format (e), immutable (i), data journalling (j), secure deletion (s), synchronous updates (S), no tail-merging (t), topofdirectory hierarchy (T),andundeletable (u). The following attributes are read-only,andmay be listed by lsattr(1) butnotmodified by chattr: compression error (E), hugefile(h), indexed directory (I), inline data (N), compression rawaccess(X),andcompressed dirtyfile(Z).Notallflags are supportedorutilized byallfilesystems; refertofilesystem-specific man pages such as btrfs(5), ext4(5),andxfs(5)formore filesystem-specific details.

OPTIONS -R Recursively change attributesofdirectoriesandtheir contents. -V Be verbosewithchattr'soutputandprint the program version. -f Suppress most error messages. -v version

chattr命令的用法:chattr [ -RVf ] [ -v version ] [ mode ] files…

最关键的是在[mode]部分,[mode]部分是由+-=和[ASacDdIijsTtu]这些字符组合的,这部分是用来控制文件的属性。

+ :在原有参数设定基础上,追加参数。

- :在原有参数设定基础上,移除参数。

= :更新为指定参数设定。

A:文件或目录的 atime (access time)不可被修改(modified), 可以有效预防例如手提电脑磁盘I/O错误的发生。

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

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

c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。

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

i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助。

j:即journal,设定此参数使得当通过mount参数:data=ordered 或者

data=writeback 挂 载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为

data=journal,则该参数自动失效。

s:保密性地删除文件或目录,即硬盘空间被全部收回。

u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion。

各参数选项中常用到的是a和i。a选项强制只可添加不可删除,多用于日志系统的安全设定。而i是更为严格的安全设定,只有superuser

(root) 或具有CAP_LINUX_IMMUTABLE处理能力(标识)的进程能够施加该选项。

应用举例:

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

好啦,补充知识就到这里,继续我们的话题,回归正题,查看我们的文件发现确实是这样:

[root@JiekeXu openssh]# lsattr sftp-server

----i--------e- sftp-server

证实了此文件被保护了,无法对其进行修改,所以只能撤掉对其的保护,OK,来一波试试,chattr –I sftp-server

[root@JiekeXu67openssh]# chattr –i sftp-server

-bash:chattr:commandnotfound

好玩啊,找不到命令,命令别人干掉了!!!怎么办?装呗,通过软件官网中进行下载即可:https://pkgs.org/download/e2fsprogs,网上找到了一个对应的源码包,进行安装了。(怎么上传上去的?大家很想知道吧,我偷偷告诉你,通过上传到同一网段的另一服务器,使用scp e2fsprogs-1.42.9-7.el7.x86_64 100.1.0.0:/ygsoft/下)

[root@JiekeXuygsoft]# rpm -qf /usr/bin/chattr

e2fsprogs-1.42.9-7.el7.x86_64

[root@JiekeXuygsoft]# rpm -ivh e2fsprogs-1.42.9-7.el7.src.rpm

Updating/ installing...1:e2fsprogs-1.42.9-7.el7

################################# [100%]

[root@JiekeXuygsoft]# chattr

-bash:chattr:commandnotfound

[root@JiekeXuygsoft]# which chattr

/usr/bin/which:no chattrin(/usr/java/jdk1.6.0_45/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)

[root@JiekeXuygsoft]# rpm -qf /usr/bin/chattr

e2fsprogs-1.42.9-7.el7.x86_64

看到这里,是不是很无语了,貌似没问题吧,确实是没问题,但命令就是找不到,神奇吧!没办法,配置yum源吧,换一种方法玩玩。通过协调原厂重配网络yum源,使用命令安装好了。

yum install chattr -y

[root@JiekeXuopenssh]# which chattr/usr/bin/chattr

[root@JiekeXu67openssh]# chattr -i sftp-server

[root@JiekeXuopenssh]# lsattr sftp-server

-------------e- sftp-server

[root@JiekeXuopenssh]# chmod 775 sftp-server

[root@JiekeXuopenssh]# ll sftp-server

-rwxrwxr-x.1root root63544May42015sftp-server

[root@JiekeXu67openssh]# lsattr sftp-server

-------------e- sftp-server

这样就完美了呗,然后使用XFTP连接此服务器就可以上传下载文件,部署程序了,心情一下愉快了好多。如要继续保护此文件,使用 chattr +i 文件即可。

总结:在日常的运维中,数据是很重要的,增加保护机制很重要,此过程主要是为了介绍一个不怎么常使用的命令chattr,但是对于文件、数据等保护性很高的一个命令,希望大家都能get到。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180528G00CAL00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券