我是这台 Linux 机器上的单个用户。我尝试了以下步骤来保护文件,但它没有按预期工作。有人能解释一下原因吗?
$ touch file
$ sudo chown root:root file
$ sudo chmod a-w file
$ ls -l file
-r--r--r-- 1 root root 0 2012-02-29 01:06 file
$ rm file
rm: remove write-protected regular empty file `file'? yes
$ ls -l file
ls: cannot access file: No such file or directory
“文件”是只读的,由 root 拥有。为什么我的普通用户可以删除它?
答案1
这是 Linux 权限的一个奇怪行为,但删除文件的权限是由目录而不是文件的权限授予的。
尝试这个:
mkdir test
touch test/file
# Make the Directory ro
chmod a-w test
ls -l test/file
-rw-rw-r-- 1 bodhi bodhi 0 2012-02-28 21:13 test/file
rm test/file
rm: cannot remove `test/file': Permission denied
写入权限。对于普通文件,这意味着您可以修改文件,也就是向文件写入新数据。对于目录来说,写权限意味着您可以在目录中添加、删除和重命名文件。这意味着如果文件具有写权限位,则允许你修改文件的内容,但只有当文件目录的权限允许您这样做时,您才可以重命名或删除该文件。
看http://www.tuxfiles.org/linuxhelp/filepermissions.html
为了允许(RW)访问文件,但防止删除或重命名,请在目录上设置粘滞位。
# change "test" to your directory
chmod +t test
touch test/file
chmod a+w test/file
ls -l | grep test
drwxrwxrwt 4 bodhi bodhi 4096 2012-03-07 17:08 test
ls -l test | grep file
-rw-rw-rw- 1 bodhi bodhi 13 2012-03-07 17:10 file
# su to another user, "test"
test@ufbt:/home/bodhi$ echo 'It works !!!' >> test/file
test@ufbt:/home/bodhi$ cat test/file
It works !!!
test@ufbt:/home/bodhi$ rm test/file
rm: cannot remove `test/file': Operation not permitted
http://www.techcuriosity.com/resources/linux/advanced_file_permissions_in_linux.php
如果为目录设置了粘滞位,则只有该目录的所有者或文件的所有者可以删除或重命名该目录中的文件。