该文件和文件夹归 root 所有,但我sudo chmod ugo+rw
对两者都做了,我用 确认了这一点ls -l
。尽管如此,我仍无法以普通用户身份删除该文件。
❯ ls -ld /tmp /tmp/perm
drwxrwxrwt 46 root root 1160 Jan 9 17:41 /tmp
-rw-rw-rw- 1 root root 3 Jan 9 17:40 /tmp/perm
❯ rm /tmp/perm
rm: cannot remove '/tmp/perm': Operation not permitted
未配置 attr 和 ACL:
❯ lsattr -d /tmp
---------------------- /tmp
❯ getfacl /tmp
getfacl: Removing leading '/' from absolute path names
# file: tmp
# owner: root
# group: root
# flags: --t
user::rwx
group::rwx
other::rwx
在子文件夹中执行相同的操作也是可行的。
/tmp
/
是安装在 Arch Linux 下运行的 ext4 系统的一部分。
答案1
那是因为:t
中的粘性位。/tmp
drwxrwxrwt 46 root root 1160 Jan 9 17:41 /tmp
从man chmod
:
限制删除标志或粘性位
限制删除标志或粘性位是单个位,其解释取决于文件类型。对于目录,它可以防止非特权用户删除或重命名目录中的文件,除非他们拥有该文件或目录;这称为目录的限制删除标志,通常在 /tmp 等全局可写目录中找到。
您可以使用以下方法设置粘滞位:
chmod +t /path/to/dir
或者
chmod o+x,+t /path/to/dir
两者的区别在于,第一个将设置T
而不是t
如果目录没有执行权限其他的。而o+x,+t
将设置执行权限和粘滞位。
在这种情况下,我不推荐你从 中删除粘性位/tmp
。但如果你想删除它,你应该使用:
sudo chmod -t /tmp
或者更好的是,不要删除粘性位,只需rm /tmp/perm
以 root(或sudo
)身份运行。