Cómo utilizar los comandos chmod y chown en la gestión de servidores

Los comandos chmod y chown son dos de los principales que debemos de conocer para el trabajo con los servidores Linux, que administremos, ya se trate de un VPS, un Servidor Cloud o un Dedicado. Sirven para gestionar permisos y propiedad de los archivos de los discos del servidor, algo muy importante de cara al buen funcionamiento de las aplicaciones desplegadas y, por supuesto, para la seguridad.  Aunque sean comandos independientes, los vemos juntos porque los problemas que solucionan están muy relacionados y debemos tener presentes algunas consideraciones para no equivocarnos a la hora de escoger el que realmente se debería usar, algo que explicamos a continuación.

El comando chmod

Sirve para gestionar los permisos de los archivos o directorios del sistema. Cuando usamos este comando debemos tener presentes los tres niveles de gestión de permisos que existen: Lectura, Escritura y Ejecución. Además, tener que tener en cuenta a los tres tipos de usuarios a los que podemos asignar permisos de manera independiente:

  • El dueño del archivo (o directorio).
  • El grupo al que pertenece.
  • Todos los usuarios en general.

Aclarados estos puntos podremos entender la sintaxis del comando chmod:

chmod [opciones] permisos archivo/directorio/s

Los permisos se pueden indicar de dos maneras, por medio de una sintaxis en números octales (base 8) o por medio de caracteres. Explicaremos la base octal, que puede resultar un poco más compleja, pero que resulta más abreviada y universal. En base octal los permisos se expresan con tres dígitos, del 0 al 7. El primer dígito corresponde a los permisos del usuario, el segundo a los del grupo y el tercero a los del resto de usuarios. Por ejemplo, posibles valores de permisos podrían ser 000, 644, 755, 777, etc.

Para entender lo que cada opción significa debemos saber que los números octales tienen su correspondencia con números binarios (ceros y unos). Un cero binario significa que no se tiene permiso y un uno binario que sí se tiene. La tabla de transformación de octal a binario sería la siguiente:

Número Binario Lectura (r) Escritura (w) Ejecución (x)
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111

Así, 0 significa que no hay ningún permiso y 7 que los tiene todos. Ahora, el permiso 000 significa que nadie tiene permiso para hacer nada con el fichero. 777 significa que todo el mundo tiene permisos para hacer cualquier cosa. 700 significa que existen permisos totales para el dueño del archivo, pero no para el resto de los usuarios. Un ejemplo completo de comando sería el siguiente:

chmod 764 archivo.txt

Esto indica que el usuario dueño tendrá permisos totales sobre el fichero archivo.txt. El grupo tiene permiso de lectura y escritura (pero no de ejecución) y el resto de usuarios solo tienen permiso de lectura. Como modificadores u opciones del comando encontramos una muy útil, que sirve para gestionar los permisos de manera recursiva, en todas las carpetas y subcarpetas de un directorio.

chmod -R 755 mi_carpeta

El comando chown

Este comando sirve para indicar quién es el dueño y el grupo de un archivo. Su uso es mucho más sencillo de chown. Vamos a verlo con un ejemplo directamente.

chown usuariox:grupoy archivo.txt

Como se aprecia, se puede especificar el usuario (en este caso usuariox) y el grupo (grupoy), separados por el carácter. A continuación, se indica el nombre del archivo o directorio afectados por esta nueva configuración.

Igual que chmod, se puede especificar que la operación se realice de manera recursiva.

chown -R www-data:www-data html

Así se especifica que la carpeta de nombre html y todo su contenido pertenecerán al usuario y grupo www-data.

Recomendaciones de uso

Como habíamos comentado, estos comandos son muy relevantes en lo que respecta a la seguridad de los ficheros y carpetas del servidor. Queremos finalizar por tanto con unos consejos importantes sobre la seguridad.

  • Nunca debemos asignar permisos 777. Aunque a veces pueda parecer que una aplicación web no funciona si no le asignamos esos permisos a una carpeta donde se desea escribir información, el nivel 777 es muy peligroso ya que estamos asignando permisos totales a esos archivos o carpetas. Generalmente, hay que buscar soluciones de permisos más restrictivas y, en cambio, modificar los propietarios o el grupo de los archivos o carpetas.
  • Generalmente, trabajamos con 644 para ficheros y 755 para directorios. Esos son los permisos más estándar para los archivos y carpetas del servidor. Esta opción genérica no tiene por qué ser la necesaria para todos los proyectos, pero siempre es una solución bastante apropiada.
    Nuevamente, si nuestra aplicación no funciona bien con este nivel de permisos, conviene estudiar quién se encuentra asignado como propietario y grupo de los archivos y carpetas. Un problema habitual es que el propietario sea root. Esto podría suponer que, cuando desde un lenguaje de programación se intenta acceder al archivo para su escritura, nos arroje un error de acceso. La solución adecuada nunca sería asignar 777 para que la aplicación funcione, sino encontrar el usuario y grupo adecuados para el contenido de la carpeta.