Comando Chmod en Linux (Permisos de archivo)

author
11 minutes, 3 seconds Read

En Linux, el acceso a los archivos se gestiona a través de los permisos de archivo, los atributos y la propiedad. Esto asegura que sólo los usuarios y procesos autorizados pueden acceder a los archivos y directorios.

Este tutorial cubre cómo utilizar el comando chmod para cambiar los permisos de acceso de archivos y directorios.

Permisos de archivos en Linux #

Antes de continuar, vamos a explicar el modelo básico de permisos de Linux.

En Linux, cada archivo se asocia con un propietario y un grupo y se asigna con derechos de acceso de permiso para tres clases diferentes de usuarios:

  • El propietario del archivo.
  • Los miembros del grupo.
  • Otros (todos los demás).

La propiedad del archivo puede cambiarse utilizando los comandos chowny chgrp.

Hay tres tipos de permisos de archivo que se aplican a cada clase:

  • El permiso de lectura.
  • El permiso de escritura.
  • El permiso de ejecución.

Este concepto permite especificar qué usuarios tienen permiso para leer el archivo, escribir en él o ejecutarlo.

Los permisos de los archivos pueden verse utilizando el comando ls:

ls -l filename.txt
-rw-r--r-- 12 linuxize users 12.0K Apr 8 20:51 filename.txt|- | | | | | | || | | | | | +-----------> 7. Group| | | | | +-------------------> 6. Owner| | | | +--------------------------> 5. Alternate Access Method| | | +----------------------------> 4. Others Permissions| | +-------------------------------> 3. Group Permissions| +----------------------------------> 2. Owner Permissions+------------------------------------> 1. File Type

El primer carácter muestra el tipo de archivo. Puede ser un archivo normal (-), un directorio (d), un enlace simbólico (l), o cualquier otro tipo especial de archivo.

Los siguientes nueve caracteres representan los permisos del archivo, tres tripletes de tres caracteres cada uno. La primera tripleta muestra los permisos del propietario, la segunda los permisos del grupo, y la última tripleta muestra los permisos de todos los demás. Los permisos pueden tener un significado diferente dependiendo del tipo de archivo.

En el ejemplo anterior (rw-r--r--) significa que el propietario del archivo tiene permisos de lectura y escritura (rw-), el grupo y los demás sólo tienen permisos de lectura (r--).

Cada una de las tres tripletas de permisos se puede construir con los siguientes caracteres y tienen un efecto diferente, dependiendo de si se establecen para un archivo o para un directorio:

Efecto de los permisos sobre los archivos

El archivo no puede ser ejecutado.

Permiso Caracter Significado sobre el archivo
Leer - El archivo no se puede leer. No puede ver el contenido del archivo.
r El archivo es legible.
Escribir - El archivo no puede ser cambiado o modificado.
w El archivo puede ser cambiado o modificado.
Ejecutar -
x El archivo puede ser ejecutado.
s Si se encuentra en el triplete user establece el bit setuid. Si se encuentra en el triplete group, establece el bit setgid. También significa que se establece la bandera x.
Cuando se establecen las banderas setuid o setgid en un archivo ejecutable, el archivo se ejecuta con los privilegios del propietario y/o grupo del archivo.
S Igual que s pero no se establece la bandera x. Esta bandera se utiliza raramente en los archivos.
t Si se encuentra en el triplete others establece el bit sticky.
También significa que la bandera x está establecida. Esta bandera es inútil en los archivos.
T Igual que t pero la bandera x no se establece. Esta bandera es inútil en los archivos.

Efecto de los permisos en los directorios (carpetas)

En Linux, los directorios son tipos especiales de archivos que contienen otros archivos y directorios.

Permiso Caracteres Significado en el directorio
Lectura - No se puede mostrar el contenido del directorio.
r Se puede mostrar el contenido del directorio.
(por ejemplo, se pueden listar los archivos dentro del directorio con ls.)
Escribir - No se puede alterar el contenido del directorio.
w Se puede alterar el contenido del directorio.
(por ejemplo, se pueden crear archivos nuevos, borrar archivos ..etc.)
Ejecutar - No se puede modificar el directorio.
x Se puede navegar por el directorio utilizando cd.
s Si se encuentra en el triplete user, establece el bit setuid. Si se encuentra en el triplete group establece el bit setgid. También significa que la bandera x está activada. Cuando la bandera setgid se establece en un directorio, los nuevos archivos creados en él heredan el ID del grupo del directorio (GID), en lugar del ID del grupo primario del usuario que creó el archivo.
setuid no tiene efecto en los directorios.
S Igual que s pero la bandera x no se establece. Esta bandera es inútil en los directorios.
t Si se encuentra en el triplete others establece el bit sticky.
También significa que se establece la bandera x. Cuando el bit sticky se establece en un directorio, sólo el propietario del archivo, el propietario del directorio o el usuario administrativo puede eliminar o renombrar los archivos dentro del directorio.
T Igual que t pero la bandera x no se establece. Esta bandera es inútil en los directorios.

