En esta entrada vamos a ver cómo funciona el sistema de permisos de ficheros y carpetas en un sistema operativo basado en Linux como Raspbian en Raspberry Pi.
Llevamos ya muchas entradas dentro de la sección de Raspberry Pi destinadas a ver el manejo fundamental del sistema operativo Linux, que nos permitirá abordar los tutoriales más avanzados.
Acostumbrarnos al sistema de permisos de ficheros y carpetas es otra de esas cosas con las que, tarde o temprano, nos va a tocar lidiar en Linux ya que es una de las características principales de este sistema operativo.
Como sabemos, una de las fortalezas de Linux es su seguridad. Una parte importante de la misma recae en su sencillo pero robusto sistema de permisos. Así que es importante entenderlos y manejarlos con soltura.
Mostrar permisos en Linux
Cada fichero y carpeta en Linux tiene un propietario, un grupo de propietarios, y una serie de permisos asociados a cada uno de estos roles. Podemos verificar los permisos simplemente listando los ficheros con este comando
#Mostrar permisos
ls -lh
Por ejemplo, el fichero ‘hola.txt’ vemos que tiene:
-rw-r--r-- pi pi
Esto significa que el propietario del fichero es el usuario ‘pi’, y el grupo de usuarios es ‘pi’
Por su parte, el principio de la línea representa los permisos que tienen los distintos roles usuarios sobre el fichero o carpeta.
- El primer caracter se reserva para permisos especiales
- Tres siguientes, permisos del usuario propietario (u)
- Tres siguientes, permisos del grupo propietarios (g)
- Tres últimos, permisos del resto de usuarios (o)
Por otro lado, los caracteres de cada uno de los roles carácter significa un permiso, siendo,
r
: lecturaw
: escriturax
: ejecución
Por tanto, en el ejemplo, los permisos significan,
-
: No hay permisos especialesrw-
: Usuario propietario puede leer y escribirr--
: Grupo propietario puede leerr--
: Otro usuarios pueden leer
Cambiar propietario
Para cambiar el usuario propietario de un fichero o carpeta usamos la orden ‘chown’ (change owner)
#cambiar usuario de archivo
chown usuario archivo
Podemos cambiar los permisos de todas las carpetas y subcarpetas de un directorio de forma recursiva con el parámetro ‘-R’
#cambiar usuario a todos los archivos de un directorio
chown -R usuario directorio
También podemos cambiar el grupo propietario de un fichero con el comando ‘chgrp’ (change group)
#cambiar grupo de archivo
chgrp grupo archivo
Finalmente, podemos cambiar de forma simultánea el usuario y grupo con el siguiente comando.
#cambiar usuario y grupo de archivo.
chown usuario:grupo archivo
Cambiar permisos
Para cambiar los permisos de un fichero empleamos el comando ‘chmod’. Este comando recibe los distintos parámetros
- Rol, u (usuario) / g (grupo) /o (otros)
- Acción, + (añadir permisos) / - (quitar permisos)
- Permiso, r (lectura) / w (escritura) / x (ejecución)
Así, por ejemplo, para dar permisos completos para todos los roles usaríamos
## dar permisos completos a todos los roles
chmod ugo+rwx archivo/directorio
Si queremos aplicar los permisos a todos los ficheros de un directorio y subdirectorio, usamos el parámetro ‘-R’.
Por ejemplo, si quisiéramos quitarle permisos de escritura y ejecución a otros usuarios de forma recursiva haríamos,
## quitar permisos de escritura y ejecución a otros usuarios
chmod -R o-wx directorio
Representación octal de permisos
Finalmente, también resulta muy frecuente trabajar con la representación octal de permisos. En esta se muestra la misma información pero agrupada en 4 dígitos octales, donde cada octal agrupa los 3 permisos (r,w,x) de cada rol de usuarios.
- Primer octal, permisos especiales
- Segundo octal, permisos de usuario propietario
- Tercer octal, permisos de grupo propietario
- Cuarto octal, permisos de otros usuarios
La equivalencia entre el octal y el equivalente en r-w-x es la siguiente.
OCTAL | R | W | X |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 |
2 | 0 | 1 | 0 |
3 | 0 | 1 | 1 |
4 | 1 | 0 | 0 |
5 | 1 | 0 | 1 |
6 | 1 | 1 | 0 |
7 | 1 | 1 | 1 |
Con la representación octal el comando ‘chmod’ recibe directamente el permiso deseado, en lugar de añadirlos con ’+’ o ’-‘.
Por ejemplo, para dar permisos totales al propietario, y ningún permiso a los otros roles haríamos
#asignar permisos 0700
chmod 700 archivo/directorio
Por ejemplo, si queremos dar permisos totales al usuario propietario, de lectura al grupo propietario, y ninguno al resto de usuarios, haríamos
#asignar permisos 0740 a fichero
chmod 740 directorio
Hasta aquí el tema de gestión de permisos. Al principio puede parecer engorroso, pero en realidad es un sistema muy robusto y sencillo.
Con un poco de práctica, en seguida le pillaréis el truquillo. Nos vemos en la siguiente entrada ¡Hasta pronto!