Как я могу предотвратить переименование файла всеми людьми?

Я выполняю следующую команду: chmod 000 x.txt

но как владелец я все еще могу переименовать его! Зачем?

и как я могу запретить всем людям переименовывать этот файл?

2 ответа

Решение

Как правильно ответил Дэвид Фёрстер, права на управление файлами и каталогами зависят от разрешения на содержащий каталог.

Сказал, что есть (грязный?) Трюк, чтобы избежать возможности удаления каталога, даже если у вас есть права на содержащий его: вставьте в него (возможно, скрытый) файл и сделайте его и каталог недоступным для записи. Посмотрите на этот пример:

[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

это удается, потому что я могу изменить . как мне нравится. Но если я попробую то же самое с непустым subdir:

[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, чтобы удалить его сейчас.

Каталоги - это специальные файлы, содержащие список именованных записей. Каждая запись ссылается на другой объект файла, который, в свою очередь, содержит расположение содержимого файла на диске. Когда вы создаете, перемещаете или удаляете "файл" (и помните, что каталоги - это тоже файлы), вы фактически создаете, переименовываете или удаляете записи в списке каталогов - вы меняете каталог, частью которого является запись. Поскольку вам необходимы разрешения на запись для объекта, чтобы изменить его, вам нужны разрешения на запись в каталог, чтобы создавать, перемещать или удалять записи в нем.

пример

Давайте предположим, что у вас есть файл x в каталоге a, Переименовать x пользователю нужен доступ для записи a, Чтобы отозвать доступ на запись от любого, кто не является владельцем a делать:

chmod go-w a

Это отзывает (-) разрешение на "запись" (w) для классов "группа владельцев" (g) и другие" (o).

Другие вопросы по тегам