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

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

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

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

1
задан 23 October 2014 в 16:47

2 ответа

Как правильно отвеченный David Foerster , права управлять файлами и каталогами зависят от разрешения на содержащий каталог.

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

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

я создал два subdirs, один пустой и другой со скрытым файлом.

[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 удалить его теперь.

0
ответ дан 11 November 2019 в 09:30

Каталоги являются специальными файлами, содержащими список именованных записей. Каждая запись ссылается на другой объект файла, который в свою очередь содержит местоположения содержания файла на диске. Когда Вы создаете, переместитесь, или удалите “file” (и помните, что каталоги являются файлами также), Вы на самом деле создаете, переименование, или удаление записей в каталоге перечисляет †“, Вы изменяете каталог, которого запись является частью. Так как Вы должны записать полномочия в объект изменить его, Вы должны записать полномочия в каталог, чтобы создать, переместить или удалить записи в нем.

Пример

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

chmod go-w a

Это отменяет (-) “write” разрешение (w) для классов “owner group“ (g) и “other“ (o).

2
ответ дан 11 November 2019 в 09:30

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

Похожие вопросы: