我有一个具有以下权限的文件:
-rwSr-s---. 1 1634630331 1818884080 118784 Jun 29 1970 DailyUpdateClass.class
如果我尝试使用 root 登录删除该文件,则会出现错误。
rm: cannot remove ‘model/DailyUpdateClass.class’: Operation not permitted
我不能改变所有权,也不能做任何其他事情。
我把它发布在堆栈溢出并尝试了一些事情,但到目前为止没有任何帮助。
有人建议我在 Unix Stack Exchange 上尝试这个,所以请求你的帮助。
答案1
多种可能性:
- 文件权限行中的尾点
-rwSr-s---.
表示扩展权限,SE Linux(用 确认ls -lZ
)或 ACL 样式权限(用 确认getfacl
)可能会阻止 root 覆盖。 - 该文件已被设置为不可变
chattr
;确认文件系统属性lsattr
- 该文件位于 NFS 文件系统上,该文件系统使用将
root_squash
远程 root 用户重新映射到非特权帐户的选项导出。以实际文件所有者身份运行rm
命令,例如sudo -u <file_owner> rm filename
- 该文件位于只读文件系统上,请使用以下
mount
命令确认或/proc/mounts
- IIRC 您不能删除代表内核设置的特殊设备条目(例如
proc
和sysfs
文件系统上的文件),是这样的吗?
答案2
您的文件具有immutable
扩展属性集,这就是您无法删除它的原因。
lsattr
返回文件的扩展属性:
$ lsattr model/DailyUpdateClass.class
-u-Diad--j------ DailyUpdateClass.class
您需要破译所有字母 ( -u-Diad--j
)
的手册页lsattr
将告诉您查看手册页forchattr
用于扩展属性的描述。我在这里列出了相关的:
u
当删除具有该属性集的文件时,其内容将被保存。这允许用户请求取消删除。注意:请务必阅读本文档末尾的错误和限制部分。当修改了设置了属性的目录时
D
,更改会同步写入磁盘;这相当于dirsync
应用于文件子集的挂载选项。
一个D
有点令人担忧 - 它显然只用于目录,但你有一个文件。
具有该属性的文件
i
无法修改:无法删除或重命名,无法创建到该文件的链接,也无法向该文件写入任何数据。只有超级用户或拥有 CAP_LINUX_IMMUTABLE 能力的进程才能设置或清除该属性。设置了该属性的文件
a
只能以追加模式打开进行写入。只有超级用户或具有该能力的进程CAP_LINUX_IMMUTABLE
才能设置或清除该属性。当 dump(8) 程序运行时,具有该属性集的文件
d
不是备份的候选者。如果使用或选项挂载文件系统,则具有该属性的文件
j
在写入文件本身之前会将其所有数据写入 ext3 或 ext4 日志 。当使用该选项安装文件系统时, 所有文件数据都已记录,并且该属性无效。只有超级用户或具有该能力的进程 才能设置或清除该属性。data=ordered
data=writeback
data=journal
CAP_SYS_RESOURCE
要修复这些问题,请使用chattr
.例如,要删除不可变和附加属性:
# chattr -ia model/DailyUpdateClass.class