帮助中心 >  技术知识库 >  云服务器 >  服务器教程 >  linux在root用户下无法使用chattr命令的解决办法

linux在root用户下无法使用chattr命令的解决办法

2024-11-22 15:15:55 101

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设置追加权限。


蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。

更多技术知识,蓝队云期待与你一起探索。


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: