Una de las formas más prácticas como podemos proteger nuestros archivos y carpetas en entornos Linux es estableciendo de manera adecuada los permisos para que aquellas personas que acceden al sistema puedan o no editar estos archivos. Todos estos valores los podemos establecer de forma sencilla y definiendo que alcance puede tener un usuario en una carpeta o archivo Linux, puede ser lectura o escritura, y así mantener la integridad de nuestros archivos. Los permisos Linux son importantes para poder proteger archivos y carpetas Linux en los diferentes usuarios. Lo mejor de todo es que podemos gestionar los permisos Linux con chmod y con chmod permisos usando los atributos que incorpora. Uno de la sintaxis más usada es la de Chmod 777 o Chmod 755 como uno de los comandos principales para dar permisos a usuarios concretos como usuario root Linux.
Los permisos con CHMOD Linux son los que nos dan acceso a archivos y carpetas. CHMOD es el encargado de gestión de permisos de todo esto. Muchos los usáis en los servidores web entre otros debido a que es una de las funciones más útiles y efectivas a la hora de realizar y gestionar permisos en todos los ficheros y carpetas del servidor o equipo Linux.
El comando CHMOD nos da la posibilidad de poder cambiar los permisos de los archivos y carpetas de la máquina con Linux. Os detallamos en este tutorial algunos ejemplos. Se suele saber que el uso de CHMOD es lo mejor para pHp entre otros lenguajes, por eso es el uso de servidores Linux entre otras características. Para que entendáis el funcionamiento de estos comandos lo primero que debéis saber es cómo funciona.
Hoy analizaremos cómo establecer permisos Linux con diferentes comandos y parámetros. Para este caso usaremos un archivo en Debian pero el procedimiento es similar en cualquier distro de Linux.
1. Permisos en Linux
En todos los sistemas Unix existe un mecanismo que nos permite, como administradores, definir los tipos de acceso que se tendrá a un archivo o carpeta particular.
Dentro de este mecanismo de control de los entornos Unix existen dos tipos de variables que debemos conocer y entender su función:
Ahora, cuando damos clic derecho sobre un archivo o carpeta y nos dirigimos a la opción Propiedades podemos ver lo siguiente:
Dentro de este esquema identificamos tres (3) tipos de clases:
Ahora contamos con tres tipos de permisos de edición de nuestros archivos o carpetas, éstos son:
Comprendiendo esto podemos establecer combinaciones entre los permisos y las clases para determinar el mejor nivel de seguridad para nuestros archivos.
2. Permisos en Linux y sus códigos de error
Ahora llega uno de los puntos que como administradores o personal involucrado en el área de IT debemos conocer y es la identificación de los errores que surgen al momento en que un usuario intenta tomar alguna acción en un archivo, por ejemplo el famoso 777.
En los entornos Unix básicamente cada permiso tiene el siguiente valor:
- Lectura: 4
- Escritura: 2
- Ejecución: 1
Debemos aprender a jugar con estos números de la siguiente manera, esto con el fin de hacer nuestra experiencia de Linux la mejor.
Si deseamos establecer un permiso de escritura usaremos el 6 (4 + 2= Lectura + Escritura)
Si deseamos que un usuario pueda ejecutar usaremos el 7 (4 + 2 + 1= Lectura + Escritura + Ejecución)
Ahora contamos con la siguiente tabla de valores:
- 0: Sin permisos
- 1: Ejecución
- 2: Escritura
- 3: Lectura y escritura
- 4: Lectura
- 5: Lectura y ejecución
- 6: Lectura y escritura
- 7: Lectura, escritura y ejecución
3. Permisos en Linux: chmod 777, chmod 644, chmod 755, chmod 700, chmod 666
Los tipos de permisos más comunes, o su combinación, son los siguiente:
Con este permiso el propietario puede leer y escribir en el archivo mientras los demás solo pueden leer.
Como vemos contamos con diferentes opciones para establecer los respectivos permisos en Linux.
4. CHMOD permisos a un archivo o carpeta
El procedimiento para establecer el permiso es muy sencillo. Basta con ir a la terminal y ejecutar la siguiente sintaxis:
chmod Tipo de permiso Ruta_ArchivoPor ejemplo:
chmod 666 /home/Solvetic/Solvetic.jpgContamos con estas interesantes opciones para establecer los mejores parámetros de seguridad en nuestros archivos y carpetas.
Viéndolo en sistemas Linux con letras veríais algo como esto en temas de permisos Linux al completo:
0 = --- = sin acceso 1 = --x = ejecución 2 = -w- = escritura 3 = -wx = escritura y ejecución 4 = r-- = lectura 5 = r-x = lectura y ejecución 6 = rw- = lectura y escritura 7 = rwx = lectura, escritura y ejecuciónSi lo que queremos es dar varios permisos, lo que debemos hacer es sumarlos.
chmod 777Estamos diciendo que les damos a los 3 tipos de usuarios el máximo permiso, dándoles lectura, ejecución y escritura, y es de haber sumado 4+2+1 por eso usamos tres veces 7. Si queremos dar permisos de lectura escritura pues sería 4+2 = 6 si lo que queremos es sólo dar lectura sería 4. Si lo que queremos es dar lectura y ejecución sería de sumar 4 + 1 = 5. De ahí las diferentes combinaciones.
chmod 755En este caso chmod 755 estamos dando permiso de lectura y ejecución (4+1) a todos los usuarios excepto al propietario que lo tiene completo (lectura, escritura, ejecución 4+2+1).
Estos comandos los podéis realizar por comandos, si es un servidor local, pues logándote y haciéndolos de forma directa, si es remoto, os podéis conectar con este programa para que os aparezca la ventana del servidor Linux (como si estuvierais en local). O una otra opción es descargar gratis y utilizar el programa Filezilla que nos frece realizar estos cambios de permisos de forma gráfica (más fácil).
Os enseñamos en este caso un servidor Linux que conectamos de forma remota con Filezilla y aparece los permisos de forma gráfica tanto de los archivos como de las carpetas.
Si queremos cambiarlos pulsamos encima de la carpeta o archivo con el botón derecho y aparecerá la opción de Permisos del archivo, al pulsarlo aparece la ventana donde podemos cambiarlos.
Esperamos que os haya servido para entender el funcionamiento de los permisos en sistemas Linux / Unix. Pasemos a los otros 2 comandos para gestión de permisos.
5. Cómo se usa el comando CHOWN en linux
Dentro de las diversas tareas cotidianas que podemos implementar en ambientes Linux está la de establecer un nuevo propietario de un archivo o carpeta ya sea por temas de seguridad, organización o administración.
Una de las formas más prácticas que tenemos en Linux para este fin es el uso del comando chown y hoy veremos cómo podemos implementarlo y sacar el máximo provecho de este importante comando.
Este comando forma parte de la suite coreutils la cual viene incluida por defecto en todas las distros de Linux y usando Chown podemos especificar el nuevo propietario bien sea por su nombre o por la identidad del usuario dentro del sistema (UID).
- -c: Este parámetro nos permite definir los cambios que tendrá el archivo.
- -R: Cambia de manera descendente el propietario de los directorios junto a su contenido.
- -v: (verbose) Nos despliega una salida más descriptiva de la información.
- --version: Nos despliega en pantalla la versión de Chown.
- --dereference: Este parámetro actúa sobre valores simbólicos en lugar de hacerlo en el destino.
- --reference: este parámetro cambia el propietario de un archivo tomando como referencia el propietario de otro archivo.
- -h: Cuando se trata de enlaces simbólicos, cambia el propietario del destino en lugar del enlace propiamente dicho.
La sintaxis que debemos tener en cuanta cuando usamos Chown es la siguiente:
chown (opciones) usuario(:grupo) archivo(s) o directorio(s)
Para este estudio usaremos Ubuntu.
A continuación, veremos algunos ejemplos de cómo usar Chown.
ls -lart Nombre_archivoHemos creado un archivo llamado solvetic.txt por lo cual ingresamos lo siguiente:
ls -lart solvetic.txtEsto desplegará el propietario asó como los permisos que tiene actualmente y la fecha de creación.
Ahora estableceremos que el propietario de ese archivo será root, para ello ingresamos lo siguiente:
chown root solvetic.txtAhora ejecutamos de nuevo ls -lart solvetic.txt y podemos ver el nuevo propietario:
Usar el comando ls – l (Nombre Archivo) para visualizar el grupo actual del archivo.En este caso usaremos ls -l solvetic.txt. A continuación, usaremos la siguiente sintaxis para la respectiva modificación:
chown :soporte solvetic.txt(Soporte es el nombre del nuevo grupo).
chown -R usuario carpetaEn este caso haremos que el usuario root sea el dueño de la carpeta, en este caso ingresamos lo siguiente:
chown -R root Solvetic
Por ejemplo, si el archivo solvetic.txt está dentro del grupo solvetic el nuevo grupo se llamará soporte. Para ello usaremos el parámetro –from
En primer lugar, usaremos ls -l solvetic.txt para visualizar el grupo al cual pertenece el archivo. Posteriormente usaremos la sintaxis –from:grupo actual) : (nuevo grupo) de este modo indicamos que si el archivo pertenece, en este caso, al grupo Solvetic pase a ser del grupo soporte.
En este caso tenemos dos archivos:
- solvetic.txt = cuyo propietario es solvetic
- pruebas.txt = cuyo propietario es root.
Usaremos la sintaxis:
chown –reference=solvetic.txt pruebas.txtPara que el propietario de pruebas.txt sea el mismo de solvetic.txt
Vemos como chown nos ofrece diversas alternativas para la gestión de los propietarios en los diferentes archivos y carpetas en ambientes Linux de forma sencilla y confiable.
6. Cómo usar el comando CHATTR
Dentro de las funciones que, como administradores de sistemas, personal de soporte o personal asociado al área de TI existe una muy importante que es la de modificar los atributos de una carpeta o archivo para incrementar sus niveles de seguridad, y el resultado que podemos obtener será el siguiente:
- Evitar accesos no autorizados a los archivos o carpetas
- Impedir la edición de los archivos
- Evitar el robo de información
- Llevar un control específico sobre las carpetas y archivos que están almacenados en el equipo
Aunque existen diversas formas para hacer esto hoy veremos un comando que tiene una amplia variedad de opciones para modificar los atributos en cualquier distro de Linux: Chattr
Una de las grandes ventajas de chattr es que protege los archivos incluso si la persona que intenta borrarlos tiene permisos de root.
Todos los atributos que pueden ser implementados con chattr son soportados por los sistemas nativos de Linux como son ext2, ext3, ext4 y btfrs lo cual permite que esta utilidad tenga un alcance mucho mayor de seguridad.
La sintaxis general para el uso de chattr es la siguiente:
chattr (operador) (atributo) (archivo)Donde tendríamos que cambiar los datos entre paréntesis por lo que deseemos implementar. Lo veremos en los ejemplos que vienen a continuación.
Como vemos debemos especificar ciertos parámetros que nos permiten definir el nivel de seguridad que tendrán nuestros archivos, son los siguientes por categoría:
- +: Permite que sean añadidos los atributos indicados a los atributos ya existentes en el archivo.
- -: Permite que se eliminen los atributos indicados a los atributos.
- =: Permite que los atributos indicados reemplacen los atributos existentes en el archivo.
- -V: Nos permite obtener una salida del comando chattr más descriptiva incluyendo la versión del programa.
- -R: Esta opción cambia de manera descendente los atributos de los directorios y sus contenidos.
- -v: Nos permite visualizar la versión del programa.
- a: Permite que el archivo solo pueda abrirse en modo de adjuntar para escritura.
- A: Permite que la fecha del último acceso o atime no sea modificada.
- c: Permite que el archivo se comprima de forma automática.
- d: Permite definir que el archivo seleccionado no sea candidato para el respaldo al usar la herramienta dump.
- D: Cuando hace referencia a un directorio permite que los datos sean escritos de forma sincrónica en el disco.
- e: hace referencia a que el archivo o carpeta usa extensiones (extents) usadas para la cartografía de bloques.
- j: Es usado en los sistemas de archivos ext3 y ext4 y permite establecer que el archivo sea escrito en el registro por diario cuando lo hemos montado con las opciones data=ordered o data=writeback.
- i: Permite que el archivo sea inmutable, es decir, que pueda ser borrado o editado.
- S: Indica que los cambios realizados en el archivo serán escritos de forma sincrónica en el disco.
- s: Con este atributo los bloques usados en el disco duro serán escritos con ceros (0).
- u: Al establecer este atributo cuando un archivo es eliminado su contenido queda almacenado para una posterior recuperación.
Ahora veamos ejemplos prácticos sobre cómo usar el comando chattr en las distros de Linux, para este caso usaremos Ubuntu.
Hemos creado una carpeta llamada Solvetic y un archivo llamado pruebas.txt. Si deseamos proteger estos archivos usaremos la siguiente sintaxis (Usaremos sudo para que tenga los privilegios de superusuario).
sudo chattr +i Solvetic/ prueba.txt
Como vemos, aunque no se ha desplegado información, los cambios han sido procesados.
Para comprobar los atributos que hemos implementado usaremos lsattr y veremos lo siguiente:
Si intentamos borrar el archivo pruebas.txt, siendo superusuario, veremos que no es posible, usaremos la siguiente sintaxis:
sudo rm prueba.txt
SI deseamos que nuestros archivos no tengan los atributos de chattr usaremos la siguiente sintaxis:
sudo chattr -i Nombre_archivoEn nuestro ejemplo sería lo siguiente:
sudo chattr -i Solvetic/ prueba.txtAhora podemos intentar borrar el archive y veremos que ya es posible debido a que hemos eliminado los atributos:
Del mismo modo podemos proteger archivos que son delicados para la óptima función del sistema como, por ejemplo:
/etc/passwd y /etc/shadow filesPara proteger estos archivos debemos ingresar lo siguiente:
sudo chattr +i /etc/passwd sudo chattr +i /etc/shadow filesOtro ejemplo de cómo podemos usar chart en Linux es usar el parámetro a el cual nos permite abrir el archivo en modo de adjuntar, para ello hemos creado un archivo llamado solvetic.txt
Posteriormente usaremos el comando:
sudo chartt +a Solvetic.txtPara establecer este parámetro al archivo.
Podemos ver los atributos del archivo usando lsattr.
Ahora intentamos editar algo en el archivo usado el comando echo y veremos que se despliega el mensaje Operación no permitida. Si ahora usamos los símbolos >> podremos adjuntar algo al texto.
De este modo tenemos diversas opciones usando chattr en Linux y brindar parámetros de seguridad adicionales para nuestros archivos y carpetas más importantes usando alguno de los atributos que nos ofrece chattr.
7. Permisos CHMOD: bloquear USB Linux
Como hemos visto Chmod es un comando interesante y fácil de usar a la hora de otorgar permisos a archivos y carpetas. Además de ello si estamos gestionando equipos en entornos de empresa, también vendría bien controlar el bloqueo de USB para evitar accesos indeseados a medios extraíbles. Para ello utilzaremos chmod permisos de la siguiente forma.
Hay que reseñar que los USB se montan en la ruta /media/ o bien en la ruta /run/media/ si nuestra distro usa systemd. Partiendo de ello lo que haremos será cambiar los permisos de esas rutas para que solo el usuario root pueda acceder.
Para ello ejecutaremos el comando chmod de la siguiente forma según corresponda como hemos dicho. Usamos chmod 700 para que el propietario tenga todos los permisos, pero el resto de usuarios no pueda acceder.
sudo chmod 700 /media/ sudo chmod 700 /run/media/
Con este proceso haremos que la unidad sí pueda ser montada pero el usuario no recibirá notificación de ello ni podrá acceder a su contenido. Solamente el usuario root tendrá permiso de ello.
Como hemos visto tenemos un manual con permisos Linux donde podemos gestionar el nivel de privacidad de archivos en Linux. El principal comando a destacar es el de Chmod permisos con los cuales configurar nuestros archivos y carpetas.
Super útil y completo para entender bien los permisos, las páginas no lo enseñan tan claro. Yo lo conocía pero conozco a unos cuantos que me lo van a agradecer.
saludos.