Risposte:
Dall'utente root controllare gli attributi dei file
# lsattr
se noti i
(immutabile) o a
(solo accodamento), rimuovi questi attributi:
# man chattr
# chattr -i [filename]
# chattr -a [filename]
Il motivo più comune per rm
lamentarsi del fatto che non si dispone dell'autorizzazione per eliminare un file è che le autorizzazioni sulla directory vietano di eliminare il file. Per eliminare un file, è necessario il permesso di scrittura nella directory. Le autorizzazioni sul file sono irrilevanti ( rm
senza -f
richieste di 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 le autorizzazioni, quindi root può eliminare i file anche in una directory di sola lettura.
L'output di ls -l
mostra .
a alla fine della colonna di autorizzazione. Questo indica che il file ha un contesto di sicurezza SELinux. A differenza dei permessi di base e ACL, il contesto di sicurezza SELinux su un file può controllare chi è autorizzato a cancellarlo. Inoltre SELinux non può sempre essere escluso dal root (è possibile avere un processo in esecuzione come ID utente 0 ma con il minor numero di diritti scelto dal policy designer 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 hanno l' attributo Linux solo accodamento o immutabile . Esegui lsattr -d . exam_a
per visualizzare gli attributi di Linux. Se l' attributo a
o i
è attivo, dovrai rimuoverlo ( chattr -a -i . exam_a
) per eliminare il file; solo root può farlo. La radice non può ignorare questi attributi per eliminare un file, gli attributi devono prima essere disattivati.
Ancora un'altra cosa che impedisce l'eliminazione di un file è se il filesystem è montato in sola lettura, ma in tal caso si otterrebbe un messaggio di errore diverso.
ls -la
, così possiamo vedere le autorizzazioni su.
(la directory).