Desde el usuario raíz, verifique los atributos de los archivos
# lsattr
si notas i
(inmutable) o a
(solo agregar), elimine esos atributos:
# man chattr
# chattr -i [filename]
# chattr -a [filename]
La razón más común de rm
quejarse de que no tiene permiso para eliminar un archivo, es que los permisos en el directorio le prohíben eliminar el archivo. Para eliminar un archivo, necesita permiso de escritura en el directorio. Los permisos en el archivo son irrelevantes (rm
sin -f
solicita confirmación antes de eliminar un archivo de solo lectura, pero eso es solo una confirmación, no una limitación). En algunas variantes de Unix como OSX (pero no en Linux), la ACL de un archivo puede evitar su eliminación; ls -l
mostraría @
al final del campo de permiso si había una entrada de ACL en el archivo.
El acceso como raíz omite los permisos, por lo que la raíz puede eliminar archivos incluso en un directorio de solo lectura.
La salida de ls -l
muestra un .
al final de la columna de permisos. Esto indica que el archivo tiene un contexto de seguridad SELinux. A diferencia de los permisos básicos y ACL, el contexto de seguridad de SELinux en un archivo puede controlar quién puede eliminarlo. Además, SELinux no siempre puede ser eludido por root (es posible tener un proceso ejecutándose como ID de usuario 0 pero con tan pocos derechos como el diseñador de políticas de SELinux eligió). Para ver lo que le permite hacer el contexto de SELinux, ejecute ls -lZ . exam_a
.
Otra cosa que puede evitar que se elimine un archivo es si él o el directorio que lo contiene tiene el atributo de Linux inmutable o de solo agregar. Ejecute lsattr -d . exam_a
para ver los atributos de Linux. Si el a
o i
atributo está activado, deberá eliminarlo (chattr -a -i . exam_a
) para borrar el archivo; solo root puede hacer eso. Root no puede omitir estos atributos para eliminar un archivo, los atributos deben desactivarse primero.
Otra cosa que evita que se elimine un archivo es si el sistema de archivos está montado como de solo lectura, pero en ese caso recibiría un mensaje de error diferente.