Пользователь без прав sudo получает сообщение «rm: удалить защищенный от записи обычный пустой файл» вместо отказа в доступе

Пользователь без прав sudo получает сообщение «rm: удалить защищенный от записи обычный пустой файл» вместо отказа в доступе

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

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

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

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

 sudo mkdir /disk1
 sudo mount /disk1

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

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

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

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

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

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

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

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

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

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

Связанный контент