Tabla de contenidos
Junto con los permisos habituales de lectura, escritura y ejecución de archivos , los archivos de Linux tienen otro conjunto de atributos que controlan otras características del archivo. Aquí se explica cómo verlos y cambiarlos.
Permisos y atributos
En Linux, quién puede acceder a un archivo y qué puede hacer con él está controlado por un conjunto de permisos centrado en el usuario . Ya sea que pueda leer el contenido de un archivo , escribir nuevos datos en el archivo o ejecutar un archivo si es un script o un programa, todo se rige por ese conjunto de permisos. Los permisos se aplican al archivo, pero definen las restricciones y capacidades para diferentes categorías de usuarios.
Hay permisos para el propietario del archivo, para el grupo del archivo y para otros , es decir, usuarios que no están en las dos primeras categorías. Puede usar el ls
comando con la -l
opción (lista larga) para ver los permisos en un archivo o directorio.
Para cambiar los permisos, usa el chmod
comando . Al menos, puede hacerlo si tiene permisos de escritura para el archivo o si es el usuario root.
Podemos ver que los permisos de archivo están centrados en el usuario porque otorgan o eliminan permisos a nivel de usuario. Por el contrario, los atributos de un archivo están centrados en el sistema de archivos. Al igual que los permisos, se establecen en el archivo o directorio. Pero una vez configurados, son los mismos para todos los usuarios.
Los atributos son una colección separada de configuraciones de permisos. Los atributos controlan características como la inmutabilidad y otros comportamientos a nivel del sistema de archivos. Para ver los atributos de un archivo o directorio usamos el lsattr
comando. Para establecer los atributos usamos el chattr
comando.
Los permisos y atributos se almacenan dentro de los inodos . Un inodo es una estructura de sistema de archivos que contiene información sobre los objetos del sistema de archivos, como archivos y directorios . La ubicación de un archivo en el disco duro, su fecha de creación, sus permisos y sus atributos se almacenan dentro de su inodo.
Debido a que diferentes sistemas de archivos tienen diferentes capacidades y estructuras subyacentes, los atributos pueden comportarse de manera diferente, o ser ignorados por completo, por algunos sistemas de archivos. En este artículo, estamos usando ext4
cuál es el sistema de archivos predeterminado para muchas distribuciones de Linux.
Mirando los atributos de un archivo
Los comandos chattr
y lsattr
ya estarán presentes en su computadora, por lo que no es necesario instalar nada.
Para verificar los atributos de los archivos en el directorio actual, use lsattr
:
lsattr
Las líneas discontinuas son marcadores de posición para atributos que no están establecidos. El único atributo que se establece es el e
atributo (extensiones). Esto muestra que los inodos del sistema de archivos están usando, o usarán si es necesario, extensiones para apuntar a todas las partes del archivo en el disco duro.
Si el archivo se mantiene en una secuencia contigua de bloques de disco duro, su inodo solo tiene que registrar el primer y el último bloque utilizados para almacenar el archivo. Si el archivo está fragmentado , el inodo debe registrar el número del primer y último bloque de cada parte del archivo. Estos pares de números de bloque de disco duro se denominan extensiones.
Esta es la lista de los atributos más utilizados.
- a : Solo agregar. Un archivo con este atributo solo se puede agregar a. Todavía se puede escribir, pero solo al final del archivo. No es posible sobrescribir ninguno de los datos existentes dentro del archivo.
- c : Comprimido. El archivo se comprime automáticamente en el disco duro y se descomprime cuando se lee. Los datos escritos en los archivos se comprimen antes de escribirse en el disco duro.
- R : Sin
atime
actualizaciones . Elatime
es un valor en un inodo que registra la última vez que se accedió a un archivo. - C : Sin copia en escritura. Si dos procesos solicitan acceso a un archivo, se les puede dar punteros al mismo archivo. Solo reciben su propia copia única del archivo si intentan escribir en el archivo, lo que lo hace único para ese proceso.
- d : Sin volcado. El comando de Linux
dump
se usa para escribir copias de sistemas de archivos completos en medios de copia de seguridad. Este atributo hacedump
ignorar el archivo. Se excluye de la copia de seguridad. - D : actualizaciones de directorio sincrónicas. Cuando este atributo está activado para un directorio, todos los cambios en ese directorio se escriben sincrónicamente, es decir, inmediatamente, en el disco duro. Las operaciones de datos se pueden almacenar en búfer.
- e : formato de extensión. El
e
atributo indica que el sistema de archivos está utilizando extensiones para asignar la ubicación del archivo en el disco duro. No puede cambiar esto conchattr
. Es una función del funcionamiento del sistema de archivos. - yo : inmutable. Un archivo inmutable no se puede modificar, incluido el cambio de nombre y la eliminación. El usuario root es la única persona que puede configurar o desactivar este atributo.
- s : Eliminación segura. Cuando se elimina un archivo con este conjunto de atributos, los bloques del disco duro que contenían los datos del archivo se sobrescriben con bytes que contienen ceros. Tenga en cuenta que esto no es respetado por el
ext4
sistema de archivos. - S : Actualizaciones síncronas. Los cambios en un archivo con su
S
conjunto de atributos se escriben en el archivo de forma síncrona. - u : Eliminar un archivo que tiene su
u
atributo establecido provoca que se haga una copia del archivo. Esto puede ser beneficioso para la recuperación de archivos si el archivo se eliminó por error.
Cambiar los atributos de un archivo
El chattr
comando nos permite cambiar los atributos de un archivo o directorio. Podemos usar los operadores +
(establecer) y -
(desestablecer) para aplicar o eliminar un atributo, similar al chmod
comando y los permisos.
El chattr
comando también tiene un =
operador (solo conjunto). Esto establece los atributos de un archivo o directorio solo en los atributos que se especifican en el comando. Es decir, todos los atributos que no aparecen en la línea de comandos se anulan .
Configuración del atributo de solo añadir
Establezcamos el atributo de solo agregar en un archivo de texto y veamos cómo afecta lo que podemos hacer con el archivo.
sudo chattr +un archivo de texto.txt
Podemos verificar que el bit de solo agregar se haya establecido usando lsattr
:
lsattr archivo-texto.txt
La letra “ a
” indica que se ha establecido el atributo. Intentemos sobrescribir el archivo. Redirigir la salida a un archivo con un solo corchete angular “ >
” reemplaza todo el contenido del archivo con la salida redirigida.
Hemos precargado el archivo de texto con algo de texto de marcador de posición de lorem ipsum .
archivo-de-texto-cat.txt
Redirigiremos la salida desde ls
el archivo:
ls -l > archivo-de-texto.txt
sudo ls -l > archivo-de-texto.txt
La operación no está permitida, incluso si usamos el sudo
comando .
Si usamos dos corchetes angulares “ >>
” para redirigir la salida, se agrega a los datos existentes en el archivo. Eso debería ser aceptable para nuestro archivo de texto de solo agregar.
sudo ls -l >> archivo-de-texto.txt
Volvemos al símbolo del sistema sin ningún mensaje de error. Echemos un vistazo dentro del archivo para ver qué ha sucedido.
archivo-de-texto-cat.txt
La salida redirigida de ls
se ha agregado al final del archivo.
Aunque podemos agregar datos al archivo, ese es el único cambio que podemos hacerle. No podemos eliminarlo y tampoco rootear.
rm archivo de texto.txt
sudo rm archivo de texto.txt
Configuración del atributo inmutable
Si desea proteger un archivo al que nunca se le agregarán nuevos datos, puede establecer el atributo inmutable. Esto evita todos los cambios en el archivo, incluida la adición de datos.
sudo chattr +i segundo-archivo.txt
lsattr segundo archivo.txt
Podemos ver el “ i
” que indica que se ha establecido el atributo inmutable. Habiendo hecho que nuestro archivo sea inmutable, incluso el usuario raíz no puede cambiarle el nombre ( mv
), eliminarlo ( rm
) o agregarle datos.
sudo mv segundo archivo.txt nuevo nombre.txt
sudo rm segundo archivo.txt
sudo ls -l >> segundo-archivo.txt
No confíe en la eliminación segura en ext4
Como señalamos, algunos sistemas operativos no admiten todos los atributos. ext
La familia de sistemas de archivos no respeta el atributo de eliminación segura , incluido ext4
. No confíe en esto para la eliminación segura de archivos.
Es fácil ver que esto no funciona en ext4
. Estableceremos el s
atributo (eliminación segura) en un archivo de texto.
sudo chattr +s tercer archivo.txt
Lo que vamos a hacer es averiguar el inodo que contiene los metadatos de este archivo. El inodo contiene el primer bloque de disco duro ocupado por el archivo. El archivo contiene algo de texto de marcador de posición de lorem ipsum .
Leeremos ese bloque directamente desde el disco duro para verificar que estamos leyendo la ubicación correcta del disco duro. Eliminaremos el archivo y luego leeremos el mismo bloque de inmersión duro una vez más. Si se respeta el atributo de eliminación segura, deberíamos leer los bytes puestos a cero.
Podemos encontrar el inodo del archivo usando el hdparm
comando con la --fibmap
opción (file block map).
sudo hdparm --fibmap tercer archivo.txt
El primer bloque del disco duro es 18100656. Usaremos el dd
comando para leerlo.
Las opciones son:
- if=/dev/sda : Leer desde el primer disco duro de esta computadora.
- bs=512 : use un tamaño de bloque de disco duro de 512 bytes.
- skip=18100656 : Salta todos los bloques antes del bloque 18100656. En otras palabras, comienza a leer en el bloque 18100656.
- count=1 : Leer un bloque de datos.
sudo dd if=/dev/sda bs=512 skip=18100656 cuenta=1
Como era de esperar, vemos el texto de marcador de posición de lorem ipsum . Estamos leyendo el bloque correcto en el disco duro.
Ahora borraremos el archivo.
rm tercer archivo.txt
Si leemos ese mismo bloque de disco duro, todavía podemos ver los datos.
sudo dd if=/dev/sda bs=512 skip=18100656 cuenta=1
Una vez más, no dependa de esto para la eliminación segura en ext4
. Hay mejores métodos disponibles para eliminar archivos para que no puedan recuperarse.
Útil, pero use con precaución
Establecer los atributos de los archivos puede hacerlos inmunes a desastres accidentales. Si no puede eliminar o sobrescribir un archivo, es bastante seguro.
Puede pensar que le gustaría aplicarlos a los archivos del sistema y hacer que su instalación de Linux sea más segura . Pero los archivos del sistema deben reemplazarse periódicamente a medida que se emiten o se aplican actualizaciones. Por ese motivo, es más seguro usar estos atributos solo en archivos de su propia creación.