En Linux los permisos de archivos y directorios son clave para ir dominando temas avanzados. Si eres administrador de sistemas, desarrollador o solo quieres aprender más sobre el tema de permisos, entonces estas en el post adecuado. De aquí saldrás con las herramientas necesarias que te ayudaran a desenvolverte por tu cuenta. Te sugiero que leas de inicio a fin, pero también practiques en una máquina virtual o WSL. Lo importante es que no te quedes con la teoría, sino que también te pongas manos a la obra. ¿Listo? GOOOOOO
Contenido
- Ver permisos de archivos y directorios
- Modificar permisos de archivos y directorios
- Permisos default en nuevos archivos y directorios
- Usuario y grupo propietario
Ver permisos de archivos y directorios
La forma más común de ver los permisos es con la terminal y el comando ls -l. El resultado contiene varias columnas que se explican a continuación:
$ ls -l
-rw-r--r-- 1 idword idword 177 Apr 13 13:52 create_dummy_file.cpp
El tipo de archivo indica si se trata de un archivo o directorio:
- “-” para archivos comunes (el que veras en la mayoría de los casos).
- “d” para directorios.
- “b” archivo de bloque.
- “c” archivo de caracteres.
- “p” archivo pipe.
- “s” archivo de socket.
- “l” enlace simbólico.
También es importante mencionar que en Linux todos los archivos pertenecen a un usuario y un grupo. De allí el nombre propietarios que se mostraba en la imagen anterior.
Antes de explicar la columna de permisos primero debes saber que existen 3 tipos que podrían considerarse básicos. Cada uno tiene un valor octal por defecto (esto te servirá después).
- r (read) – valor octal 4
- w (write) – valor octal 2
- x (execute) – valor octal 1
Ahora si veamos en detalle la columna de permisos:
Los permisos de “other” son para cualquier otro usuario o grupo diferentes al usuario y grupo propietarios.
Los permisos rwx actúan diferente cuando se trata de un archivo o un directorio.
Para archivos:
- “r” permite ver el contenido del archivo.
- “w” permite guardar cambios en el archivo.
- “x” permite ejecutar el archivo (script, programa).
Para directorios:
- “r” permite listar el contenido.
- “w” permite crear, renombrar y borrar archivos.
- “x” permite acceder al directorio, ejecutar un archivo o iniciar una tarea dentro del directorio.
Algunas notas para rescatar de lo anterior es que para borrar un archivo se necesita el permiso a nivel directorio. Para ejecutar archivos (scripts, programas, etc.) ocupas el permiso “x” a nivel directorio y archivo.
Genial, ahora tienes lo necesario para saber cómo obtener los permisos de un archivo o directorio. El siguiente paso por aprender es modificar los permisos.
Modificar permisos de archivos y directorios
El comando chmod es tu mejor amigo para modificar los permisos. Existen dos formas de hacerlo: Modo simbólico y Modo absoluto.
Permisos en modo simbólico
El modo simbólico es user friendly pues es sencillo de manejar y recordar. Esta forma de proporcionar permisos utiliza lo que se conoce como contextos.
Contextos de permisos:
- “u” para usuarios.
- “g” para grupos.
- “o” para otros.
- “a” para todos (all).
También se utilizan los llamados operadores de permisos:
- “+” para agregar uno o varios permisos.
- “-” para remover uno o varios permisos.
- “=” reemplaza los permisos actuales por los que se especifiquen.
Y finalmente se ocupan los atributos de permisos que ya conoces: rwx (read, write, execute).
La forma basica de usar chmod es:
$ chmod {CONTEXTO(s)_PERMISO}{OPERADOR DE PERMISO}{ATRIBUTO(s)} {ARCHIVO o DIR}
Si no se especifica el contexto de permiso el sistema asumirá que se usa “a” (all).
Ejemplos de modo simbólico
Agrega el permiso de ejecución para el usuario propietario:
$ chmod u+x MYSCRIPT
Remueve el permiso de ejecución para el usuario propietario:
$ chmod u-x MYSCRIPT
Agrega el permiso de escritura en el directorio para el grupo propietario:
$ chmod g+w MYDIR
Agrega el permiso de ejecución en el archivo para el usuario propietario, el grupo propietario y otros:
$ chmod +x OTHERSCRIPT
Asigna el permiso de lectura, escritura y ejecución para “otros”:
$ chmod o=rwx FILE1
Designa el permiso de lectura para “otros”, si el archivo ya tenía otros permisos estos serán reemplazados por el permiso “r”:
$ chmod o=r FILE1
Asigna el permiso de escritura al grupo propietario y otros:
$ chmod go+w FILEX
Asigna permiso de ejecución al usuario, grupo y otros. Si habia otros permisos, estos seran reemplazados y solo quedara activo el de ejecución:
$ chmod a=x FILEY
Asigna todos los permisos al usuario, asigna permiso lectura y ejecucion al grupo, asigna permiso de lectura a otros:
$ chmod u=rwx,g=rx,o=x file2.txt
Permisos en modo absoluto
Esta forma de proporcionar permisos hace uso de los números octales que van del 0 al 7. Cada permiso (rwx) tiene un valor octal asignado por defecto:
- r (read) – valor octal 4
- w (write) – valor octal 2
- x (execute) – valor octal 1
A partir de esos números puedes sumar los valores para asignar más de un permiso:
- 3 = asigna permiso “w” y “x” (2 + 1 = 3)
- 5 = asigna permiso “r” y “x” (4 + 1 = 5)
- 6 = asigna permiso “r” y “w” (4 + 2 = 6)
- 7 = asigna todos los permisos rwx (4 + 2 + 1 = 7)
El modo absoluto se usa en la forma:
$ chmod {OPERADOR DE PERMISO}{NUMERO OCTAL DE 1 a 3 DIGITOS} {ARCHIVO o DIR}
Por ejemplo:
$ chmod +740 MYFILE
El primer digito es para los permisos del usuario propietario, el segundo para el grupo propietario y el tercero para “otros”.
Similar al modo simbólico, puedes usar los operadores “-”, “+” y “=” antes del número. Es válido decir que el operador default es “=” en el modo absoluto ya que reemplaza todos los permisos con los que le especificas en el comando.
Usar los 3 dígitos es una práctica común pero también puedes usar 1 o 2 dígitos. El operador que uses juega un papel importante. Operadores “+” o “–” con un digito significa que estas modificando los permisos de “otros”. Si lo haces con dos dígitos entonces modificas los permisos del grupo y “otros”. Si el operador que usas es “=” entonces estarás asignando el valor final de los permisos, lo que puede llevar a remover los que ya existen.
Ejemplos de modo absoluto
Agrega todos los permisos al usuario, grupo y “otros”, chmod =777 y chmod 777 serian equivalentes para este escenario:
$ chmod +777 FILE
Agrega el permiso de ejecución en el archivo (solo para “otros”). Los demas permisos permanecen intactos (si es que había):
$ chmod +1 FILE
Remueve el permiso de escritura para el grupo propietario y remueve el permiso de ejecución para “otros”. Los demás permisos permanecen intactos (si es que había):
$ chmod -21 FILE
No hace nada, el equivalente es chmod +000:
$ chmod –000 FILE
Remueve todos los permisos (he aquí la importancia del operador):
$ chmod 000 FILE
Asigna todos los permisos como valor final al usuario y grupo propietario, asigna el permiso de lectura a “otros”:
$ chmod 774 FILE
Siempre que proporciones permisos es una buena práctica verificarlos con el comando ls -l o cualquier otro método que utilices para ver los permisos.
Permisos default en nuevos archivos y directorios
Ahora es tiempo de reflexionar sobre la existencia de nuevos archivos y directorios y su relación que tienen con los permisos. Aquí ya vamos entrando a las artes oscuras de Linux.
Muchos no se lo cuestionan, pero cada vez que creas un nuevo archivo o directorio, estos tendrán permisos predefinidos por el sistema.
¿Es posible cambiar esos permisos que vienen por defecto?. La respuesta es sí, el comando umask es nuestra herramienta para este propósito.
Lo primero por aprender es consultar el valor actual de los permisos default para archivos y directorios nuevos. El comando umask te ayudan a verificar esta información y se puede hacer en modo simbólico o numérico.
Permisos default en modo simbólico
¿Te es familiar? A estas alturas ya deberías saber leer el resultado del comando simbólico en umask.
$ umask -S
u=rwx,g=rx,o=rx
Permisos default en modo numérico
El resultado en el modo numérico puede parecer raro, pero acá te lo explico. Lo que pasa con umask –p es que te muestra los permisos haciendo una resta y por si no fuera poco lo hace en el sistema octal jaja (estos loquillos de Linux).
$ umask -p
umask 0022
Resaltar que el resultado numérico tiene 4 dígitos.
- El primer digito representa los permisos especiales SUID y SGID (ya hablaremos de ellos en otro momento).
- El segundo digito representa los permisos de usuario.
- El tercer digito representa los permisos de grupo.
- El 4 digito representa los permisos de “otros”.
Anteriormente ya había mencionado que los valores octales van del 0 a 7 y que los permisos rwx ya tienen un valor octal asignado por defecto. Si sumamos todos los valores esto nos da el 7 como el número mayor. Si analizamos nuevamente la salida de umask –S y convertimos los resultados a octal tendríamos algo así:
$ umask -S
u=rwx,g=rx,o=rx
u=421,g=41, o=41 #en octal
Posteriormente sumamos cada permiso por contexto separado:
u=7,g=5,o=5
Finalmente aplicamos la formula 7 – valor de contexto sumado, y llegaríamos al mismo resultado que umask –p:
u=7-7,g=7-5,o=7-5
u=0,g=2,o=2
022
$ umask -p
umask 0022
Modificar permisos default
Para modificar los permisos default con umask es posible usar los operadores “+”, “-” y “=” y contextos “u”, “g”, “o” y “a”, y atributos “r”, “w”, y “x” tal como en el modo simbólico de chmod. También es posible usar el modo octal, pero recuerda que aquí los permisos se aplican a la inversa, o mejor dicho haciendo la resta octal correspondiente y no se pueden usar los operadores como en chmod y el modo absoluto, pero si se puede especificar de 1 a 3 dígitos.
Ejemplos de umask
Asigna todos los permisos al usuario, permiso lectura y ejecucion al grupo y permiso de lectura a “otros”:
$ umask u=rwx,g=rx,o=x
Remueve el permiso de ejecución al usuario y grupo propietarios:
$ umask ug-x
agrega el permiso de escritura y ejecución al usuario y “otros”:
$ umask uo+wx
Asigna todos los permisos al usuario, grupo y “otros”:
$ umask 000
Designa los permisos lectura y escritura solo para “otros”:
$ umask 1
Asigna permiso de lectura al grupo, asigna permiso escritura y ejecución a “otros”:
$ umask 34
Asigna permiso de ejecución al usuario, grupo y “otros”:
$ umask 666
Remueve todos los permisos al usuario, grupo y “otros”:
$ umask 777
La principal diferencia entre chmod y umask es que chmod cambia permisos a archivos/directorios existentes, mientas que umask cambia los permisos a los archivos/directorios nuevos que van a ser creados.
Usuario y grupo propietario
Todos los archivos pertenecen a un usuario y grupo a los cuales se les considera propietarios. Siempre que creas un archivo o directorio, tu usuario y grupo primario serán los propietarios, pero esto lo puedes cambiar fácilmente.
Y ¿cuál es el propósito de cambiar el propietario de un archivo o directorio? Recuerda que cada archivo tiene permisos de usuario, grupo y otros. Al cambiar el propietario lo que estás haciendo es algo así como redirigir los permisos a un nuevo usuario o grupo. Un escenario común es cuando el administrador (root) crea una carpeta que solo debe ser accesible y contralada para un usuario en particular. Al crear la carpeta el usuario y grupo pertenecerán a root pero esto puede cambiarse para que el propietario sea el usuario para quien se va a designar dicha carpeta.
Cambiar usuario y grupo propietario
Para cambiar el usuario propietario se usa el comando chown y también lo puedes usar para cambiar el grupo. El comando requiere permisos de root, veamos algunos ejemplos.
Cambia el propietario por el usuario que se espeficique:
$ chown {usuario} {archivo/directorio}
Cambia el usuario y grupo propietario por el que se espefique:
$ chown {usuario}:{grupo} {archivo/directorio}
Cuando se crea un usuario se crea tambien un grupo al cual pertenecera el usuario (conocido como grupo primario). El siguiente comando cambia el usuario propietario por el que se especifique pero también asigna el grupo primario de dicho usuario:
$ chown {usuario}: {archivo/directorio}
Cambia el grupo propietario por el que se especifique:
$ chown :{grupo} {archivo/directorio}
El comando chgrp también te ayuda a cambiar el grupo:
$ chgrp {grupo} {archivo/directorio}
Continuara……
Comparte si te gustó.
Music, coffee, and coding <3