Usando chmod #

El comando chmod tiene la siguiente forma general:

chmod MODE FILE...

El comando chmod permite cambiar los permisos de un archivo usando un modo simbólico o numérico o un archivo de referencia. Explicaremos los modos con más detalle más adelante en este artículo. El comando puede aceptar uno o más archivos y/o directorios separados por espacios como argumentos.

Sólo root, el propietario del archivo o el usuario con privilegios sudo puede cambiar los permisos de un archivo. Tenga mucho cuidado cuando use chmod, especialmente cuando cambie recursivamente los permisos.

Método simbólico (de texto) #

La sintaxis del comando chmod cuando se usa el modo simbólico tiene el siguiente formato:

chmod perms… FILE...

El primer conjunto de banderas (), banderas de usuarios, define qué clases de usuarios se cambian los permisos del archivo.

  • u – El propietario del archivo.
  • g – Los usuarios que son miembros del grupo.
  • o – Todos los demás usuarios.
  • a – Todos los usuarios, idéntico a ugo.

Si se omite el indicador de usuarios, el predeterminado es a y los permisos que se establecen por umask no se ven afectados.

El segundo conjunto de banderas (), las banderas de operación, define si los permisos deben ser eliminados, añadidos o establecidos:

  • - Elimina los permisos especificados.
  • + Añade los permisos especificados.
  • = Cambia los permisos actuales a los permisos especificados. Si no se especifican permisos después del símbolo =, se eliminan todos los permisos de la clase de usuario especificada.

Los permisos (perms...) pueden establecerse explícitamente utilizando cero o una o más de las siguientes letras: r, w, x, X, s y t. Utilice una sola letra del conjunto u, g y o cuando copie los permisos de una a otra clase de usuarios.

Cuando establezca permisos para más de una clase de usuarios (), utilice comas (sin espacios) para separar los modos simbólicos.

A continuación se muestran algunos ejemplos de cómo utilizar el comando chmod en modo simbólico:

  • Dar permiso a los miembros del grupo para leer el fichero, pero no para escribirlo y ejecutarlo:

    chmod g=r filename
  • Quitar el permiso de ejecución a todos los usuarios:

    chmod a-x filename
  • Retirar el permiso de escritura para otros usuarios:

    chmod -R o-w dirname
  • Retirar el permiso de lectura, escritura y ejecución para todos los usuarios excepto el propietario del fichero:

    chmod og-rwx filename

    También se puede conseguir lo mismo utilizando la siguiente forma:

    chmod og= filename
  • Dar permiso de lectura, escritura y ejecución al propietario del fichero, permisos de lectura al grupo del fichero y ningún permiso al resto de usuarios:

    chmod u=rwx,g=r,o= filename
  • Añadir los permisos del propietario del fichero a los permisos que tienen los miembros del grupo del fichero:

    chmod g+u filename
  • Añadir un sticky bit a un directorio determinado:

    chmod o+t dirname

Método numérico #

La sintaxis del comando chmod cuando se utiliza el método numérico tiene el siguiente formato:

chmod NUMBER FILE...

Cuando se utiliza el modo numérico, se pueden establecer los permisos para las tres clases de usuarios (propietario, grupo y todos los demás) al mismo tiempo.

El NUMBER puede ser un número de 3 o 4 dígitos.

Cuando se utiliza un número de 3 dígitos, el primer dígito representa los permisos del propietario del archivo, el segundo el grupo del archivo y el último todos los demás usuarios.

Cada permiso de escritura, lectura y ejecución tiene el siguiente valor numérico:

  • r (lectura) = 4
  • w (escritura) = 2
  • x (ejecución) = 1
  • sin permisos = 0

El número de permisos de una clase de usuario concreta está representado por la suma de los valores de los permisos de ese grupo.

Para conocer los permisos del archivo en modo numérico basta con calcular los totales de todas las clases de usuarios. Por ejemplo, para dar permisos de lectura, escritura y ejecución al propietario del fichero, permisos de lectura y ejecución al grupo del fichero y sólo permisos de lectura al resto de usuarios se haría lo siguiente:

  • Dueño: rwx=4+2+1=7
  • Grupo: r-x=4+0+1=5
  • Otros: r-x=4+0+0=4

Usando el método anterior llegamos al número 754, que representa los permisos deseados.

Para configurar las banderas setuid, setgid y sticky bit utilizamos un número de cuatro dígitos.

Cuando se utiliza el número de 4 dígitos, el primer dígito tiene el siguiente significado:

  • setuid=4
  • setgid=2
  • sticky=1
  • sin cambios = 0

Los tres dígitos siguientes tienen el mismo significado que cuando se utiliza el número de 3 dígitos.

Si el primer dígito es 0 se puede omitir, y el modo se puede representar con 3 dígitos. El modo numérico 0755 es el mismo que 755.

Para calcular el modo numérico también se puede utilizar otro método (método binario), pero es un poco más complicado. Saber calcular el modo numérico usando 4, 2 y 1 es suficiente para la mayoría de los usuarios.

Puede comprobar los permisos del archivo en la notación numérica usando el comando stat:

stat -c "%a" filename
644

Aquí hay algunos ejemplos de cómo usar el comando chmod en modo numérico:

  • Dar al propietario del fichero permisos de lectura y escritura y sólo permisos de lectura a los miembros del grupo y al resto de usuarios:

    chmod 644 dirname
  • Dar al propietario del fichero permisos de lectura, escritura y ejecución, permisos de lectura y ejecución a los miembros del grupo y ningún permiso al resto de usuarios:

    chmod 750 dirname
  • Dar permisos de lectura, escritura y ejecución, y un sticky bit a un directorio dado:

    chmod 1777 dirname
  • Establecer recursivamente permisos de lectura, escritura y ejecución al propietario del archivo y ningún permiso para todos los demás usuarios en un directorio dado:

    chmod -R 700 dirname

Usar un archivo de referencia #

La opción --reference=ref_file permite establecer que los permisos del archivo sean los mismos que los del archivo de referencia especificado (ref_file).

chmod --reference=REF_FILE FILE

Por ejemplo, el siguiente comando asignará los permisos del file1 a file2

chmod --reference=file1 file2

Cambiar recursivamente los permisos del archivo #

Para operar recursivamente en todos los archivos y directorios bajo el directorio dado, utilice la opción -R (--recursive):

chmod -R MODE DIRECTORY

Por ejemplo, para cambiar los permisos de todos los archivos y subdirectorios bajo el directorio /var/www a 755 se utilizaría:

chmod -R 755 /var/www

Operar sobre enlaces simbólicos #

Los enlaces simbólicos siempre tienen permisos 777.

Por defecto, cuando se cambian los permisos de los enlaces simbólicos, chmodse cambian los permisos del archivo al que apunta el enlace.

chmod 755 symlink

Es probable que en lugar de cambiar la propiedad del objetivo, se obtenga un error de «no se puede acceder a ‘symlink’: Permiso denegado».

El error se produce porque por defecto en la mayoría de las distribuciones de Linux los enlaces simbólicos están protegidos, y no se puede operar sobre los archivos de destino. Esta opción se especifica en /proc/sys/fs/protected_symlinks. 1 significa habilitado y 0 deshabilitado. Se recomienda no desactivar la protección de los enlaces simbólicos.

Cambiar los permisos de los archivos en masa #

A veces hay situaciones en las que necesitaría cambiar en masa los permisos de los archivos y directorios.

El escenario más común es cambiar recursivamente los permisos del archivo del sitio web a 644 y los permisos del directorio a 755.

Usando el método numérico:

find /var/www/my_website -type d -exec chmod 755 {} \;find /var/www/my_website -type f -exec chmod 644 {} \;

Usando el método simbólico:

find /var/www/my_website -type d -exec chmod u=rwx,go=rx {} \;find /var/www/my_website -type f -exec chmod u=rw,go=r {} \;

El comando findbuscará archivos y directorios bajo /var/www/my_website y pasará cada archivo y directorio encontrado al comando chmod para establecer los permisos.

Conclusión #

El comando chmod cambia los permisos del archivo. Los permisos se pueden establecer utilizando el modo simbólico o numérico.

Para obtener más información sobre chmod visite la página de manual de chmod.

Similar Posts

Deja una respuesta

Tu dirección de correo electrónico no será publicada.