Dall'utente root controlla gli attributi dei file
# lsattr
se noti i
(immutabile) o a
(append-only), rimuovi questi attributi:
# man chattr
# chattr -i [filename]
# chattr -a [filename]
Il motivo più comune per rm
lamentarsi di non avere il permesso di eliminare un file, è che i permessi sulla directory ti vietano di eliminare il file. Per eliminare un file, è necessario il permesso di scrittura sulla directory. I permessi sul file sono irrilevanti (rm
senza -f
richiede conferma prima di eliminare un file di sola lettura, ma questa è solo una conferma, non una limitazione). Su alcune varianti Unix come OSX (ma non Linux), l'ACL su un file può impedirne l'eliminazione; ls -l
mostrerebbe @
alla fine del campo di autorizzazione se c'era una voce ACL sul file.
L'accesso come root ignora i permessi, quindi root può eliminare i file anche in una directory di sola lettura.
L'output di ls -l
mostra un .
alla fine della colonna dei permessi. Questo indica che il file ha un contesto di sicurezza SELinux. A differenza delle autorizzazioni di base e dell'ACL, il contesto di sicurezza di SELinux su un file può controllare chi è autorizzato a eliminarlo. Inoltre SELinux non può sempre essere aggirato da root (è possibile avere un processo in esecuzione come ID utente 0 ma con pochi diritti scelti dal progettista della politica di SELinux). Per vedere cosa ti permette di fare il contesto SELinux, esegui ls -lZ . exam_a
.
Un'altra cosa che può impedire l'eliminazione di un file è se esso o la directory che lo contiene ha l'attributo Linux append-only o immutable. Esegui lsattr -d . exam_a
per visualizzare gli attributi di Linux. Se a
o i
è attivo, dovrai rimuoverlo (chattr -a -i . exam_a
) per eliminare il file; solo root può farlo. Root non può ignorare questi attributi per eliminare un file, gli attributi devono essere prima disattivati.
Un'altra cosa che impedisce l'eliminazione di un file è se il filesystem è montato in sola lettura, ma in tal caso riceverai un messaggio di errore diverso.