例子

例子

我正在执行以下命令:chmod 000 x.txt

但作为所有者我仍然可以重命名它!为什么?

我怎样才能阻止所有人重命名该文件?

答案1

目录是包含命名条目列表的特殊文件。每个条目都引用另一个文件对象,而该文件对象又包含文件内容在磁盘上的位置。当您创建、移动或删除“文件”(请记住目录也是文件)时,您实际上是在创建、重命名或删除目录列表中的条目 - 您正在更改条目所属的目录。由于您需要对对象具有写入权限才能对其进行更改,因此您需要对目录具有写入权限才能在其中创建、移动或删除条目。

例子

假设x目录 中有一个文件a。要重命名,x用户需要对 具有写权限a。要撤销 所有者以外的任何人的写权限,请执行以下操作a

chmod go-w a

这将撤销 ( )类别“所有者组”( ) 和“其他”( )-的“写”权限 ( ) 。wgo

答案2

正确David Foerster 回答,操作文件和目录的权限取决于包含目录。

话虽如此,有一个(肮脏的?)技巧可以避免即使你拥有包含目录的权限,目录也可能被删除:在其中放入一个(可能是隐藏的)文件,并使该文件和目录不可写。看这个例子:

[romano:~] mkdir tmp/test; cd tmp/test
[romano:~/tmp/test] % mkdir subdir_e subdir_f
[romano:~/tmp/test] % touch subdir_f/.hiddenfile

我创建了两个子目录,一个是空的,另一个带有隐藏文件。

[romano:~/tmp/test] % chmod 555 subdir_f/.hiddenfile subdir_f subdir_e
[romano:~/tmp/test] % sudo chown root subdir_f/.hiddenfile subdir_f subdir_e

我通过更改权限并授予所有权,使此目录和隐藏文件不可写root(否则我可以简单地将权限改回来)。让我们看看状态:

[romano:~/tmp/test] % ls -la  
total 16
drwxrwxr-x 4 romano romano 4096 oct 23 16:37 .
drwxr-xr-x 6 romano romano 4096 oct 23 16:31 ..
dr-xr-xr-x 2 root   romano 4096 oct 23 16:37 subdir_e
dr-xr-xr-x 2 root   romano 4096 oct 23 16:37 subdir_f

请注意,我拥有并具有对 的写入权限.,这是我的当前目录,因此如果我执行以下任一操作:

[romano:~/tmp/test] % rmdir subdir_e

它成功了,因为我可以.随意修改。但如果我尝试对非空子目录进行同样的操作:

[romano:~/tmp/test] % rmdir subdir_f
rmdir: failed to remove ‘subdir_f’: Directory not empty
[romano:~/tmp/test] 1 % rm -rf subdir_f
rm: cannot remove ‘subdir_f/.hiddenfile’: Permission denied
[romano:~/tmp/test] 1 % chown romano subdir_f
chown: changing ownership of ‘subdir_f’: Operation not permitted

...我现在需要 root 权限才能将其删除。

相关内容