Я добавил дополнительный диск на сервер Linux.

Я добавил следующую строку в fstab:

UUID=e277f402-bbac-4830-bc1d-5a849ffe7f9c /disk1          ext4    defaults 0 0

Затем я создал точку монтирования /disk1 и смонтировал ее

 sudo mkdir /disk1
 sudo mount /disk1

Затем я создал пустой файл touch1.txt как пользователь "Хари" и его разрешения были следующими

sudo touch test1.txt

-rw-rw-r-- 1 hari hari     0 Sep 12 18:23 test1.txt

Теперь, когда я вхожу в систему как другой пользователь и удаляю файл test1.txt, он на самом деле спрашивает меня, а затем отказывает мне вместо того, чтобы сказать "Отказано в доступе". Почему это так? и как я могу заставить его вести себя как "нормальный"

hari2@UBUNTU01:/disk1$ rm test2.txt
rm: remove write-protected regular empty file ‘test2.txt’? y
rm: cannot remove ‘test2.txt’: Operation not permitted

1 ответ1

4

Разрешения Unix немного странные, когда дело доходит до операции удаления.

Начнем с того, что удаление файла действительно включает в себя удаление ссылки на файл из каталога. Поскольку большинство файловых систем Unix допускают жесткие ссылки, файл может быть связан из более чем одного каталога, поэтому существует более одной ссылки. И когда вы удаляете ссылку, файл не удаляется, если нет других ссылок на него.

По этой причине фактический системный вызов, используемый для "удаления" файла, называется unlink . Однако утилита командной оболочки, которая выполняет unlink, называется rm , что является мнемоникой для "удаления".

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

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

Для защиты системных администраторов от выстрелов собственных пальцев утилита rm сначала проверяет, имеет ли лицо, которое ее вызывает, разрешение на запись в файл, даже если это разрешение не требуется для отсоединения файла. По понятным причинам, он делает эту проверку, прежде чем пытаться удалить файл.

Утилита rm не проверяет, разрешено ли использование, чтобы отсоединить файл, потому что "проверка перед действием" обычно считается плохим стилем. Скорее, он выполняет желаемое действие и сообщает об ошибке, если операционная система возвращает ошибку. В этом случае ОС сообщит EACCES, потому что у пользователя нет прав на запись в каталог.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .