Introducción
En Linux, el acceso a los archivos se administra mediante permisos, atributos y propietarios de archivos. Esto asegura que solo los usuarios y procesos autorizados puedan acceder a archivos y directorios.
Este tutorial muestra cómo usar el comando chmod para cambiar los permisos de acceso a archivos y directorios.
Permisos de archivo
En Linux, cada archivo está asociado con un propietario y un grupo y se le asignan permisos de acceso para tres clases diferentes de usuarios:
- El propietario del archivo.
- Los miembros del grupo.
- Otros (todos los demás).
El propietario del archivo se puede cambiar usando los comandos chown y chgrp.
Hay tres tipos de permisos de archivo aplicables a cada clase:
- Permiso para leer.
- El permiso de escritura.
- Permiso para ejecutar.
Este concepto le permite especificar qué usuarios pueden leer el archivo, escribir en el archivo o ejecutar el archivo.
Los permisos de archivo se pueden ver usando el comando ls:
ls -l filename.txt
-rw-r--r-- 12 noviello root 1239291 Aug 8 03:04 filename.log
|[-][-][-]- [------] [---]
| | | | | | |
| | | | | | +-----------> 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 de archivo especial.
Los siguientes nueve caracteres representan permisos de archivo, tres tripletes de tres caracteres cada uno. El primer triplete muestra los permisos del propietario, el segundo triplete los permisos de un grupo y el último triplete muestra los permisos de todos los demás. Los permisos pueden tener un significado diferente según el tipo de archivo.
En el ejemplo anterior, rw-r - r-- significa que el propietario del archivo tiene rw- permisos de lectura y escritura, el grupo y otros solo tienen r- permisos de lectura.
Cada uno de los tres tripletes de permisos puede tener diferentes efectos, dependiendo de si están configurados en un archivo o en un directorio.
Utilice chmod
La forma general del comando chmod tiene la siguiente forma:
chmod [OPTIONS] MODE FILE
El comando chmod le permite cambiar los permisos en un archivo usando un modo simbólico o numérico o un archivo de referencia. El comando puede tomar uno o más archivos y /o directorios separados por espacios como argumentos.
Solo el root, el propietario del archivo o el usuario con privilegios de sudo pueden cambiar los permisos de un archivo. Tenga especial cuidado al usar chmod, especialmente cuando cambie los permisos de forma recursiva.
Método simbólico
La sintaxis del comando chmod cuando se usa el modo simbólico tiene el siguiente formato:
chmod [OPTIONS] [ugoa…][-+=]perms…[,…] FILE
El primer conjunto de banderas [ugoa…], banderas de usuario, define para qué clases de usuario 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énticos a ugo.
Si se omite el indicador de usuario, el valor predeterminado es " a " y los permisos establecidos por umask no se ven afectados.
El segundo conjunto de indicadores [- + =], los indicadores de operación, define si los permisos deben eliminarse, agregarse o establecerse:
- - Elimina los permisos especificados.
- + Agregar los permisos especificados.
- = Cambiar los permisos actuales a los permisos especificados. Si los permisos no se especifican después del símbolo "= ", se eliminan todos los permisos de clase de usuario especificados.
Los permisos... los permisos se pueden establecer explícitamente utilizando cero o uno o más de los siguientes indicadores: r, w, x, X, s y t. Utilice una sola letra de u, g y o al copiar los permisos de una clase de usuarios a otro.
Cuando establezca permisos para más de una clase de usuario [,…], use comas (sin espacios) para separar los modos simbólicos.
A continuación, se muestran algunos ejemplos que otorgan a los miembros del grupo permisos para leer el archivo, pero no para escribirlo y ejecutarlo:
chmod g=r filename
Elimine los permisos de ejecución para todos los usuarios:
chmod ax filename
Elimine repulsivamente los permisos de escritura para otros usuarios:
chmod -R ow dirname
Elimine los permisos de lectura, escritura y ejecución para todos los usuarios excepto el propietario del archivo:
chmod og-rwx filename
El mismo resultado también se puede obtener utilizando el siguiente módulo:
chmod og= filename
Otorgue permisos de lectura, escritura y ejecución al propietario del archivo, permisos de lectura al grupo de archivos y ningún permiso a todos los demás usuarios:
chmod u=rwx,g=r,o= filename
Agregue los permisos del propietario del archivo a los permisos que tienen los miembros del grupo del archivo:
chmod g+u filename
Para agregar un bit adhesivo a un directorio determinado:
chmod o+t dirname
Método numérico
La sintaxis del comando chmod cuando se usa el método numérico tiene el siguiente formato:
chmod [OPTIONS] NUMBER FILE...
Al usar el modo numérico, puede establecer permisos para las tres clases de usuarios (propietario, grupo y todos los demás) al mismo tiempo.
El NÚMERO 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 de archivos 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 (escribir) = 2
- x (ejecución) = 1
- sin permiso = 0
El número de permisos de una clase de usuario específica está representado por la suma de los valores de los permisos para ese grupo.
Para conocer los permisos de archivo en modo numérico, simplemente calcule los totales para todas las clases de usuarios. Por ejemplo, para otorgar permisos de lectura, escritura y ejecución al propietario del archivo, permisos de lectura y ejecución para el grupo del archivo y permisos de lectura solo para todos los demás usuarios, haga lo siguiente:
- Propietario: rwx = 4 + 2 + 1 = 7
- Grupo: rx = 4 + 0 + 1 = 5
- Otros: rx = 4 + 0 + 0 = 4
Usando el método anterior llegamos al número 754, que representa los permisos deseados.
Para configurar los indicadores setuid, setgid y sticky bit use cuatro números de dígitos.
Cuando se usa el número de 4 dígitos, el primer dígito tiene el siguiente significado:
- setuid = 4
- setgid = 2
- pegajoso = 1
- sin cambio = 0
Los siguientes tres dígitos tienen el mismo significado que cuando se usa un 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 puedes usar otro método (método binario), pero es un poco más complicado. Saber cómo calcular el modo numérico usando 4, 2 y 1 es suficiente para la mayoría de los usuarios.
Puede verificar los permisos de archivo en notación numérica usando el comando stat:
stat -c "%a" filename
644
Veamos algunos ejemplos del modo numérico.
Otorgue permisos de lectura y escritura al propietario del archivo y para los miembros del grupo y todos los demás usuarios solo permisos de lectura:
chmod 644 dirname
Otorgue al propietario del archivo permisos de lectura, escritura y ejecución, permisos de lectura y ejecución a los miembros del grupo y ningún permiso a todos los demás usuarios:
chmod 750 dirname
Otorgue permisos de lectura, escritura y ejecución y un poco de pega a un directorio determinado:
chmod 1777 dirname
Establezca de forma recursiva permisos de lectura, escritura y ejecución para el propietario del archivo y ningún permiso para todos los demás usuarios en un directorio determinado:
chmod -R 700 dirname
Usando un archivo de referencia
La opción --reference = ref_file le permite configurar los permisos del archivo para que 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 de file1 a file2
chmod --reference=file1 file2
Modificación recursiva de permisos de archivos
Para operar recursivamente en todos los archivos y directorios en el directorio especificado, use la opción -R (--recursive):
chmod -R MODE DIRECTORY
Por ejemplo, para cambiar los permisos de todos los archivos y subdirectorios del directorio /var /www a 755, use:
chmod -R 755 /var/www
Operando en enlaces simbólicos
Los enlaces simbólicos siempre tienen 777 permisos.
De forma predeterminada, cuando cambia los permisos del enlace simbólico, chmod cambiará los permisos del archivo al que apunta el enlace.
chmod 755 symlink
Es probable que en lugar de cambiar la propiedad de destino, obtenga el error "No se puede acceder a 'enlace simbólico': Permiso denegado".
El error se produce porque de forma predeterminada en la mayoría de las distribuciones de Linux, los enlaces simbólicos están protegidos y no es posible operar en los archivos de destino. Esta opción se especifica en /proc /sys /fs /protected_symlinks. Si el parámetro se establece en 1, significa habilitado y 0 deshabilitado. Se recomienda que no desactive la protección de enlaces simbólicos.
Cambio masivo de permisos de archivos
A veces, hay situaciones en las que es necesario realizar cambios masivos en archivos y permisos de directorio.
El escenario más común es cambiar de forma recursiva los permisos de archivo del sitio web 644 y los permisos del directorio 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 hallazgo de comandos buscará todos los archivos y directorios en /var /www /sitio visto con el comando chmod para establecer permisos.
Conclusión
El comando chmod cambia los permisos del archivo. Los permisos se pueden configurar mediante el modo simbólico o numérico.
Para obtener más información sobre el comando chmod, escriba el siguiente comando:
man chmod