咨询热线:4006-75-4006
售前:9:00-23:30 备案:9:00-18:00 技术:7*24h
linux在root用户下无法使用chattr命令的解决办法
欢迎来到蓝队云技术小课堂,每天分享一个技术小知识。
在解决linux在root用户下无法使用chattr命令之前我们先简单了解下什么是chattr命令。chattr命令用于更改文件或目录的属性,包括不可修改属性、同步属性、追加属性、无尽属性、压缩属性、无尽属性、不可删除属性等。
chattr命令只能由超级用户或文件的所有者使用。
下面我们介绍下chattr命令的使用。
1、给文件设置版本
-v参数设置版本信息只在extX(ext4…)文件系统下支持,xfs文件系统设置文件版本时会报错对设备不适当的 ioctl 操作。
# chattr -v 2 -V hi.txt
chattr 1.41.12 (17-May-2010)
hi.txt的标志被设为 -------------e-
Version of hi.txt set as 2
# chattr -v 2 -V a.txt
chattr 1.42.9 (28-Dec-2013)
a.txt的标志被设为 ----------------
Version of a.txt set as 2
chattr: 对设备不适当的 ioctl 操作 while setting version on a.txt
2、递归设置目录下文件属性
# chattr -R -a -V level1-1/
chattr 1.42.9 (28-Dec-2013)
level1-1/的标志被设为 ----------------
level1-1//level2-1的标志被设为 ----------------
level1-1//level2-2的标志被设为 ----------------
level1-1//level2-2/ccc.txt的标志被设为 ----------------
level1-1//level2-3的标志被设为 ----------------
level1-1//bb.txt的标志被设为 ----------------
3、使用-V参数显示指令执行过程
# chattr -R -a -V level1-1
chattr 1.42.9 (28-Dec-2013)
level1-1的标志被设为 ----------------
level1-1/level2-1的标志被设为 ----------------
level1-1/level2-2的标志被设为 ----------------
level1-1/level2-2/ccc.txt的标志被设为 ----------------
level1-1/level2-3的标志被设为 ----------------
level1-1/bb.txt的标志被设为 ----------------
4、增加一个属性
# lsattr a.txt
---------------- a.txt
# chattr +i a.txt
# lsattr a.txt
----i----------- a.txt
5、删除一个属性
# chattr -i -V a.txt
chattr 1.42.9 (28-Dec-2013)
a.txt的标志被设为 ----------------
# lsattr a.txt
---------------- a.txt
6、指定文件属性
使用=指定文件的属性,实际上文件支持的各属性之间有部分是冲突的,所以很少用到=参数来指定属性,常用±参数来增加或者减少一个属性。
# chattr =iaA -V a.txt
chattr 1.42.9 (28-Dec-2013)
a.txt的标志被设为 ----ia-A--------
三、chattr命令语法及参数说明
1、命令语法
#chattr [参数] 文件或者目录
#chattr ±=[属性] 文件或者目录
#chattr [参数] [属性] 文件或者目录
2、参数说明
参数 参数说明
-R 递归处理,将指令目录下的所有文件及子目录一并处理
-v<版本编号> 设置文件或目录版本,此参数只适用于extx文件系统
-V 显示指令执行过程
-f 抑制大多数错误信息
+<属性> 开启文件或目录的该项属性
-<属性> 关闭文件或目录的该项属性
=<属性> 指定文件或目录的该项属性
3、属性说明
当前主流Linux内核中实现的ext2、ext3和ext4文件系统不支持“c”、“s”和“u”属性。实际上这些属性中常用只有a和i,追加属性长用于日志文件,保证日志文件不会被删除,只允许追加日志记录;i属性用于锁定重要的配置文件,避免误删除或者修改等。
属性 属性说明
a 该属性只允许在文件末尾添加数据,不允许修改或删除文件的内容。
A 设置该属性时,文件atime时间不再更新。
c 默认将文件或目录进行压缩。
C 设置了“C”属性的文件将不会进行写时复制更新。只有在执行写时复制的文件系统上才支持此标志
d 当进行文件系统备份时,不备份该文件或目录。
D 当修改具有“D”属性集的目录时,更改将同步写入磁盘;这相当于应用于文件子集的“dirsync”装载选项。要求内核版本2.5.19以上
i 禁止对文件或目录进行任何修改操作,包括修改、删除、重命名等。
j 允许文件系统支持日志功能,只在ext3、ext4环境下支持。
s 当文件被删除时,将其内容清零。
S 当修改具有“S”属性集的文件时,更改将同步写入磁盘;这相当于应用于文件子集的“sync”装载选项
t 让文件系统支持尾部合并(tail-merging),只有ext2和ext3支持尾部合并
T 具有“T”属性的目录将被视为目录层次结构的顶部。这是对ext3和ext4使用的块分配器的一个提示。
u 删除具有“u”属性集的文件时,将保存其内容。这允许用户请求取消删除。
在学习linux操作系统的时候,想用chattr来修改某一个文件的权限时,突然爆出了以下这个错误:
bash /usr/bin/chattr permission denied
考虑到可能是普通用户权限不够,我又切换到了root用户。按理说root用户的权限是最高的了,结果还是爆出上面那个错误。
查阅了国内的相关博客,发现没有解决这一问题的,于是FQ在外网上找到了解决办法。
以下是链接
# chattr -l-bash: /usr/bin/chattr: Permission denied
# chattr -i chattr
-bash: /usr/bin/chattr: Permission denied
# chmod +x chattrchmod: changing permissions of `chattr': Operation not permitted
为了恢复chattr的功能,解决办法如下:
# cp /usr/bin/chattr /usr/bin/chattr2
# chmod 755 /usr/bin/chattr2
# chattr2 -i /usr/bin/chattr
# chmod 755 /usr/bin/chattr
# ls -la /usr/bin/chattr
# lsattr /usr/bin/chattr
-rwxr-xr-x 1 root root 9664 2010-08-17 01:29 /usr/bin/chattr
-----------------e- /usr/bin/chattr
大致思路是:复制chattr的副本chattr2,用chmod来修改chattr2的权限(号码为755)。然后反过来使用chattr2打开chattr的权限,再用chmod修改。最后chattr就能使用了。
通过这个问题的解决,让我体会对一句话有了深刻的体会:inux一切皆文件
补充关于权限:i和a的说明
i:不可修改权限 例:chattr u+i filename 则filename文件就不可修改,无论任何人,如果需要修改需要先删除i权限,用chattr -i filename就可以了。查看文件是否设置了i权限用lsattr filename。
a:只追加权限, 对于日志系统很好用,这个权限让目标文件只能追加,不能删除,而且不能通过编辑器追加。可以使用chattr +a设置追加权限。
蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。
更多技术知识,蓝队云期待与你一起探索。