LPIC-1 Tema 104.5: Gestión de permisos y propiedad de archivos
Nueva entrega de artículo teórico-práctico sobre las certificaciones LPIC-1, para seguir avanzando y mostrando el camino para transformarte en un gran administrador de sistemas GNU/Linux. En este artículo se trata el tema 104.5, es decir, el que se dedica a la gestión de permisos y propiedades de los archivos.
Los candidatos que quieran realizar estos exámenes, se encontrarán con preguntas tipo test sobre este tema, en el que se evalúan las competencias básicas que todo sysadmin debería tener para saber cómo controlar el acceso a ficheros y la propiedad de los mismos. Tanto nuevos, como archivos ya creados que se deban modificar.
Esto incluye también permisos tanto en ficheros regulares y también en los especiales, así como en directorios. Por supuesto, se debe saber trabajar con modos especiales como SUID, SGID y el Sticky Bit, más allá de los normales. Por supuesto, modificar la máscara para la creación de archivos y el cambio de propietarios.
ÍNDICE:
Permisos o modos *nix
Los modos o permisos en Unix/Linux es una forma de ACL built-in de la que dota el propio sistema operativo. Es decir, una serie de bits o flags que tiene cada fichero y directorio existente y que indicarán lo que se puede o no se puede realizar sobre dicho archivo, así como quién puede hacerlo y quién no. Por tanto, son una medida de seguridad que puede ser complementaria a otras ACLs, o atributos / atributos extendidos de los que proveen los propios sistemas de archivos (FS).
Si se puede leer, el fichero se puede usar o se puede visualizar el contenido del directorio. Si se tiene permiso de escritura se podrá modificar e incluso eliminarlo. Y en cuanto a ejecución, de ser un binario se podrá ejecutar. Si intentas ejercer cualquier otro tipo de acción no permitida te mostrará un error tipo: Permission denied o Permiso denegado.
Estos permisos siguen un formato UGO (Usuario o propietario, Grupo y Otros). Eso quiere decir que se muestran en forma de truplas. Por ejemplo, 441 significa que el propietario puede leer, el grupo al que pertenece también y otros pueden ejecutar. Si se combinan permisos se sumarán los números. Es decir, un 765 (rwx rw- r-x) significaría que el propietario puede leer+escribir+ejecutar, el grupo podría leer+escribir, y otros podrían solo leer y ejecutar. Como ves, se pueden usar tanto en nomenclatura octal (número) como simbólica (letra).
Si te fijas en la salida del listado anterior, se muestran los permisos de cada uno de los ficheros y directorios. La primera letra es especial, indicará si se trata de un directorio (d), de un fichero (-), binario (b), archivo de especial de caracteres (c), pipe (p), socket de dominio (s), o de un enlace (l). Luego vienen las truplas de permisos y la columna 3 y 4 sería el nombre del propietario y del grupo al que pertenece (recuerda UGO, donde UG serían esos campos y O el resto de usuarios o grupos presentes).
Pero a esos file modes hay que agregar otros tres permisos especiales:
- Sticky Bit: para otros. Se puede asignar a ejecutables para indicar que el sistema los mantenga en SWAP para ejecuciones posteriores. Suelen ser muy empleados en /tmp o /var/tmp, pero suponen un riesgo para la seguridad. En SSOO antiguos mejoraba el rendimiento.
- Bit Setuid (Set user identification): para usuarios o propietarios. Es una extensión para el permiso de ejecución. El proceso de ejecución adquiere los permisos del usuario o propietario. Se debe usar con cuidado si no se quieren crear problemas de seguridad. Ya que el que ejecute el fichero adquiere durante la ejecución los privilegios de quien lo creó. Si fue root, eso serían permisos totales.
- Bit Setgid (Set group identificaction: para grupos. En este caso es como el anterior, pero a nivel de grupo. Lo que sí debes tener en cuenta es que si se aplica a un directorio todo el significado cambia. En ese caso, los subdirectorios y ficheros que contenga tendrán como grupo propietario el grupo propietario del directorio que los contiene, y no el que los creó.
Estos agregarían un carácter más al código antes citado, tanto a la nomenclatura octal (xxxx), pero no a la simólica (—). Por ejemplo, podrías encontrarte con códigos tipo 4777, rwS, etc. Los valores siempre pueden ser -, S, s, t, T, x, pero no varios al a vez…
Herramientas necesarias
Para ello, se deben manejar de forma ágil 4 sencillas herramientas…
chmod
La herramienta chmod (CHange MODe) puede cambiar el modo o permisos de directorios y ficheros. Es una herramienta sencilla, con la que operar:
#Quitar el permiso de escritura chmod -r ejemplo.txt #Poner permiso de ejecución chmod +x script.sh #Agregar permiso de lectura y escritura a un directorio chmod +rw prueba/ #Quitar permisos de ejecución de forma recursiva chmod -R -x /home/scripts #Agregar permiso de ejecución para el propietario chmod u+x app.c #Poner todos los permisos para propietario y ninguno para grupo y otros chmod u=rwx, go= heart.txt #Quitar permisos de escritura a todos (UGO) chmod a-w /home/malaga/py #Para los permisos especiales puedes usar t, s, S, T como en los casos anteriores. Ejemplos chmod -R -t /tmp chmod g+s /home/prueba #Igual si usas el sistema octal chmod -R 777 /home/prueba chmod 600 /bin/test chmod 0755 *
umask
El sistema tiene una máscara para otorgar los permisos, es decir, cuando no se especifican, el propio sistema dotará a los nuevos ficheros y directorios creados de unos permisos pre-establecidos. Tradicionalmente la máscara es 022 (Linux usa UPG o User Private Groups). Con el comando umask se podría alterar dicha máscara si lo necesitas, y de esa forma, todos los nuevos archivos tendrían unos permisos por defecto.
#Mostrar la máscara actual umask
Dentro del directorio /etc/login.defs tienes la opción umask configurada con la máscara que puedes alterar.
Debes saber que la máscara 022 o 002, o la que sea, actúa de un modo concreto. Por ejemplo, si los permisos máximos para un fichero son 777 y para un directorio 666, entonces aplicando una máscara 022 se quedarían en 755 y 644 respectivamente. Es decir, es una simple resta… Una máscara 000 no quitaría permisos, y una 777 los quitaría todos.
chown
La otra herramienta que puedes usar es chown (CHange OWNer), pero en este caso para alterar el propietario de un fichero o directorio. Por ejemplo:
#Poner como propietario a isaac de forma recursiva chown -R isaac /home #Poner un usuario y grupo a un fichero chown isaac:isaac /etc/skel
chgrp
De forma similar a la anterior, también existe una herramenta para cambiar de grupo. Esa es chgrp (CHange GRouP):
#Poner como grupo del UGO a hogar de forma recursiva chgrp -R hogar /home/byod #Poner un grupo al que pertenece un fichero concreto chgrp administracion presupuestos