Académique Documents
Professionnel Documents
Culture Documents
CAPÍTULO 6.
Permisos. Gestión de usuarios y grupos.
!
Linux es multitarea y multiusuario, y esto último indica que varios usuarios pueden estar a la vez en el sistema ejecutando
tareas simultáneamente, por lo tanto es necesario identificar los usuarios y las acciones que pueden llevar a cabo, y esto se hace a
través de las cuentas de usuarios y los grupos. La identidad del usuario junto al grupo/s al/a los que pertenece determina los derechos
de acceso a los ficheros, es decir, la forma en la que podrá hacer uso de ellos, si puede. En este capítulo vamos a estudiar la forma de
gestionar los usuarios y los grupos, así como los permisos de acceso a los ficheros del sistema. Pero... ¿cómo podemos cambiar los
permisos? ¿y el grupo y/o usuario al que pertenece un fichero? ¿Cómo añadimos, borramos o cambiamos usuarios y grupos?
Veámoslo con más detalle...
!
6.1. Permisos.
!
En los sistemas Unix, un fichero tiene un dueño (normalmente el usuario que lo creó) y un grupo al que pertenece. Partiendo
de esta estructura el sistema asigna permisos de uso para: el propietario, el grupo al que pertenece, y a resto de usuarios. Además,
para cada uno de los tres anteriores existen otros tres tipos de permisos básicos: lectura (r), escritura (w) y ejecución (x). C o m o
hemos visto en múltiples ocasiones a lo largo del libro, para poder ver estos permisos, del propietario y del grupo del fichero,
ejecutamos desde la consola: ls -l . Veamos un ejemplo:
!
La salida del comando ls del ejemplo anterior muestra varias cosas: que el fichero pertenece a root y al grupo root. El primer
guión por la izquierda indica el que el fichero es normal. Posibilidades para ese primer carácter:
manuel@turion:~> ls -l /etc/fstab!
-rw-r--r-- 1 root root 790 jul 26 13:12 /etc/fstab
!
d : indica que es un directorio. l : un enlace simbólico. c : un dispositivo de caracteres.
Además, la salida muestra los permisos para ese fichero. A partir de ahora cada vez que digamos “fichero” podemos estar
refiriéndonos también a cualquier tipo de fichero que hemos visto.
En Unix y derivados existen tres tipos de permisos aplicables a ficheros y directorios: lectura (r, read), escritura (w, write) y
ejecución (x, execution). Estos permisos, nueve en total, se agrupan de tres en tres: los tres primeros se asignan al usuario propietario
del fichero/directorio/enlace (u, user), los tres segundos se asignan al grupo principal al que pertenece el usuario propietario (g,
group) y los tres últimos se asignan al resto de usuarios (o, others).
!1
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
- Directorio: Podemos modificar el contenido del directorio. Podemos crear y borrar ficheros dentro del directorio.
Es decir, que los permisos de un fichero/directorio están condicionados por los permisos del directorio donde reside.
Ejemplo. Sea el directorio “.../restringido“ con los permisos rw-rw-rw- (lectura y escritura para el dueño, el grupo del dueño y el
resto), y sea el fichero “ejecutamesipuedes” con los permisos rwxrwxrwx. El fichero no se podrá ejecutar porque el directorio no
lo acepta. Con esto se consigue un nivel más de seguridad.
Antes de conocer los diferentes comandos para la manipulación conviene ver una tabla de equivalencia entre binario-octal-
permisos que nos ayudará a comprender y usarlos:
4 100 r--
5 101 r-x
6 110 rw-
7 111 rwx
!
Lo primero que tenemos que tener en cuenta es que vamos a usar numeración octal y que por lo tanto los dígitos sólo
llegarán hasta el número 7. Si no te acuerdas qué es esto será mejor que repases los primeros temas.
Como vemos en la tabla hay tres posiciones para los permisos y si nos fijamos la activación de un bit equivale a la activación
de ese permiso. Por otro lado un bit activado en una posición en binario equivale en octal a un número. Pongamos por ejemplo el 5
en octal, equivale a 101 en binario, es decir las posiciones 1 y 3 (de derecha a izquierda) que equivalen a los bit activos con valor 1 y
4, que suman 5. El permiso 5 significa lectura (r) y ejecución (x). Para hacerlo más claro diremos que la lectura (r) vale 4, la
escritura (w) vale 2 y que la ejecución vale (x) vale 1. Si sumamos obtenemos los permisos activados.
Ya sabemos que los permisos se agrupan de 3 en 3. Si aplicamos lo aprendido podemos formar los grupos de permisos
teniendo en cuenta que el dígito más significativo representan los permisos para el dueño, el dígito de en medio . Mejor con un
!2
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
ejemplo. Supongamos que un fichero tiene los permisos 754, esto significa que el dueño tiene todos los permisos sobre él, que los
miembros del grupo principal del dueño sólo de lectura (r) y de ejecución (x) y el que el resto sólo tiene de lectura (r) . Otro ejemplo:
660. En este caso tanto el dueño como su grupo podrán acceder al fichero para leer y escribir, pero en caso de ser un ejecutable no
podrán activarlo; para el resto de usuarios no se contemplan permisos.
!
Los bits “S”.
!
Existen otros tres permisos que dan un grado más de protección o de versatilidad, son: suid, sgid y el sticky bit. Estos
permisos que aparecen en el lugar del permiso de ejecución correspondiente, se activan anteponiendo a los permisos rwx otro más.
Por ejemplo suid vale 4, sgid 2 y el sticky bit 1. Por ejemplo:
$ chmod 4755
S —> rw-!
s —> rwx!
a) SUID (Set user id, establecer identificación de usuario). Existen ocasiones en las que el usuario que ejecuta un programa
no debería ejecutarlo con los privilegios propios, sino que debería hacerlo con los privilegios del dueño real, pero que a la vez
sólo tenga repercusión sobre sí mismo. Por ejemplo los comandos passwd o mount. Imagina que quieres cambiar tu contraseña,
pero el comando passwd pertenece a root y normalmente un usuario no puede ejecutar un programa del administrador. En este
caso passwd tiene el suid activado y se ve una “s” donde debería encontrarse el permiso de ejecución del propietario:
manuel@turion:~> ls -l /usr/bin/passwd!
-rwsr-xr-x 1 root shadow 77096 nov 29 2006 /usr/bin/passwd
!
Fijémonos en /bin/mount que también tiene el suid activado. Al tener el bit suid un usuario montará un sistema de ficheros,
si los permisos en /etc/fstab (que ya veremos el capítulo 8) lo permiten, usando el privilegio del administrador. Este permiso sólo
funciona con binarios y nunca sobre los directorios.
Debemos tener en cuenta que este permiso no tiene efecto sobre los directorios, pero sería muy útil para hacer un archivo
compartido por todos los usuarios donde puedan escribir.
!3
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
b) SGID (Set group id, establecer identificación de grupo). Este permiso es igual que el SUID sólo que en lugar de ejecutar
un fichero con los privilegios del propietario se hará con los privilegios del grupo al que pertenezca el fichero. Este bit se verá
en el bit de ejecución perteneciente al grupo. Mira el comando /usr/bin/wall.
Cuando un directorio tiene activado este permiso todos los ficheros que se creen en él pertenecerán al grupo propietario (del
directorio) sin importar cual es el grupo del usuario que crea el directorio. Este permiso es de gran utilidad cuando se trabaja con
directorios compartidos. Por ejemplo, si un usuario Pepe pertenece al grupo de Contabilidad y ha creado un directorio Dire con el bit
S de identificación de grupo activo, si otro usuario Lolo perteneciente a RecursosHumanos crea un fichero dentro de Dire, dicho
fichero pertenecerá al grupo de Contabilidad. Evidentemente para que Lolo pueda escribir tendrá que tener activo la escritura para los
“otros”.
!
- Para activar el sgid:
!
- Para desactivar el sgid:
c) Sticky Bit (bit de permanencia). Este bit se ve si está activo si en el lugar de ejecución de los “otros” aparece una “t”. El
Sticky Bit se utiliza sobre los directorios para tener una mayor seguridad sobre los ficheros contenidos en él. Cuando un
directorio tiene activado este permiso no importan los permisos que tengan los ficheros en el contenidos ya que sólo el
propietario del fichero y root podrán borrarlos. Este permiso permite que todos los usuarios con acceso a un directorio puedan
modificar el contenido de los ficheros pero que no puedan borrarlos a menos que sean su propietario.
chmod +t fichero
chmod -s fichero!
chmod -t fichero
Los ficheros con suid y sgid activos son una fuente de peligros y hace al sistema más vulnerable a ataques internos ya que
habrá usuarios que conscientemente intentarán acceder a acciones únicamente reservadas al superusuario. Una opción podría ser
eliminar esos ficheros, pero es una decisión equivocada, lo correcto sería encontrar aquellos ficheros que pueden crear una
vulnerabilidad y quitarles el bit s de usuario y grupo con el fin de que los usuarios normales no puedan usarlo.
!
!4
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
Permisos Permisos
700 u=rwx
650
540
2431
1654
660
1751
4771
7777
!
➢ Ejercicio 2. Busca en todo el sistema (como root) aquellos ficheros que tengan activo el bit suid o sgid. Identifica cuales de ellos
pueden crear una vulnerabilidad en el sistema.
➢ Ejercicio 3. Prueba el bit S de usuario. Desde la línea de comandos cambia tu contraseña ¿se puede? ¿a quien pertenece el
comando “/usr/bin/passwd” y qué permisos tiene? Sin cambiar de usuario intenta cambiar la contraseña de otro.Ejercicio 4.
Prueba el bit S de grupo. Como root: crea el directorio “/home/compartido”, actívale el bit de grupo, establece los permisos a
777. Como un usuario normal crea en él un fichero y un directorio. Cambia de usuario y prueba a escribir en él comparando
posteriormente los permisos, el usuario y grupo propietarios con el directorio padre. ¿Qué puede hacer el segundo usuario en ese
directorio y su contenido (crear/borrar/añadir)?
➢ Ejercicio 5. Prueba el sticky bit. Como root: crea el directorio “/home/stickybit”, actívale el sticky bit, establece los permisos a
777. Como un usuario normal crea en él un fichero y un directorio. Cambia de usuario y prueba a escribir en directorio
comparando posteriormente los permisos, el usuario y grupo propietarios con el directorio padre y también intentando manipular
lo creado por el primer usuario. ¿Qué puede hacer el segundo usuario en ese directorio y su contenido (crear/borrar/añadir).
!
6.2. Comandos para la manipulación de permisos.
!
Los únicos usuarios con derechos a cambiar los permisos de ficheros, sean cuales sean y sean quienes sea, son root y el dueño del
fichero.
Vamos a ver los comandos más usuales para el manejo de permisos y propiedad de ficheros:
− chown (change owner, cambiar propietario). Cambia el propietario de un fichero. El superusuario es el único que puede cambiar
de propietario un fichero que no le pertenece, en el resto de los casos el usuario tendrá que ser propietario del fichero.
!5
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
− chgrp (change group, cambiar grupo). Igual que el anterior pero cambia el grupo al que pertenece el fichero siendo el usuario que
lo invoca root o el dueño del fichero.
− chmod (change mode, cambiar modo). Cambia los permisos de un fichero del cual, el usuario que lo invoca es el propietario o es
root.
!
Hay varias formas de cambiar los permisos.
b) Usando los acrónimos de los permisos junto con “u” para usuario, “g” para grupos y “o” para otros. Repitamos el
ejemplo anterior.
!
− umask. Cuando un usuario crea un fichero o un directorio lo hace con unos permisos por defecto que no se han especificado
explícitamente, es decir, que lo hace el sistema automáticamente. El comando umask crea una “mascara” que quita los permisos
que queremos que tenga el fichero/directorio que se va a crear.
umask valor!
Veámoslo con un ejemplo. Sabemos que queremos que los ficheros/directorios por defecto no se crean con los permisos de escritura
¿verdad? compruébalo. En ese caso la máscara será:
umask 022!
Pero ¿cómo se forma la máscara? Es fácil, si 777 significa “todos los permisos para todo el mundo” y queremos que se quite el
permiso de escritura para el “grupo” y para los “otros” tendremos que poner el comando anterior. Otro ejemplo. Supón que queremos
que el dueño tenga todos, para el grupo únicamente se le conceda el permiso de lectura, para los otros ninguno, podemos realizar la
siguiente ecuación:
Todos los cambios que realices en la máscara tendrán únicamente efecto durante la sesión en curso, si quieres que esa máscara
perdure tendrás que modificar el fichero de configuración local al usuario (en su directorio: .bashrc o .profile) si sólo quieres que
afecten a ese usuario, o del sistema (/etc/profile) para que los cambios afecten a todo el sistema la próxima vez que se inicie).
!6
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
Ejercicios de permisos.
2. Crea el directorio direct, y activa su sgid intenta escribir en él siendo otro usuario.
3. Modifica el directorio direct del ejercicio anterior cambiando los permisos de grupo permitiendo todo y luego quitando el de
ejecución. Para los dos casos intenta entrar, crear un fichero y modificar el contenido de un fichero ya existente. Para añadir un
usuario a un grupo: usermod -aG grupo-al-que-añadir usuario .
4. Crea un fichero con el comando $ touch fiche. Ahora crea un enlace blando a ese fichero y modifica los permisos que no
permitan escribir en él. ¿Qué permisos prevalecen? ¿los del origen o los del enlace? Haz la prueba.
5. Crea un directorio $ mkdir direct. Ahora crea un enlace blando a ese directorio desde el escritorio. ¿Qué permisos tiene el enlace?
Modifica los permisos del enlace para que no se pueda acceder. ¿Cómo quedan los permisos del enlace y del enlazado? ¿Qué
permisos prevalecen? ¿los del origen o los del enlace? Haz la prueba. Borra el enlace.
6. Crea dos subdirectorios y dos ficheros dentro del directorio creado en el ejercicio anterior. Usando un único comando cambia los
permisos a “sólo lectura” tanto del directorio como de todo su contenido. Usa el parámetro -c. Para ello tendrás que buscar en la
ayuda del comando.
7. Crea un nuevo fichero de texto, escribe algo dentro de él, graba y ponle el permiso suid. Logeate/entra con el comando su
usuarionuevo como otro usuario y cambia el contenido del fichero. Reflexiona.
8. Crea un directorio añádele el sgid. Dale acceso total al grupo. Logeate/entra como un nuevo usuario que no pertenezca al grupo
de referencia del usuario con el que estabas trabajando. Con el nuevo usuario intenta crear un fichero dentro del directorio o
modificar uno existente. Reflexiona.
9. Crea un directorio dentro /home que vas a llamar “compartido”. Este directorio no va a pertenecer a un usuario sino a un grupo,
por lo tanto quita los permisos para los “otros”.
10. El comando chown también permite cambiar el grupo propietario. Busca información de cómo hacerlo y aplícalo a un nuevo
fichero.
11. Activando el sticky bit para un directorio y dándole a este los permisos 1753, conseguimos que el propietario tenga control total
sobre él, que el grupo sólo pueda ver y entrar y que “los otros” puedan entrar, escribir y borrar. ¿Pero esto sucede esto también
desde el entorno gráfico? Preguntado de otro modo ¿un usuario de “los otros” puede borrar desde el entorno gráfico un fichero que
haya dejado en ese directorio?
!
6.3. Gestión de usuarios y grupos.
Como hemos dicho en la introducción del capítulo, Linux/Unix es multiusuario, es decir que se permite a más de un usuario
el uso del sistema al mismo tiempo y a la vez. “Al mismo tiempo” porque lo dos podrán estar trabajando en el mismo instante de
tiempo desde distintos terminales/ordenadores, y “a la vez” porque sus procesos pueden estar ejecutándose sin tener que interferir en
el resto de usuarios. Esta cualidad hace necesaria un buen control sobre los datos y su estructura, eso ya lo hemos visto en el punto
anterior, pero también hace necesario tener herramientas para crear y eliminar usuarios y grupos, cambiarlos, etc... En este punto
vamos a ocuparnos de ello.
!7
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
Cuando se invoca el bash en un login de shell interactivo, o no interactivo con la opción --login, primero se lee y
ejecutan los comandos del fichero /etc/profile, le sigue $HOME/.bash_profile, $HOME/bash_login y $HOME/.profile.
Cuando un shell interactivo que no es un login es ejecutado, bash lee y ejecuta /etc/bashrc (o /etc/bash.bashrc) y
también $HOME/.bashrc.
!
- $HOME/.bash_profile
La existencia de este fichero se debe a estar seguro de la ejecución de los dos siguientes: profile y bashrc.
- profile.
Es un fichero que define variables de entorno necesarias para cada sesión. Existen dos ficheros para cada usuario:
- bashrc.
Este fichero se ejecuta cada vez que ejecuta un comando. Hay dos.
1) /etc/bashrc Se ejecuta cada vez que un usuario ejecuta un comando del bash.
2) $HOME/.bashrc Personal a cada usuario, también se ejecuta cada vez que un usuario ejecuta un comando
Existen dos ficheros con este nombre: $HOME/.bashrc y /etc/bashrc. Ambos son scripts, es decir, ficheros de texto
con órdenes ejecutables y modificables en cualquier editor de textos. La ejecución del fichero $HOME/.bashrc sólo afecta al
usuario al que pertenece, sin embargo el que está en /etc afecta a todos. Además estos ficheros se ejecutan:
b) $HOME/.bashrc: se ejecutará cada vez que el usuario al que pertenece haga uso del BASH.
- login.defs.
Este fichero situado /etc/. Configura las opciones del login de los usuarios. Veamos algunos de los parámetros más
importantes (ten en cuenta que no tiene por qué está por orden) :
a) Seguridad.
SU_WHEEL_ONLY yes Sólo los usuarios que pertenezcan al grupo “wheel” podrán hacer “su”
!8
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
!
!
!
!
!9
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
c) Mensajes.
!
- adduser.conf.
Cuando añadimos un nuevo usuario el sistema lee un archivo de configuración para saber qué debe pedir y qué debe crear.
Este archivo es /etc/adduser.conf en los sistema derivados de Debian, en SUSE está en /etc/default/useradd. adduser.conf también
hace uso de variables que han sido definidas durante el proceso de arranque en el fichero /etc/login.defs. Veamos algunos de los
parámetros más importantes:
a) DSHELL=/bin/bash. Indica cual va a ser su intérprete de comandos. En este caso el más usado: bash.
c) GROUPHOMES=no. Establecida a “yes” cuando se crea un usuario su directorio se creará dentro de /home/nombredegrupo.
Establecido a “no”, que es como está por defecto, el directorio se creará directamente dentro de /home.
d) SKEL=/etc/skel. Cuando se crea un usuario con adduser se deben copiar una serie de estructuras de directorios y ficheros de
configuración que están aquí, en skel. Si añades el usuario mediante la herramienta de creación de usuarios del entorno gráfico lo
que se crea en el directorio de usuario no tiene porqué ser igual que lo que hay en skel.
e) USERGROUPS=yes. Esta opción indica que cuando se cree el usuario se le asigne a un nuevo grupo con su mismo nombre,
es decir, que el usuario y el grupo al que pertenece por defecto tendrán el mismo nombre. A estos grupos se les llama “grupos
privados”. No tiene mucho sentido que esta opción esté a “yes” y que GROUPHOMES también.
f) QUOTAUSER="". Establece si el usuario tendrá cuotas de disco o no. Las cuotas de disco se verán en unos capítulos más
adelante.
g) EXTRA_GROUPS=””. Indica que cada usuario además de pertenecer a los que se indiquen explícitamente pertenecerá
también desde un principio a los aquí indicados. Esta opción es importante porque simplifica mucho el crear usuarios de
escritorio que pueden pertenecer al perfil de usuarios de escritorio. Si se quiere que EXTRA_GROUPS tenga efecto SIEMPRE
además de descomentar dicha línea hay que activar ADD_EXTRA_GROUP=1. O si se quiere añadir esos grupos extra de forma
puntual habría que añadir a “adduser” la opción “--add_extra_groups”
!
- passwd, group, shadow y gshadow.
Estos ficheros situados en el directorio /etc registran los usuarios existentes en el sistema. Originalmente las contraseñas se
almacenaban encriptadas en passwd, pero esto ha cambiado para ser almacenadas en shadow. El fichero group contiene la
información necesaria sobre los grupos existentes en el sistema. La configuración de cada uno es:
• x: contenía la contraseña.
!10
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
manuel:x:1000:100:manuel:/home/manuel:/bin/bash
!
Para deshabilitar un usuario y que no pueda entrar basta con poner un asterisco (*) donde está la equis (x).
!
b) shadow. usuario : contraseña_cifrada : d1 : d2 : d3 : d4 : d5 : d6 : reservado
• contraseña_cifrada: es la contraseña encriptada, nunca habrá dos iguales ni siquiera repitiendo la clave.
• d2: nº de días que deben pasar hasta que se pueda cambiar la contraseña.
• d3: nº de días que deben pasar para que caduque la contraseña y deba ser cambiada.
• d4: nº de días de antelación con los que avisará el sistema de la caducidad de la contraseña.
• reservado: campo reservado por si hace falta añadir alguna otra información futura.
manuel:$1$KfNtvOJb$qFahz.f8zYyotjToffBFk.:13663:0:99999:7:-1::
!
Fíjate en que para no tener que deshabilitar la cuenta, el campo d5 vale -1.
!
Para deshabilitar un usuario y que no pueda entrar basta con poner un signo de admiración de cierre (!) al principio de la línea.
También es posible impedir la entrada de grupos, desde lugares concretos, a ciertas horas...
Ya lo veremos más adelante en el capítulo dedicado a la Seguridad y PAM.
!
!
!11
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
users:x:100:manuel!
vboxusers:!:1000:manuel
!
d) gshadow. Es similar a group pero registra contraseñas de grupo. La única diferencia es que tendrá una contraseña encriptada en
el segundo campo o el carácter “!” (admiración de cierre).
!
➢ Ejercicios.
Para los siguientes ejercicios crea dos usuarios que te permitirán realizar todas las pruebas sin que afecten a tu usuario
normal. Por ejemplo: andromeda y casiopea.
1. Modifica el fichero shadow para que un usuario con el que realizas las pruebas se vea obligado a cambiar las contraseña todos los
días. Imagina que estás administrando un sistema de alto riesgo de ataque ¿qué usuario debería cambiar la contraseña cada día?
2. Modifica el fichero shadow para que el sistema avise con 7 días de antelación de la obligatoriedad de cambiar la contraseña en el
periodo que te indique. Para probar tendrás que ir variando la fecha y entrar y salir con el usuario indicado.
3. No permitas usuarios con más de 1 día de demora en cambiar la contraseña una vez esté caducada: deshabilítalos.
4. Deshabilita dos usuarios de forma distinta y prueba en qué se diferencian los mensajes del sistema.
!
!
Administración de usuarios y grupos.
Para la administración de los usuarios y los grupos, Linux proporciona diversos comandos. Veámoslo:
− useradd (añadir usuario). Permite añadir un usuario sólo añadiendo su login y quedando, si se quiere, los demás aspectos para una
posterior configuración. Si alguno de los campos, salvo la contraseña, se quiere dejar en blanco bastará con pulsar
sucesivamente la tecla “ENTER”. useradd tiene múltiples opciones, destacaremos la posibilidad de especificar el directorio home
(-d), el directorio esqueleto a partir del cual se puede formar el del nuevo usuario (-k), la contraseña (-p), el grupo al que va a
pertenecer por defecto (-G), se puede decir en el momento de la creación cuando expirará la cuenta (-e) usando el formato de fecha
YYYY-MM-DD. Ejemplo de creación de un usuario llamada “angustias”:
!
!12
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
Este comando está prácticamente en desuso porque para crear al completo el usuario hay que realizar a mano cosas como: la creación
de su estructura de directorios, la contraseña, etc... si no se especifican como parámetros.
− adduser (añadir usuario). Permite añadir usuarios sin más que indicarle el nombre login. Es un método más cómodo que el
anterior ya que el sistema irá pidiendo los datos necesarios para completar los campos.
adduser anonimo
− userdel (borrar usuario). Borra un usuario. Se puede borrar todo rastro de directorio con la opción (-r), incluso se puede forzar el
borrado en el caso de que el sistema no permita la eliminación por la existencia de ficheros que no son de propiedad del usuario (-
f). Este comando/script usa el fichero /etc/login.defs.
− usermod (modificación de una cuenta de usuario). Se pueden variar las características de las cuentas de los usuarios. Cambiar su
home (-d), volver la cuenta inactiva un número determinado de días (-f), cambiar el grupo (-G), cambiar la fecha de expiración (-
e) en formato YYYY-MM-DD, cambiar el propio login del usuario (-l), bloquear (-L) o desbloquear (-U) una cuenta, o cambiar la
contraseña (-p) entre otras cosas.
− passwd (cambia la contraseña). Este comando cambia la contraseña de usuarios y grupos. Sólo root puede cambiar la contraseña
de todos los usuarios, y por supuesto, cada usuario puede cambiar la suya cuando quiera y según las condiciones en el fichero /etc/
passwd en la línea correspondiente. No se deben poner contraseñas fáciles, lo mejor es la combinación de números y letras
evitando palabras que puedan encontrarse en el diccionario o que pertenezcan a tu círculo reducido: fechas destacadas personales/
familiares, nombres de conocidos o familiares, el pin del móvil, etc... Un ejemplo podría ser: Ecnlsnald3TeFde2 = “Esta
contraseña no la sacas ni a la de 3 Trabajo en Fuengirola desde el 2005”. Esta contraseña está formada por las primeras letras de
cada palabra pero para ponerlo más difícil podrías escoger las segundas o las últimas.
− chpasswd (cambiar contraseña). Permite cambiar una serie de contraseñas leyendo de un archivo el par: usuario y contraseña.
Muy útil cuando hay que cambiar la contraseña de múltiples usuarios. Sólo root puede hacerlo. El fichero debe estar en modo
texto y con el formato: usuario:contraseña.
− groupadd (añadir grupo). Este comando nos permite añadir grupos nuevos al sistema. Existen algunas opciones que nos pueden
ayudar a administrar los grupos como, por ejemplo, añadir una contraseña (-p).
− groupmod (modificar un grupo). En OPENSUSE: con el uso de este comando es posible añadir un usuario a un grupo (-A) y
eliminarlo (-R), cambiar la contraseña del grupo (-p) y crear un directorio donde por defecto se introducirán los nuevos usuarios (-
P).
− groupdel (permite eliminar un grupo). Elimina un grupo del sistema siempre y cuando no tenga usuarios que tengan a dicho grupo
como primario.
− gpasswd (contraseña de grupo). De poca utilidad. Cada grupo puede tener administradores, miembros y contraseñas. Con
gpasswd podemos añadir administrador/es aun grupo (-A) y miembro/s (-M), eliminarlos (-d) y también la contraseña (-r). Sólo el
administrador puede cambiar la contraseña de un grupo. Un administrador de grupos es útil para delegar funciones de gestión de
grupos a usuarios de confianza. Dicho administrador podrá añadir y eliminar usuarios al grupo.
− newgrp (nuevo grupo). Permite a un usuario cambiar a otro grupo siempre y cuando no tenga contraseña.
− sg (ejecutar como otro grupo). Permite ejecutar un comando como si fuese otro grupo.
sg grupo -c comando
!13
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
!
Otros comandos útiles para el manejo de usuarios.
!
− id (identificación). Muestra información sobre el usuario que lo ejecuta como el uid, gid, etc…
− who (¿quien está ahí?). Te muestra los usuarios que están conectados al sistema.
− w (¿qué están haciendo?). Te muestra los usuarios que están conectados al sistema y lo que están haciendo, es decir, los procesos
que están ejecutando.
!
Ejercicios.
!
1. ¿Puede un usuario pertenecer a más de un grupo? Razona tu respuesta.
2. En el sistema que estás usando ¿a que grupos se asignan los usuarios por defecto cuando se crean?
3. Sin usar adduser, useradd o groupadd vamos a añadir “a mano” nuevos usuarios y grupos manipulando los ficheros adecuados.
Añade un usuario “hawking” al grupo “grupohawking”, ambos no existentes. Pista: recuerda que la existencia de un usuario debe
reflejarse en los ficheros passwd, shadow, group y gshadow como mínimo; que los grupos y los usuarios que pertenecen a ellos
también deben existir en los ficheros group y gshadow (en derivados de Debian); además, cada usuario debe tener un directorio
personal cuyo contenido debe ser el de /etc/skel (ficheros y directorios, también los ocultos) que debe pertenecerle a él y a su
grupo. Si el directorio skel no contiene nada (según qué versión usemos) crea los siguientes directorios dentro de él: Escritorio,
Documentos, Imagenes (sin la tilde), Descargas y Compartido.
4. Crea tres nuevos usuarios: uno, dos y tres. Utiliza los comandos que has aprendido: useradd o adduser.
6. Añade el usuario uno al grupo g1, el dos a g2 y el tres a g3. Mira el fichero correspondiente y elimina los de los grupos que tienen
en común de forma que cada uno sólo pertenezca al que le acabamos de añadir. Cambia el grupo propietario de los directorios
personales de los usuarios uno, dos y tres a los grupos g1, g2 y g3 respectivamente. Así, el directorio /home/uno tendrá como
usuario propietario: uno; y el grupo g1 como grupo propietario.
7. Añade el usuario uno al grupo g2 y g3, el dos al g3. Está claro que el usuario tres no podrá acceder al directorio de uno ¿o sí?
Comprueba si tres puede acceder al directorio de uno y en tal caso impídelo.
8. Crea los siguientes grupos: informatica, lengua, matematicas, idiomas y direccion (sin tildes). Modifica ahora el fichero
adduser.conf para que cada usuario que se añada a partir de ahora tenga su directorio home dentro de cada directorio del grupo
correspondiente. Quizás tengas que crear el directorio del grupo tú mismo antes de añadir los usuarios. Crea ahora dos usuarios
para cada grupo de los anteriores. Haz las modificaciones oportunas para permitir que los usuarios del grupo de direccion puedan
entrar en los demás, pero a su vez restringiendo al resto de los usuarios pertenecientes a los otros grupos el acceso a direccion, ni
siquiera se puede permitir un cambio momentáneo de grupo con newgrp.
9. Crea para cada uno de los grupos creados en el ejercicio anterior un administrador de entre los usuarios que pertenecen al grupo.
Para crear un usuario con un grupo que ya existe usa el comando:
!14
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
11. Abre varios terminales, al menos tres, y entra en cada uno con un usuario diferente. Cada uno de ellos abrirá un fichero diferente
dentro de tu pendrive o cdrom. Usa los comandos who y w para ver quien está conectado. Usa también los comandos fuser para
ver qué usuarios están usando un sistema de ficheros montado, por ejemplo tu pendrive. Emplea el comando lsof para que muestre
que ficheros están abierto en un sistema de ficheros montado.
12. Modifica los usuarios creados en el ejercicio 8 para deshabilitar su cuenta el día 1 del mes próximo. Cambia la fecha del sistema y
comprueba si puedes entrar.
!
6.4. ACL (Access Control List).
!
En los sistemas Unix, y Linux es uno de ellos, los permisos se basan en el modelo conocido como UGO: Usuarios/Users,
Grupo/Group y Otros/Others. Siempre se podrá calificar a alguien dentro de estas tres categorías, pero eso no quiere decir que esta
forma sea inmejorable. Supongamos que tenemos alguien que pertenece al grupo de los “Otros” y quieres darle la posibilidad de ac-
ceder a ficheros o/y directorios ¿cómo puedo hacerlo? porque con el modelo UGO no es posible. Para ello nacen las ACL (Access
Control List / Listas de Control de Acceso). Con las ACLs se puede especificar un grupo o usuario, o conjunto de estos, qué puede
hacer sobre un determinado fichero o directorio, y su contenido, mediante el uso de una lista de permisos denominada ACEs (Access
Control Entrance / Entradas de Control de Acceso). Este sistema se usa en distintos sistemas, no solo en Linux, por ejemplo en Win-
dows y su NTFS o Solaris.
a) El paquete fileutils. Normalmente este paquete suele venir instalado en todas las distribuciones, pero quizás quieras verificarlo.
b) El fichero /etc/fstab contiene todos los sistemas de ficheros que están disponibles para tu sistema. Deberás añadir la opción acl
para usarlo o noacl para impedir su uso. En algunos sistemas al incluir la opción acl al punto de montaje, el sistema lo cambia
por user_xattr en el fichero /etc/mtab. Una entrada del fichero /etc/fstab podría quedar tal que así:
Los sistemas de ficheros Ext2/Ext3 y XFS imponen un máximo de 32 ACL y 25 respectivamente, y ReiserFS y JFS de 8192.
Esto se hace para impedir que redunde en una caída de rendimiento del sistema por un exceso de comprobaciones simultáneas.
!
Ejercicios.
Busca información sobre:
1. ¿A cuanto asciende el máximo de entradas en el sistema de ficheros Ext4?
2. ¿Existe algún fichero donde se almacenen las ACLs?
!15
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
3. Si /home está separado de la raíz y está montado ¿cómo puedo activar las ACLs sin tener que desmontar o reiniciar?
!
Conceptos básicos.
!
Cuando un nuevo objeto se crea (fichero, directorio, fifo…) por defecto hay que asociarle unas entradas que definan quién
puede acceder y qué permisos tiene, es decir, qué se puede hacer en él.
tipo:cualificador:permisos
a) tipo puede ser usuario (u), grupo (g), otros (o) o una máscara (m).
c) permisos son los permisos que tendrá el usuario, el grupo o la máscara y son de tipo rwx.
!
Antes de comenzar debemos aprender unos conceptos previos que nos serán de utilidad al consultar la ayuda del sistema
sobre ACL: man acl.
Pueden existir cero o más entradas de ACL_USER y ACL_GROUP, ya que podemos dar permisos a usuarios y grupos espe-
cíficos indistintamente.
ACL_MASK sólo existirá OBLIGATORIAMENTE cuando exista ACL_USER o ACL_GROUP, en otro caso es opcional, es
decir, que se creará una máscara para cuando un usuario que no es el propietario, o un grupo que no es el propietario tengan permisos,
así se sabrá que permiso aplicar que siempre suele ser el más restrictivo.
Cuando creamos un fichero o directorio sobre un directorio que al que no se le ha asignado una ACL explícitamente, se to-
man los permisos de umask, que por defecto suele ser 0022:
Existen las ACL_DEFAULT que se aplican por defecto a un directorio y al par tipos:cualificadores que nosotros elijamos
dentro del directorio en el que estamos. Las veremos más adelante con unos ejemplos que harán que se entiendan mejor.
Si está establecida la entrada ACL_MASK, en la salida del comando ls -l los permisos del grupo propietario mostrarán el
contenido de dicha entrada.
-rwx r-x r- -
!16
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
!17
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
Para mostrar una ACL de un directorio, supongamos que estamos en /home/usuario/Documentos y queremos ver sus ACLs,
se usa el comando getfacl (recuerda umask explicado anteriormente). Crearemos también dos ficheros para ver cuales son sus entra-
das (ACEs) dentro él.
usuario@linux:~/Documentos$ getfacl .!
# file: .!
# owner: usuario!
# group: informatica!
user::rwx!
group::r-x!
other::!
!
usuario@linux:~/Documentos$ touch datos.txt notas.txt!
usuario@linux:~/Documentos$ ls -l *.txt!
-rw-r--r-- 1 usuario informatica 0 2014-12-07 11:56 datos.txt!
-rw-r--r-- 1 usuario informatica 0 2014-12-07 11:56 notas.txt!
!
usuario@linux:~/Documentos$ getfacl -l archivo1.txt!
# file: archivo1!
# owner: usuario!
# group: informatica!
user::rw-!
group::r--!
other::r-- !
!
Opciones:
f) -t usa un tabulador alternativo para mostrar la separación entre cada una de las columnas.
g) -n usa los números de los usuarios y los grupos en vez de sus nombres.
!
Establecer ACL.
!
! Para establecer o cambiar una ACL se usa el comando setfacl.
usuario@linux:~/Documentos# setfacl -b -k -R .
!
!18
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
c) -R aplica los cambios a todo lo que tenga el directorio dentro, tanto ficheros como directorios.
i) - -restore=fichero carga desde un fichero una lista de ACEs, que podrían haber sido creadas con getfacl -R. Todos los
permisos del árbol de subdirectorios completo serán restaurados.
!
NOTA ACLARATORIA: la primera vez que se usan las ACLs no hace falta borrar nada ya que no existen entradas (ACE), en
el ejemplo se pone para ver cómo se hace.
!!
Ten en cuenta el orden en el que se han escrito los parámetros “-d” y “-m”, y que “-m” debe ir acompañado de una entrada de
la forma: tipo:cualificador:permiso. Fíjate:
Existe otro comando usado para modificar una ACL ya existente: chacl.
!
De esta forma nos ahorramos de copiar las ACLs de un fichero para implantarlas en otro.
!
!19
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
i. El sistema copia por defecto del directorio padre tanto la ACL de acceso como la default.
ii. El sistema copia la ACL del padre al archivo creado y pasándole tanto la de acceso como la default.
Pero ¿y si el directorio padre no dispone de una ACL default? en ese caso se usan los permisos definidos por umask y se crea
con ellos el nuevo objeto.
La sintaxis a usar es la misma que al establecer una ACL normal, pero en este caso habrá que usar la opción -d seguida de
tipo:cualificador:permisos.!
!
La ACL por defecto son aquellas líneas que comienzan por “default”.
!20
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
!
!
Ejercicios ACL
!
1. Tenemos un directorio llamado “Datos” en /home. Deseamos compartirlo con todos los usuarios del sistema, de tal manera que
los miembros del grupo profesores tengan control total incluyendo todos los directorios que puedan crearse en él, y los
pertenecientes al grupo alumnos sólo puedan acceder y leer de él incluyendo los subdirectorios que puedan existir.
!
2. Dentro del directorio “Datos” se crearán dos directorios: 1ASIR y 2ASIR. Sólo los alumnos que estén en un curso (empecemos
por 1ASIR) podrán acceder. ¿Se puede hacer sin ACLs?
!
3. Dentro de “Datos” tendremos dos directorios nuevos: Cafetería y Apuntes. Dentro de Cafetería sólo los alumnos pertenecientes
al grupo Delegados podrán crear nuevos directorios y ficheros para tratar temas (Tema1, Tema2…), y los alumnos podrán escribir
dentro de dichos directorios monográficos de cada Tema. En el directorio Apuntes los alumnos podrán acceder libremente, pero
no podrán ni escribir ni borrar, los profesores tendrán acceso total.
!
4. Cualquier miembro del grupo Inspectores adjudicados al centro tendrá acceso total en modo de solo lectura para que pueda
comprobar que estamos cumpliendo con el programa.
!
5. Dentro del directorio Datos, los inspectores tendrán un directorio denominado Comunicaciones al que los demás usuarios podrán
acceder en modo de sólo lectura.
!
6. El usuario inspector Gadget, inspector de nuestro centro, ha sido expedientado por las altas esferas educativas y hay que
!21
CAPÍTULO 6. Permisos. Gestión de usuarios y grupos.
denegarle cualquier acceso a los ficheros, pero no se puede borrar su cuenta a la espera de que su expediente se resuelva.
Mientras tanto cualquier inspector podrá entrar y mirar lo que le interese.
!
7. El nuevo inspector asignado al centro se llama Clusseau y tendrá acceso en forma de sólo lectura a todo el directorio Datos.
!
8. El departamento de Matemáticas ha pedido que se le cree un directorio para ellos a semejanza al de informática. A petición del
inspector la estructura será la misma para facilitar su uso. Los directorios serán 1BACH y 2BACH.
!
!22