Відповіді:
Від root користувач перевіряє атрибути файлів
# lsattr
якщо ви помітили i
(незмінний) або a
(лише додавання), видаліть ці атрибути:
# man chattr
# chattr -i [filename]
# chattr -a [filename]
Найпоширеніша причина rm
скарги на те, що ви не маєте дозволу на видалення файлу, полягає в тому, що дозволи в каталозі забороняють вам видаляти файл. Для того, щоб видалити файл, вам потрібно дозволити на запис у каталог. Дозволи на файл не мають значення ( rm
без -f
запитів на підтвердження перед видаленням файлу лише для читання, але це лише підтвердження, а не обмеження). У деяких варіантах Unix, таких як OSX (але не Linux), ACL у файлі може запобігти його видаленню; ls -l
буде показано @
в кінці поля дозволу, якщо в файлі був запис ACL.
Доступ як root обходить дозволи, так що root може видаляти файли навіть у каталозі лише для читання.
Вихід з ls -l
показує a .
в кінці стовпця дозволів. Це вказує на те, що файл має контекст безпеки SELinux. На відміну від основних дозволів та ACL, контекст безпеки SELinux у файлі може контролювати того, хто може його видалити. Крім того, SELinux не завжди можна обійти корінцем (можливо, щоб процес запускався як ідентифікатор користувача 0, але мав так само мало прав, як обрав розробник політики SELinux). Щоб побачити, що контекст SELinux дозволяє робити, запустіть ls -lZ . exam_a
.
Інша річ, яка може перешкоджати видаленню файлу, - це те, що він або каталог, який містить його, мають атрибут Linux, що додається або незмінне . Запустіть lsattr -d . exam_a
для перегляду атрибутів Linux. Якщо ввімкнено a
або i
атрибут, вам потрібно буде його видалити ( chattr -a -i . exam_a
), щоб видалити файл; тільки корінь може це зробити. Корінь не може обійти ці атрибути, щоб видалити файл, атрибути потрібно спочатку вимкнути.
Ще одна річ, яка запобігає видаленню файлу, це якщо файлова система встановлена лише для читання, але ви отримаєте інше повідомлення про помилку в такому випадку.
ls -la
, щоб ми могли бачити дозволи.
(у каталозі).