El comando chmod
en sistemas Unix y Linux se utiliza para cambiar los permisos de los archivos y directorios. Los permisos controlan quién puede leer, escribir o ejecutar un archivo o directorio. A continuación te ofrezco una guía completa sobre el uso de chmod
, sus opciones y ejemplos.
Conceptos básicos
Cada archivo o directorio en Linux tiene permisos asociados a tres tipos de usuarios:
- Propietario (
u
- user) - Grupo (
g
- group) - Otros (
o
- others)
Existen tres tipos de permisos para cada uno de estos usuarios:
- Lectura (
r
- read): Permite leer el contenido del archivo o listar los contenidos de un directorio. - Escritura (
w
- write): Permite modificar el contenido de un archivo o añadir/eliminar archivos en un directorio. - Ejecución (
x
- execute): Permite ejecutar un archivo o acceder a un directorio.
Estructura de permisos
Los permisos se visualizan mediante un formato de 10 caracteres, donde el primero indica si es un archivo o directorio (-
para archivo, d
para directorio), y los siguientes nueve indican los permisos para el propietario, grupo y otros, en ese orden.
Ejemplo de permisos:
-rwxr-xr--
- El propietario tiene permisos de lectura, escritura y ejecución (
rwx
). - El grupo tiene permisos de lectura y ejecución (
r-x
). - Otros solo tienen permisos de lectura (
r--
).
Modos de uso de chmod
Existen dos formas principales de utilizar chmod
:
- Modo simbólico: Se usan letras y operadores para modificar permisos.
- Modo numérico (octal): Se usan números para representar los permisos.
Modo simbólico
En este modo se usan las letras u
(usuario), g
(grupo), o
(otros) y a
(todos) junto con operadores para añadir (+
), quitar (-
) o establecer (=
) permisos.
Sintaxis:
chmod [opciones] permisos archivo_o_directorio
Ejemplos:
- Añadir permisos de ejecución al propietario:
chmod u+x archivo.txt
- Quitar permisos de lectura al grupo:
chmod g-r archivo.txt
- Asignar permisos de lectura y ejecución para todos (propietario, grupo y otros):
chmod a=rx archivo.txt
- Quitar permisos de escritura para otros:
chmod o-w archivo.txt
- Añadir permisos de escritura y ejecución para el grupo y otros:
chmod go+wx archivo.txt
Modo numérico (octal)
Los permisos pueden representarse en un número de 3 dígitos, donde cada dígito es la suma de valores para cada permiso:
- Lectura (
r
) = 4 - Escritura (
w
) = 2 - Ejecución (
x
) = 1
El valor se calcula sumando los números correspondientes para cada conjunto de permisos (usuario, grupo, otros).
Ejemplos:
- Permisos de lectura, escritura y ejecución para el propietario, lectura y ejecución para el grupo, y solo lectura para otros:
chmod 754 archivo.txt
Esto asigna los permisos:- Propietario:
rwx
(4+2+1=7) - Grupo:
r-x
(4+1=5) - Otros:
r--
(4=4)
- Propietario:
- Permisos de lectura y escritura para el propietario, sin permisos para el grupo ni otros:
chmod 600 archivo.txt
- Permisos de solo lectura para todos:
chmod 444 archivo.txt
Opciones adicionales
-R
o--recursive
: Aplica los cambios de forma recursiva a todos los archivos y directorios dentro de un directorio.
Ejemplo:chmod -R 755 mi_directorio/
-v
o--verbose
: Muestra una salida detallada de los archivos cuyos permisos han sido modificados.
Ejemplo:chmod -v 755 archivo.txt
-c
o--changes
: Similar a--verbose
, pero solo muestra los cambios que realmente se han realizado (si el archivo ya tenía los permisos no muestra nada).
Ejemplo:chmod -c 644 archivo.txt
--reference=archivo
: Cambia los permisos de un archivo o directorio basándose en otro archivo.
Ejemplo:chmod --reference=referencia.txt archivo.txt
Permisos especiales
Existen algunos permisos especiales que pueden aplicarse a archivos y directorios:
- SUID (Set User ID -
s
para el propietario): Permite que un archivo se ejecute con los privilegios del propietario.
Ejemplo para activar SUID:chmod u+s archivo.txt
- SGID (Set Group ID -
s
para el grupo): Permite que un archivo o directorio se ejecute con los privilegios del grupo.
Ejemplo para activar SGID:chmod g+s archivo.txt
- Sticky bit (
t
): Se usa comúnmente en directorios públicos para asegurar que solo el propietario de un archivo pueda eliminar o modificar sus archivos.
Ejemplo para activar el sticky bit:chmod +t /directorio_publico
Ejemplos prácticos
- Dar permisos completos al propietario y solo lectura para grupo y otros:
chmod 744 script.sh
- Permitir que todos los usuarios puedan leer, escribir y ejecutar un archivo:
chmod 777 archivo.txt
- Dar permisos de lectura, escritura y ejecución al propietario, sin permisos para los demás, de manera recursiva en un directorio:
chmod -R 700 mi_directorio/
- Añadir permisos de ejecución para el propietario y el grupo, pero quitar permisos de escritura para otros:
chmod u+x,g+x,o-w archivo.txt
- Aplicar permisos a un archivo basándose en los permisos de otro archivo:
chmod --reference=archivo_base.txt archivo_objetivo.txt
Resumen de modos octales
Permiso | Binario | Octal |
---|---|---|
Sin permiso | 000 | 0 |
Ejecución | 001 | 1 |
Escritura | 010 | 2 |
Escritura y ejecución | 011 | 3 |
Lectura | 100 | 4 |
Lectura y ejecución | 101 | 5 |
Lectura y escritura | 110 | 6 |
Lectura, escritura y ejecución | 111 | 7 |
Conclusión
El comando chmod
es una herramienta poderosa para gestionar los permisos de archivos y directorios en sistemas Linux y Unix. Al dominar tanto los modos simbólicos como los numéricos, puedes administrar eficientemente el acceso y control sobre los archivos de tu sistema.