Ejercicios SO 2
Ejercicios SO 2
Ejercicios SO 2
GRUPOS, USUARIOS
Y PERMISOS
Vimos en un capítulo anterior que los ficheros deben estar organizados en directorios (carpetas) con el fin
de tenerlos ordenados y poder localizarlos convenientemente.
Volvamos a nuestro ejemplo de la oficina. Cada papel está en su sitio, hay carpetas y subcarpetas y todo
está organizado. Ahora bien, el contable deberá tener acceso por ejemplo a las carpetas donde se
encuentras las facturas y los recibos pero no tienen por qué tener acceso a la información sobre desarrollo
de productos o marketing. En un sistema Linux, las carpetas y los archivos funcionan de esta manera. Por
ejemplo, los archivos de configuración que se encuentran en el directorio /etc sólo pueden ser
modificados por el administrador del sistema. Esto previene que cualquier usuario pueda cambiar
información crítica y estropear algo.
El superusuario, administrador del sistema o simplemente el root, es un usuario especial que tiene
privilegios para cambiar la configuración, borrar y crear ficheros en cualquier directorio, crear nuevos
grupos y usuarios, etc.
Una vez hecha esta aclaración, pasemos a hacer algo como root:
$ touch /etc/prueba.txt
touch: no se puede efectuar `touch' sobre «/etc/prueba.txt»: Permiso denegado
$ sudo touch /etc/prueba.txt
$ ls /etc/pru*
/etc/prueba.txt
Hemos intentado primero crear el fichero prueba.txt en el directorio /etc como usuario normal y
acto seguido hemos obtenido un error de “Permiso denegado”, lo que quiere decir que un usuario sin
privilegios no puede hacer eso. A continuación lo hemos intentado como administrador, para ello hemos
usado el comando sudo, tras lo que se nos ha preguntado la clave del administrador. Esta vez sí lo hemos
conseguido. No tendría mucho sentido que el sistema no preguntase por la clave, ya que en ese caso
cualquiera podría ejecutar comandos como administrador con el peligro que ello supone.
4.3 PERMISOS
La información sobre grupos, usuarios y permisos se puede obtener mediante el comando ls junto con la
opción -l. Vamos a ver los permisos que tiene establecidos el fichero whatis que se encuentra en el
directorio /usr/bin.
$ ls -l /usr/bin/whatis
-rwxr-xr-x 1 root root 87792 2008-03-12 14:24 /usr/bin/whatis
En la primera columna aparecen los permisos, en la tercera se indica el usuario (en este caso es el
administrador del sistema) y en la cuarta columna aparece el nombre del grupo (que en este caso coincide
con el de usuario).
- r w x r - x r - x
Tipo de Permisos para el dueño Permisos para el grupo al Permisos para el resto
fichero. del fichero. que pertenece el fichero. de usuarios
r Permiso de lectura.
w Permiso de escritura.
x Permiso de ejecución.
Tipo de fichero
l Enlace simbólico.
c Dispositivo especial de caracteres.
b Dispositivo especial de bloques.
p FIFO (estructura de datos).
s Socket (comunicaciones).
- Ninguno de los anteriores. Puede ser un fichero de texto, un binario, etc.
En el caso que nos ocupa tenemos un carácter “-” como tipo de fichero, porque se trata de un binario (un
programa). El dueño del fichero tiene los permisos rwx, lo que quiere decir que puede leer, escribir y
ejecutar el fichero. Que tiene permiso para escribir significa que puede borrarlo, cambiarle el nombre o
editarlo. Tanto el grupo como el resto de usuarios tienen los permisos r-x, lo que significa que pueden
utilizarlo (pueden leerlo y ejecutarlo) pero no lo pueden modificar.
$ whoami
luisjose
$ su alumno
Contraseña:
$ whoami
alumno
$ whoami
alumno
$ exit
exit
$ whoami
luisjose
luisjose@luisjose-xps1330:~$ groups
luisjose adm dialout cdrom floppy audio dip video plugdev scanner lpadmin admin
netdev powerdev sambashare
Los comandos groupadd, groupdel y groupmod permiten crear, borrar y modificar grupos
respectivamente.
$ groupadd oficina_malaga
groupadd: incapaz de bloquear el fichero de grupos
$ sudo groupadd oficina_malaga
$ sudo groupadd oficina_jaen
$ sudo groupadd oficina_madrit
Vemos que si intentamos crear un grupo como usuario sin privilegios obtenemos un error. Para manejar
grupos y usuarios es necesario ejecutar los comandos con privilegios de administrador, por tanto
deberemos teclear sudo antes del comando en cuestión.
Hemos escrito mal el nombre del segundo grupo, ¡que no cunda el pánico!, este problema se puede
solventar con groupmod.
La directiva de la empresa ha decidido cerrar la oficina de Jaén para ahorrar costes y pasar los recursos a
la oficina de Málaga, así que no hará falta el grupo oficina_jaen. Lo podemos borrar con
groupdel.
La gestión de usuarios, al igual que la de grupos, exige que los comandos se ejecuten con los privilegios
del administrador del sistema. Se puede escribir sudo antes de cada comando, o se puede hacer lo
siguiente:
$ sudo bash
Note el lector que el prompt ha cambiado. Ahora se muestra un carácter “#” en lugar de un “$”. A partir
de ahora, todos los comandos se ejecutarán con privilegios de administrador del sistema. Hay que
acordarse de volver al usuario inicial mediante exit.
Es necesario dar de alta a dos usuarios para el grupo oficina_malaga y uno para
oficina_madrid. Habrá un cuarto usuario que estará yendo y viniendo de una oficina a otra, por tanto
se le dará de alta en las dos.
Hemos matado dos pájaros de un tiro. Hemos creado los usuarios y al mismo tiempo los hemos incluido
dentro de los grupos correspondientes. Estos dos pasos se pueden hacer de forma independiente.
El usuario laura pertenece a dos grupos. En primer lugar se ha creado el usuario y al mismo tiempo se
ha añadido al grupo oficina_malaga con la opción –ingroup. Para añadir un usuario existente a un
grupo, se utiliza adduser sin opciones.
Al crear los usuarios, se nos han pedido las claves, no obstante estas claves se pueden cambiar con el
comando passwd.
# passwd pedro
# passwd ana
# passwd laura
Recuerde el lector salir del modo root con el comando exit cuando no tenga que hacer tareas que
requieran privilegios de administrador.
# exit
De ahora en adelante, simplemente se indicará con el carácter “$” que se trabaja como usuario sin
privilegios y con el carácter “#” que se trabaja como root.
Cabe señalar que para cada usuario, se crea por defecto un directorio dentro de /home. Cuando un
usuario se conecta al sistema, “aterriza” en ese directorio. Es lo que hemos denominado anteriormente
como el directorio de trabajo.
$ ls /home/
alumno ana berta ftp laura luisjose pedro
Imaginemos que el fichero informe.txt ha sido creado por el usuario pedro. Por defecto, el dueño
de un archivo es el usuario que lo crea, en este caso pedro. El grupo del usuario pedro, como hemos
visto antes es oficina_malaga.
$ su pedro
$ cd
$ pwd
/home/pedro
$ touch informe.txt
$ ls -l
-rw-r--r-- 1 pedro oficina_malaga 0 2009-03-19 12:46 informe.txt
# mv informe.txt /home/laura/
# cd /home/laura/
# chown laura informe.txt
# ls -l
-rw-r--r-- 1 laura oficina_malaga 0 2009-03-19 12:46 informe.txt
El comando chmod sirve para cambiar los permisos de uno o varios ficheros. Esos mismos permisos que
se pueden ver con ls -l.
$ ls -l
-rw-r--r-- 1 pedro oficina_malaga 0 2009-03-19 15:38 hola_mundo.rb
$ chmod +x hola_mundo.rb
$ ls -l
-rwxr-xr-x 1 pedro oficina_malaga 0 2009-03-19 15:38 hola_mundo.rb
Hemos añadido el permiso de ejecución al fichero hola_mundo.rb. Vemos que ahora hay tres x, la
que corresponde al dueño del fichero, la de todos los usuarios que pertenecen al grupo y la del resto de
usuarios.
Cuando no se especifica ninguna de estas tres letras correspondientes a los usuarios (u, g, o) como en el
ejemplo anterior, se sobreentiende que nos referimos a todos ellos. Se puede indicar de forma explícita
con el carácter a (all).
Para entenderlo mejor, en la siguiente tabla, se muestran de forma esquemática, los parámetros del
comando chmod:
+
u g o r w x
-
(group)
(user) (others)
usuarios que dar permiso (read) (write) (execution)
dueño del el resto de
pertenecen al quitar permiso lectura escritura ejecución
fichero usuarios
mismo grupo
Quitaremos ahora el permiso de ejecución para el resto de usuarios (others) y daremos permiso de
escritura (write) a los usuarios del mismo grupo (group).
$ ls -l
-rwxr-xr-x 1 pedro oficina_malaga 0 2009-03-19 15:38 hola_mundo.rb
$ chmod o-x hola_mundo.rb
$ chmod g+w hola_mundo.rb
$ ls -l
-rwxrwxr-- 1 pedro oficina_malaga 0 2009-03-19 15:38 hola_mundo.rb
4 2 1 Total
r w x 4 + 2 + 1 = 7
r w - 4 + 2 + 0 = 6
r - x 4 + 0 + 1 = 5
r - - 4 + 0 + 0 = 4
- w x 0 + 2 + 1 = 3
- w - 0 + 2 + 0 = 2
- - x 0 + 0 + 1 = 1
En efecto
$ ls -l
-rwxr-xr-x 1 pedro oficina_malaga 0 2009-03-19 15:38 hola_mundo.rb
Los permisos de los directorios se pueden cambiar de la misma forma que los ficheros, aunque el
significado es algo diferente. Si un directorio tiene el permiso de lectura quiere decir que se puede ver su
contenido. Si tiene permiso de escritura, quiere decir que se pueden crear ficheros dentro y si tiene
permiso de ejecución quiere decir que se puede entrar dentro.
Comando Acción
Muestra, entre otras cosas, información sobre los permisos, el usuario y el
ls -l
grupo al que pertenece el fichero.
sudo Permite ejecutar comandos como root.
su Cambia de usuario.
whoami Muestra el nombre del usuario actual.
groups Muestra el/los grupos/s a los que pertenece el usuario actual.
groupadd Añade un nuevo grupo.
groupdel Borra un grupo.
groupmod Modifica las características de un grupo.
adduser Añade un nuevo usuario.
userdel Borra un usuario.
usermod Modifica las características de un usuario.
passwd Asigna o cambia la clave de un usuario.
chown Cambia el dueño de un archivo.
chgrp Cambia el grupo al que pertenece un archivo.
chmod Cambia los permisos.
654
rwxrw-rw-
rwxrwxrwx
520
764
r--r-----
3. Crea los usuarios paco y pablo. Estos usuarios deben pertenecer únicamente al grupo oficina1.
4. Crea los usuarios alba y nerea. Estos usuarios deben pertenecer únicamente al grupo oficina2.
5. Como usuario paco Crea un fichero con nombre topsecret.txt en su directorio de trabajo al que
únicamente él tenga acceso, tanto de lectura como de escritura.
6. Crea otro fichero, también como usuario paco, con nombre ventas_trimestre.txt al que tengan
acceso, tanto para leer como para escribir todos los usuarios que pertenezcan al mismo grupo. Se
deben dejar los permisos que haya por defecto para el dueño y para el resto de usuarios. Comprueba
como usuario pablo que puedes modificar el fichero.
7. Como usuario alba, crea un fichero con nombre empleados.txt al que pueda acceder cualquier
usuario para leer su contenido, y cualquier usuario del mismo grupo para leer o escribir.
9. Como usuario pablo, copia un programa del directorio /usr/bin al directorio de trabajo con un
nombre diferente. Por ejemplo xclock se puede copiar como reloj. Mira los permisos de este
10. Cambia los permisos de reloj de tal forma que sólo lo pueda ejecutar el propietario del archivo.
11. Crea el usuario modesto, perteneciente a oficina2. Dentro de su directorio de trabajo, crea un
directorio de nombre compartido_con_todos.
12. Cambia de usuario en el entorno gráfico (botón salir y botón cambiar de usuario) y entra como
modesto. Crea con OpenOffice.org Calc los ficheros telefono_contactos.ods, gastos_marzo.ods y
sueldos.ods. Inserta varias entradas en cada uno de los ficheros y grábalo todo en el directorio
compartido_con_todos.
13. Da permiso de lectura a la carpeta compartido_con_todos y a todos los ficheros que contenga
para todos los usuarios.
14. Restringe el acceso de escritura sobre el fichero telefono_contactos para que sólo lo puedan
modificar los usuarios del grupo al que pertenece su propietario.
15. Cambia los permisos de gastos_marzo para que sólo pueda modificarlo su propietario y leerlo
cualquiera del mismo grupo.
16. Cambia los permisos de sueldos para que sólo su dueño tenga acceso a él, tanto para lectura como
para escritura.
17. Si un usuario tiene permiso de lectura sobre un fichero pero ese fichero se encuentra dentro de un
directorio sobre el que no tiene permiso de lectura, ¿podrá leer el fichero?, haz la prueba.