Как запретить пользователям удалять файлы, которые уже используются?
Рассмотрим этот сценарий:
Пользователь выполняет команду для файла. Этот файл теперь используется.
$ tail -f somefile.log
В другой оболочке пользователь удаляет файл.
$ rm somefile.log
Теперь этот файл "удален". Это означает, что единственная жесткая ссылка на файл inode исчезла. Если вы выполните следующую команду, вы все равно сможете увидеть файл, обозначенный как "удаленный".
$ lsof | grep somefile.log
Дисковое пространство, используемое somefile.log не освобождается, пока пользователь не прерывает tail Команда в этом случае.
У меня вопрос: можно ли запретить пользователям удалять файлы, которые используются в момент попытки удаления (аналогично Windows)? Возможно ли использовать PAM для этого?
2 ответа
В окнах, когда вы открываете файл, он будет заблокирован процессом и не может быть удален или отредактирован до тех пор, пока процесс не освободит его, что является основной причиной необходимости перезапуска после каждого обновления в Windows.
В Linux есть другой механизм, который разрешает удаление файла во время его выполнения, и вы все равно можете использовать его, пока не завершится весь процесс, использующий его. Так что здесь преимущество при обновлении - нет необходимости перезагружаться.
Когда вы удаляете файл в Linux, он будет удален, когда будут удалены все ссылки на этот файл, поэтому, если вы хотите решить удаление, вы должны создать жесткие ссылки для этого файла или работать с разрешениями пользователя для этого файла.
Не существует способа "заблокировать" файлы или предотвратить их изменение от пользователей, которые имеют на это разрешение.
Пока у пользователя есть права доступа к файловой системе (write разрешения, а точнее) удалить файл, тогда они смогут его удалить. Вам нужно будет использовать пользователей и права доступа к файлам, чтобы предотвратить удаление файлов.
В частности, я бы посмотрел на следующие команды:
chmod
chown
chgrp
adduser
passwd