一、原因剖析
我们都知道root的权限应该是最高级,最近我在root用户下进行文件删除指令时报错:Operation not permitted。
权限不足?不应该啊,我是root啊!如果是其他普通用户,我们大可以chmod进行权限授予。其实啊,确实是有root这样的权限也惹不起的存在,那就是chattr,它是我们授权命令chmod的底层命令。
chattr命令可以改变存放在ext2文件系统上的文件或目录的属性。并且这种改变是root也无法通过普通操作直接修改的。
chattr的基本语法是:chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...]
参数
- -R 递归处理,将指定目录下的所有文件及子目录一并处理。
- -v<版本编号> 设置文件或目录版本。
- -V 显示指令执行过程。
- +<属性> 开启文件或目录的该项属性。
- -<属性> 关闭文件或目录的该项属性。
- =<属性> 指定文件或目录的该项属性。后面可以跟8种追加属性,分别代表不同的含义,具体如下:
属性名 | Value |
---|---|
a | 让文件或目录仅供附加用途 |
b | 不更新文件或目录的最后存取时间 |
c | 将文件或目录压缩后存放 |
d | 将文件或目录排除在倾倒操作之外 |
i | 不得任意更动文件或目录 |
s | 保密性删除文件或目录 |
S | 即时更新文件或目录 |
u | 预防意外删除 |
当遇到自身用户权限充足,却无法操作修改某项文件时,我们就要注意是否是因为chattr对文件属性的改变,通常是属性i的影响。
二、具体解决方法
既然chattr是直接改变的文件属性,那么我们要排查是否是chattr授权的影响,那么就要查看所要操作的文件的权限了,这时候我们要用到lsattr这个命令
lsattr 用于显示文件属性,针对于我之前的报错,具体解决如下:
(1)lsattr 查看该文件属性
我这个是直接查看当前路径下的所有文件属性.(如果要查特定文件,在后面加上文件属性即可。)lsattr
如上图所示,authorized_keys文件多了一个”i”属性,i代表不得随意更改该文件或目录。
这也就解释了为什么之前root用户下无法删除的原因。
(2)chattr去i属性
既然查明了是受i属性的影响,那就把i去掉。
操作命令:chattr -i ./authorized_keys
(3)复查一下文件属性
命令lsattr
,发现果然i属性被去除了
(4)执行操作
这时候我来执行原本想执行的操作,删除目标文件,命令rm authorized_keys
(5)检查一下,成功
命令ls
发现当前目录下已经没有了authorized_keys,操作成功!