Mdul 1
REQUISITOS PREVIOS
Tener un sistema Linux instalado, tener soltura con los comandos ms habituales (prctica 2) y no haber perdido la
contrasea de root.
Es importante recordar que con Alt+F1, +F2, etc., disponemos de varias consolas virtuales
ACTIVIDADES DE LA PRCTICA
Actividad 1.
Las medidas de seguridad en Linux, como en la mayora de SOs, se basan en la definicin de usuarios y la
asignacin de derechos y restricciones a estos usuarios.
En Linux el fichero /etc/passwd contiene la informacin de los usuarios del sistema. Est compuesto por lneas
como la siguiente, de forma que cada lnea representa a un usuario:
usuario:contrasea:uid:gid:comentario:origen:shell
usuario: es el nombre de usuario con el que acceder al sistema y se identificar (el que se pone en el login,
como por ejemplo root). Como mximo conviene que tenga 8 caracteres.
contrasea: la contrasea del usuario, aunque encriptada, ya que el fichero /etc/passwd lo pueden leer todos
los usuarios.
uid: user identifier. Un nmero que identifica al usuario, y es la forma con que Linux identifica internamente a
un usuario, aunque nosotros no lo podemos utilizar directamente a no ser que el comando nos d opcin a ello.
gid: group identifier. Un nmero que identifica un grupo (los grupos estn definidos en /etc/group, ms adelante
hablaremos de ellos) y aqu indica cul es el grupo primario de un usuario (un usuario puede pertenecer, de forma
secundaria, a otros grupos).
Joan Serrano
Revisi 0.2
1/35
CFGS
Mdul 1
comentario: texto libre, que generalmente es el nombre real del usuario o una descripcin breve.
origen: cul es el directorio origen del usuario (normalmente /home/usuario).
shell: qu shell (intrprete de comandos) utilizar el usuario por defecto. Suele ser /bin/bash.
Hay que tener en cuenta que, adems de los usuarios que hayamos definido nosotros, en Linux hay usuarios
predefinidos (que son con los que trabajan algunas aplicaciones o servidores). Los usuarios normales tienen un uid
ms alto que los del sistema (tpicamente a partir de 500). root siempre es el usuario 0.
Como medida de seguridad, generalmente en /etc/passwd no estn las contraseas encriptadas sino que en su
lugar hay una x; las contraseas encriptadas estn en el fichero /etc/shadow, que es una rplica de /etc/passwd
pero con las contraseas encriptadas, y adems slo root puede acceder a l (observaris que en /etc/shadow slo
se utilizan los campos usuario y contrasea). De esta forma los usuarios normales pueden ver qu usuarios hay en
el sistema pero slo root puede aadir usuarios.
Opcin
-c comentario
-d dirOrigen
-e AAAA-MM-DD
-g grupo
-G
grupo1[,grupo2...]
-m
-M
-n
Joan Serrano
Utilidad
Permite indicar el campo comentario*.
Indica el directorio origen del usuario (por defecto ser /home/
usuario).
Fecha en la que se desactivar la cuenta del usuario.
Grupo primario del usuario. Podemos indicar el nombre del grupo o
su gid**.
Grupos secundarios del usuario, separados por comas. Son grupos
a los que tambin pertenece y por tanto disfruta de su privilegios.
Crea el directorio origen del usuario y recrea en l la estructura de
ficheros y directorios que haya en /etc/skel***.
No crea directorio origen aunque tengamos CREATE_HOME yes.
No crea un grupo con el mismo nombre del usuario. Si no se
especifica grupo (-g), entonces por defecto el usuario pertenecer al
grupo users.
Revisi 0.2
2/35
CFGS
Mdul 1
-r
-p contrasea
-s shell
-u uid
-D
* Si queremos escribir un parmetro, nombre de fichero, opcin, etc. con espacios enmedio podemos hacerlo
escribindolo entre comillas dobles: adduser -c Jos Prez pepito. sta no es una caracterstica exclusiva de
adduser, sino de bash, as que se puede usar con cualquier programa o comando.
** Si no se especifica un grupo primario, se crea un grupo con el nombre del usuario, que ser su grupo primario (si
creamos al usuario jvalls, entonces crear un nuevo grupo jvalls, o lo asignar si ya existe).
*** Existe un fichero de configuracin, /etc/login.defs, que controla las opciones por defecto en la creacin de usuarios.
Por ejemplo, esta opcin se rige por la constante CREATE_HOME, que puede valer yes o no y que determina que esta
opcin se ejecute por defecto o sea necesario especificarla.
1.- Cread el usuario pr3. Intentad loguearos con este usuario. Podis?
passwd: cambiar contrasea de usuario
Con este comando podemos cambiar la contrasea de un usuario, activarlo cuando lo acabamos de crear y
desactivarlo cuando no queremos que acceda al sistema pero no queremos perder su informacin. Este comando lo
puede utilizar un usuario para cambiar su contrasea (no la de otros usuarios, claro) y root para cambiar la de todos
los usuarios.
Algunos ejemplos:
passwd
passwd pepito
#
#
#
#
Observaris que no acepta bien cualquier tipo de contrasea: debe tener seis caracteres al menos, no ser una
palabra del diccionario, etc. De todas formas, cuando da el mensaje de Bad password realmente la acepta,
aunque avisa de que no es una buena contrasea. La sintaxis es passwd [opciones] [usuario].
Joan Serrano
Revisi 0.2
3/35
CFGS
Mdul 1
Opcin
-d
-l
-u
-f
Utilidad
Borra la contrasea del usuario (la deja en blanco).
Bloquea el usuario (antepone algn signo a la contrasea).
Desbloquea el usuario
Aunque se d una contrasea en blanco o mala, esta opcin le
obliga a aceptarla.
2.- Cambiad la contrasea de vuestro usuario habitual desde root. Entrad con el usuario y volvedle a poner la
contrasea inicial.
3.- Si el nico que puede escribir en /etc/shadow es root, cmo puede un usuario normal cambiar su propia
contrasea? La respuesta, en la actividad de permisos.
userdel: borra un usuario
Este comando elimina un usuario del sistema (lo borra de los ficheros /etc/passwd y /etc/shadow). Si el usuario
est trabajando actualmente, puede seguir hacindolo, pero cuando salga no podr volver a entrar. Slo tiene una
opcin, que se muestra en los ejemplos:
userdel pepe
userdel -r pepe
Actividad 2.
Gestin de grupos
Joan Serrano
Revisi 0.2
4/35
CFGS
Mdul 1
El fichero /etc/group indica qu grupos hay en el sistema y qu usuarios pertenecen a ellos. Su estructura es muy
parecida a la de /etc/passwd pero tiene menos informacin:
grupo:contrasea:gid:miembros
gid: group identifier, nmero que identifica al grupo, y es el valor que utiliza Linux internamente. Los gid<500
suelen estar reservados para grupos especiales del sistema (500 es un valor definido en /etc/login.defs con el
nombre de GID_MIN).
miembros: aqu se listan los usuarios que tienen este grupo como secundario (no los que lo tienen como
primario, que ya lo tienen apuntado en su fichero /etc/passwd).
Utilidad
Obliga a que el grupo tenga un gid
determinado.
Permite crear un grupo de sistema
(gid<GID_MIN).
Joan Serrano
Revisi 0.2
5/35
CFGS
Mdul 1
Grupo
asi1t
asi2t
Usuario
Jess
Laura
Elena
Marcos
6.- Haced que pertenezcan tambin al grupo asi; incorporad a Jess y Laura con comandos, y a Elena y Marcos
modificando los ficheros de configuracin. Comprobadlo con la orden groups.
7.- Laura ha aprobado todo primero as que tiene que pasar a asi2t como nuevo grupo principal. Cmo lo harais
mediante comandos? Y modificando los ficheros de configuracin?
8.- Por qu los ficheros de Laura siguen perteneciendo al grupo asi1t si Laura ha cambiado al asi2t? Por qu no
pertenecen tambin al grupo asi, al que Laura tambin pertenece?
9.- Eliminad los usuarios Marcos y Elena, que ya han aprobado segundo. Pero eliminad a Marcos con comandos y a
Elena modificando los ficheros de configuracin.
Actividad 3.
Para poder practicar con las operaciones de gestin de usuarios y grupos, es importante conocer los siguientes
comandos de trabajo con usuarios: cambio del usuario actual, listado de usuarios conectados, etc.
su (set user): cambiar usuario actual
Aunque hayamos entrado en el sistema como cierto usuario, es posible que queramos trabajar temporalmente
como otro usuario (tpicamente, que necesitemos lanzar una orden como root). Para esto tenemos el comando su,
que nos permite cambiar de usuario, trabajar con l, y volver con nuestro usuario mediante la orden exit. Hay que
tener en cuenta que podemos anidar un su en otro, y tendremos que hacer tantos exit como sea necesario.
su pepito
su
Al cambiar a otro usuario pedir su contrasea, salvo si el usuario actual es root (que puede convertirse en los
usuarios que quiera).
who: quin hay conectado al sistema
Muestra una lista de los usuarios conectados al sistema, concretamente su nombre, la terminal a la que est
conectada (recordemos que con Alt+Fn disponemos de varias terminales: tty1, tty2, etc.), la fecha y hora de
entrada, y si est conectado desde otro ordenador.
Este comando lo puede ejecutar cualquier usuario:
$who
roottty1
pepetty2
01 05 15:32
01 05 17:15
Joan Serrano
Revisi 0.2
6/35
CFGS
Mdul 1
La opcin -i aade otra columna que indica cunto tiempo lleva inactivo ese usuario (o un . si ha trabajado en el
ltimo minuto).
La opci -w (o --message) muestra si el usuario acepta mensajes de la orden write (que veremos a continuacin).
Tras la informacin de cada usuario sale un + si los acepta, un - si no, y un ? si no se puede determinar (porque no
se encuentra su terminal).
Incluso permite un poco de filosofa para averiguar detalles sobre uno mismo: who am i.
Nota tcnica: el fichero /var/run/utmp contiene informacin sobre los usuarios conectados al sistema, aunque no
es legible. En algunos sistemas, /var/run/wtmp contiene informacin sobre los usuarios que se han conectado al
sistema alguna vez.
Actividad 4.
Permisos
El sistema de seguridad en Linux tiene como parte fundamental la asignacin de permisos para los diferentes
usuarios en ficheros y directorios. Veremos que se trata de un sistema muy detallado y aprenderemos a utilizar los
comandos ms importantes para trabajar con permisos.
Cuando hacemos ls l, nos aparece mucha ms informacin sobre los ficheros y directorios. La primera columna
contiene algo como drwxr-xr-x -rw-r--r-- , y de estas diez letras la primera indica el tipo de elemento que se
est visualizando (d=directorio; -=fichero normal; l= enlace simblico, que se explica ms abajo; b=dispositivo
de bloques, como un disco; c=dispositivo de caracteres, como el teclado; p=FIFO con nombre (named pipe), las
tuberas que se utilizan para comunicar programas; S=socket, que permite comunicar varios ordenadores entre s).
Pero lo que nos interesa es la siguiente parte: los nueve caracteres que indican los permisos que tienen los ficheros
(o directorios, o lo que sean: usaremos el trmino general fichero). Hay que agruparlos de tres en tres caracteres,
con lo que tenemos:
Las tres primeras letras indican los permisos de lectura, escritura y ejecucin del fichero para el propietario del
fichero (el nombre que muestra el ls l; suele ser quien lo ha creado, aunque esto se puede cambiar).
Las otras tres, los permisos de lectura, escritura y ejecucin del fichero para los miembros del grupo del fichero
(cada fichero pertenece a un grupo, como indica ls l, y adems ese grupo no tiene por qu ser el grupo primario
del propietario).
Las tres ltimas indican los mismos permisos para el resto de usuarios del sistema.
Sobre un fichero normal, los permisos tienen los siguientes significados:
Joan Serrano
Revisi 0.2
7/35
CFGS
Mdul 1
Lectura: se pueden listar los contenidos del directorio (podemos hacer un ls).
Escritura: se pueden crear y borrar ficheros.
Ejecucin: se puede acceder al directorio (hacer cd al directorio).
Consecuencia: aunque no tengas permiso de escritura en un fichero, puedes borrarlo si tienes permiso de escritura
en el directorio que lo contiene, aunque no puedes modificarlo.
Hay una serie de comandos que trabajan con permisos, y permiten indicarlos de dos maneras: simblica o
numrica.
NOTACIN NUMRICA DE PERMISOS
Los tres grupos de tres permisos que hemos visto se ven como tres cifras octales (base 8), la primera para el
propietario, la segunda para el grupo y la tercera para los dems, de forma que los permisos que quieran darse a
cada categora de usuarios sern el resultado de sumar los siguientes valores: 1 para ejecucin, 2 para escritura, 4
para lectura.
751 indica todos los permisos para el propietario (4+2+1=7), lectura y ejecucin para los del
grupo (4+1=5), y ejecucin slo para los dems (1)
A continuacin veremos las rdenes para manejar todo esto, aunque primero vamos a estudiar una orden que no
tiene mucha relacin pero ayudar a trabajar con permisos, pues permite crear cmodamente ficheros nuevos, y
cambiar la fecha de los existentes.
touch: cambiar tiempo y crear fichero
Su funcin principal es cambiar la fecha y la hora de los ficheros afectados, si bien una utilidad casi ms importante
es que, si alguno de los ficheros indicados no existe, lo crea. Respecto a un fichero se almacenan tres tiempos
diferentes, y esto no slo afecta a touch sino tambin a otros comandos como find:
Joan Serrano
Revisi 0.2
8/35
CFGS
Mdul 1
Tiempo de acceso: cundo se ha ledo por ltima vez (asociado a la letra a).
Tiempo de cambio de estado: cundo se ha cambiado sus propiedades por ltima vez (permisos, propietario,
tiempos, etc.) (asociado a la letra c).
Tiempo de modificacin: cundo se ha modificado por ltima vez (asociado a la letra m).
Slo puede utilizarlo el propietario de los ficheros, aunque si lo nico que se quiere es cambiar la fecha de acceso y
modificacin al tiempo actual, puede hacerlo cualquiera que tenga permisos de escritura sobre los ficheros.
touch [opciones] fichero(s)
Opcin
-a
-c
-m
--reference=fichero
-t[AAAA]
MMDDhhmm[.ss]
Utilidad
Cambia slo el tiempo de acceso
Si el fichero no existe no lo crea.
Slo cambia el tiempo de modificacin
En vez de poner el tiempo actual, le pone el
que tenga el fichero indicado
En vez de poner el tiempo actual, le pone el
indicado en la expresin (slo puede usarlo
el propietario)
Como se ve, el tiempo de cambio de estado no se puede cambiar (aunque si "tocamos" un fichero, ese momento
pasar a ser el nuevo tiempo de cambio de estado porque hemos cambiado una propiedad del fichero).
touch -a fich
touch noExisto
10.- Cread un fichero nuevo y ponedle como fecha de modificacin el 10/01/2014 a las 19:45. Comprobad que se ve
esta nueva fecha haciendo ls -l.
chmod (change mode): cambiar permisos
Permite cambiar los permisos de uno o ms ficheros o directorios. Slo puede utilizarlo el propietario de los ficheros
(o root, por supuesto). La sintaxis general es:
chmod [opciones] permisos fichero(s)
Donde las opciones son opcionales (por eso van entre corchetes y por eso se llaman opciones) y pueden ser las
siguientes:
Opcin
Utilidad
-v
Muestra informacin de lo que va haciendo con
cada fichero (modo verbose, se suele llamar a
Joan Serrano
Revisi 0.2
9/35
CFGS
Mdul 1
-f
-R
esto)
Evita que se impriman mensajes de error si no
puede cambiar los permisos de un fichero
Cambia los permisos de ficheros y directorios
recursivamente
Asigna al fichero los permisos que tenga fichRef.
-reference=fichRe
f
Los permisos se pueden indicar de forma simblica o numrica (incluso se pueden indicar varios permisos
separndolos con comas), y por ltimo se deben indicar los ficheros (o directorios) que queramos cambiar.
chmod a+x script? # Aade permiso de ejecucin a todos los ficheros
# script? (el ? representa a cualquier carcter)
chmod -R 755 .
# Pone como 755 todos los ficheros del directorio
# actual y de sus subdirectorios
chmod +x,o-w sc2 # Da permiso de ejecucin a todos pero quita de
# escritura a los dems del fichero sc2
Nota: aunque an no sepis bien de qu va el tema, adelantamos algo: chmod aplicado a un enlace simblico no
cambia las propiedades del enlace, sino del fichero a que hace referencia el enlace.
Hay otra forma de especificar los permisos, que es copirselos de otro fichero. Para ello se utiliza, en lugar de los
permisos, la opcin --reference=fichero, con lo que todos los ficheros indicados a continuacin pasarn a tener los
mismos permisos que este fichero.
# Los ficheros lista.txt y a.out pasarn a tener los mismos permisos que
# tenga fich1
chmod --reference=fich1 lista.txt a.out
11.- Supongamos que tenis dos usuarios normales, por ejemplo toni y laura (si no, creis dos). Puede acceder laura
al directorio origen de toni? Puede ver sus ficheros? Y modificarlos? Y borrarlos? Justificad, comprobando los
permisos correspondientes, por qu esto ocurre as.
12.- Para cada uno de los casos anteriores, cambiad los permisos para que el sistema haga lo contrario (si antes
dejaba que laura accediese al directorio de toni que ahora no pueda, etc.).
13.- Cread, con root, el directorio /home/prueba/. Comprobad que otros usuarios no pueden crear ficheros en l.
Cambiad los permisos para que todos los usuarios puedan crear ficheros en este directorio.
14.- Cread un usuario admin que pertenezca al grupo root y dadle todos los permisos para trabajar con el directorio /
root/.
chown (change owner): cambia el propietario de un fichero
Este comando permite cambiar la posesin de un fichero. En principio un fichero es de quien lo crea, pero a
menudo interesa cambiar la propiedad del fichero, o el grupo al que pertenece. Este comando slo se puede aplicar
a los ficheros sobre los que se tiene permiso de escritura, y slo te lo puedes asignar a ti mismo (salvo si eres root,
ya que entonces lo puedes asignar a quien quieras).
chown [opciones] propietarios fichero(s)
Joan Serrano
Revisi 0.2
10/35
CFGS
Mdul 1
Opciones:
pepe fich1
pepe:asi1t fich1
pepe: fich1
:asi1t fich1
#
#
#
#
#
fich1
fich1
fich1
fich1
asi1t
En vez de especificar un nuevo propietario y/o grupo, se puede copiar de otro fichero con --reference=fichero, igual
que con chmod.
15.- Cread el directorio /tmp/trabajo/ para el grupo asi1t. Haced que toni y laura pertenezcan a ese grupo y que
puedan crear ficheros en l, pero los dems usuarios slo podrn ver los contenidos de ese directorio.
16.- Con el usuario laura, cread un fichero ej2 en /home/laura/. Cambiad a laura al grupo primario asi1t. A qu grupo
pertenece el fichero /home/laura/ej2? Por qu no ha cambiado al grupo asi1t? Puede laura acceder todava al
fichero, si no es de su grupo? Por qu?
Importante: recordad que el grupo de un fichero no tiene nada que ver con el grupo de su propietario, pueden ser
totalmente distintos (aunque por defecto son el mismo grupo).
chgrp (change group): cambia el grupo de un fichero
Este comando permite cambiar un fichero de grupo (lo que tambin puede hacerse con chown). Las opciones y la
sintaxis son las mismas, y tambin dispone de la variante con --reference=fichero:
chgrp [opciones] nuevoGrupo fichero(s)
chgrp [opciones] --reference=fichero fichero(s)
Joan Serrano
Revisi 0.2
11/35
CFGS
Mdul 1
Hay que advertir que la mscara no contiene los valores de los permisos sino su complemento. O sea, lo que se
le resta a los permisos totales (777) para obtener los permisos por defecto. As, si nuestra mscara es 022, los
permisos por defecto de nuestros ficheros sern 777-022=755 (restando cifra a cifra, ciudado).
Actividad 5.
Enlaces
En Linux se distinguen dos tipos de enlaces: los duros (hardlinks) y los simblicos (symlinks), y conviene hablar de
ellos por separado.
Un enlace duro es el nombre de un fichero; es un enlace en el sentido de que permite al usuario acceder
a informacin que est almacenada en algn lugar misterioso del disco duro (ese lugar es el inodo, para
entendernos el nmero de bloque del disco en que est el fichero; con ls -i podemos ver el nmero de inodo de los
ficheros y directorios). As que cuando estamos haciendo cat fich.txt estamos utilizando un enlace duro (el que
tiene de nombre fich.txt) para acceder al contenido del fichero.
Lo novedoso en Linux es que un mismo fichero puede tener varios nombres, o sea, varios enlaces duros, todos
ellos igual de importantes. Si un fichero tiene dos enlaces duros (por ejemplo /home/luis/fich1.txt y /home/pedro/
prctica.txt), cualquier modificacin en alguno de ellos repercutir en el mismo fichero, porque al fin y al cabo ambos
hacen referencia al mismo fichero.
Si se borra un enlace duro, el fichero sigue siendo accesible desde los dems enlaces duros que tenga; cuando se
borre su ltimo enlace duro ser cuando se borre el fichero en s. Por cierto, ls -l dice, en la segunda columna, el
nmero de enlaces duros que tiene un mismo fichero.
Hay que tener en cuenta que rm lo que hace es borrar un enlace duro (y el fichero, pero slo si su nmero de
enlaces duros llega a cero). Si se hace mv de un fichero (y no cambia de sistema de ficheros, o sea, no lo estamos
moviendo del disco duro al disquete, por ejemplo) no se mueve el fichero en s, que permanece en el mismo inodo,
sino que se cambia un enlace duro por otro; los dems enlaces duros siguen siendo vlidos.
7.- Pregunta: sabiendo que el nmero de inodo es lo que indica realmente qu fichero es, o sea, que todos los enlaces
duros de un mismo fichero mostrarn el mismo nmero de inodo, cmo averiguarais cules son los enlaces duros
que tiene un fichero?
Por otra parte, un enlace simblico es un pequeo fichero que hace referencia a un fichero (estrictamente hablando,
a un enlace duro de un fichero). Con ls -l, los enlaces simblicos tienen una l en el primer carcter (tipo de fichero);
adems se muestra a qu fichero hacen referencia:
lrwxrwxrwx
1 root
root
7 ene 13
Este enlace puede utilizarse para acceder al fichero real, pero siempre teniendo en cuenta que, si por ejemplo
hacemos vi enlaceSim, Linux averiguar cul es el fichero a que hace referencia y abrir este fichero.
Si se borra un fichero o se renombra (mueve) el enlace duro correspondiente, los enlaces simblicos se quedan
colgando.
Joan Serrano
Revisi 0.2
12/35
CFGS
Mdul 1
Para hacerse mejor una idea, un enlace simblico es como un acceso directo de Windows.
Por si tenis curiosidad, los smbolos . y .. son enlaces duros al directorio actual y al directorio padre
respectivamente.
ln: crea un enlace (link)
Este comando permite crear nuevos enlaces para un fichero dado. Por defecto crea enlaces duros, aunque tiene
una opcin para crearlos simblicos. La sintaxis general y sus opciones son:
ln [opcin] objetivo(s)
Opcin
-d
-f
-i
-s
Utilidad
Permite que root (y slo l) haga enlaces
duros de directorios (en principio slo se
pueden hacer enlaces duros de directorios).
Borra los ficheros existentes si coinciden con
los enlaces a crear.
Pregunta antes de borrar ficheros si
coinciden con los enlaces a crear.
Crea enlaces simblicos (por defecto son
duros).
Joan Serrano
Revisi 0.2
13/35
CFGS
Mdul 1
8.- Cread un fichero llamado asignaturas que contenga los nombres de vuestras asignaturas. Cread un enlace
simblico al mismo en el mismo directorio. Haced ls -l y ved qu muestra (fijaos en el nmero de enlaces del fichero
original). Abrid el enlace con vi y comprobad que abre el fichero original; para verificar que se trata del mismo fichero,
haced un cambio y comprobad que haciendo cat asignaturas se ve el cambio. (Distinguidlo de una copia).
9.- Borrad el fichero original. Qu pasa con el enlace?
20.- Cread un fichero llamado semana con los das de la semana. Cread un enlace duro llamado semana2. Repetid el
primer ejercicio con este nuevo enlace y comprobad que el comportamiento es el mismo (hay una diferencia; cul?).
21.- Repetid el segundo ejercicio. Qu ocurre ahora?
Actividad 6.
Una parte esencial en la administracin de un sistema Linux es el control de los procesos que hay en el sistema
en cada momento, y conocer las herramientas necesarias para poderlos eliminar en un momento dado es
especialmente importante. Esto es an ms evidente en un servidor, en el que los procesos no se ven en pantalla
sino que, en principio, estn ocultos, y es importante saber obtener cules hay, en qu estado se encuentran y qu
consumo de recursos estn haciendo.
Los procesos en Linux tienen una relacin padre-hijo entre ellos, o sea, el proceso que ejecuta a otro es su padre; si
por ejemplo desde bash (que es un proceso) ejecutamos un find, ste ser hijo de aqul.
Los trabajos (jobs) en Linux representan las distintas tareas que est realizando un usuario en un momento dado, y
es bastante interesante saber controlarlas para maximizar la productividad en el trabajo y realizar varias tareas a la
vez; aunque esto es menos importante al disponer de varias consolas virtuales, en ocasiones no se dispone de ellas
o hay otras circunstancias que recomiendan la gestin de varios trabajos desde una misma consola.
Un trabajo, que al fin y al cabo es una orden completa de un usuario (o sea, todos los comandos enlazados
con tuberas en una misma orden, tipo ls *.exe | grep prueba | less), tiene un nmero asociado para poderlo
identificar posteriormente. Adems se puede encontrar en dos estados: se puede estar viendo cmo se ejecuta
en su terminal (se dice que est en primer plano o en foreground), o puede estarse ejecutando en la sombra, o
sea, ejecutndose pero sin que se vean sus resultados; entonces se dice que est en el fondo (background). Hay
comandos y opciones de bash para cambiar el estado de los trabajos.
Otro concepto, que se ve con ms profundidad en otros crditos, es el de seal, que es un mecanismo de
comunicacin entre procesos que permite enviar avisos entre distintos procesos. De momento lo usaremos para
matar procesos, aunque tiene muchos ms usos.
ps: muestra el estado de los procesos (processor share)
Este comando genera un listado de los procesos que hay en el sistema en un momento dado. La sintaxis
general es:
ps [opciones][pids]
Joan Serrano
Revisi 0.2
14/35
CFGS
Mdul 1
Donde pids es una lista de PIDs (process identifiers, los nmeros que identifican a cada proceso) separada por
comas y sin espacios (ni entre ellos ni respecto a la ltima opcin). Permite ver informacin slo de los procesos
indicados:
ps a13,42
ps 44,32
Segn la opcin elegida, ps mostrar ms o menos informacin en un listado en el que cada fila es un proceso y
cada columna una caracterstica suya. El significado de cada columna, segn el ttulo que aparece en la primera
fila, es el siguiente:
Columna
Significado
USER
Usuario propietario del proceso (o sea, el que lo ha ejecutado)
PID
PID del proceso
%CPU
Porcentaje de CPU que est utilizando
%MEM
Porcentaje de memoria que est utilizando
VSZ
Tamao de memoria virtual
utilizada por el proceso (virtual
memory size)
RSS
Memoria RAM real que est ocupando (resident size)
TTY
Terminal asociada al proceso (? si el proceso no tiene ninguna
terminal asociada, como un servidor)
STAT
Estado del proceso:
R: ejecutable (runnable), o sea, que en cualquier
momento puede entrar en ejecucin*
Joan Serrano
Revisi 0.2
15/35
CFGS
Mdul 1
Las opciones de ps son las siguientes (atencin, no llevan un guin delante, se escribe ps a, por ejemplo):
Opcin
Significado
u
Listado para el usuario (o sea, es un listado largo; si no se pone, sale un
listado corto).
f
Listado en forma de bosque (forest) de procesos, o sea, muestra las
relaciones padre-hijo. Un bosque es un conjunto de rboles.
a
Muestra los procesos de todos (all) los usuarios. S, aunque no seas
root. Es una opcin de dudosa seguridad, pero ah est.
x
Muestra los procesos no controlados por ninguna terminal (servidores y
similares).
h
No incluye la cabecera en el listado.
r
Muestra slo los procesos con STAT=R
22.- Encontrad todos los procesos del usuario root.
Opciones de bash para enviar trabajos al background
Principalmente hay dos formas de enviar un trabajo al fondo:
Poner un & al final de su lnea de comandos para que empiece a ejecutarse en el fondo.
find / -nouser -or -nogroup > lista & # Se ejecuta, pero en el fondo
Cuando est en ejecucin en primer plano, presionar Ctrl+z (o sea, mantener Ctrl y entonces la z).
Al hacerlo, bash nos muestra un nmero entre corchetes que es su nmero de trabajo y permite obtener
informacin de l y volverlo a traer al frente con los comandos que vienen a continuacin.
[1] 215
Joan Serrano
Revisi 0.2
16/35
CFGS
Mdul 1
Este comando muestra qu trabajos tiene el usuario. Concretamente, muestra el nmero de trabajo, el estado
(stopped o running) y la orden de comandos que lo ha generado.
Sintaxis:
jobs [opciones] [identificadorTrabajo]
vi lista.txt
Opciones de jobs:
Opcin
-l
-n
-r
-s
Significado
Lista tambin los PIDs de los trabajos.
Muestra informacin slo de los trabajos cuyo estado ha cambiado
desde la ltima consulta.
Muestra informacin slo de los jobs ejecutndose (running).
Muestra informacin slo de los jobs parados (stopped).
23.- Crear un script que espere a que el usuario le introduzca un nmero. Hacer que el script se ejecute en fondo y
despus traerlo al frente.
kill: enva una seal al proceso
Aunque no siempre es para matarlo, como es su uso ms habitual se le ha quedado ese nombre al comando. Se
puede usar especificando un nombre o un nmero de seal y un proceso o un trabajo:
kill
kill
kill
kill
kill
-l
-s
-s
-9
-9
SIGKILL 152
SIGKILL %4
152
%4
#
#
#
#
#
De todas las seales, es importante conocer SIGTERM (pide a un proceso/trabajo que termine, pero de buenas
maneras; segn el programa que sea, se puede negar) y SIGKILL (obliga a que el proceso/trabajo termine; casi
ningn proceso puede resistirse a esto).
24.- Abrid vi y enviadlo al fondo con Ctrl+Z. Enviadle la seal SIGTERM y, si no funciona, enviadle SIGKILL para
terminarlo.
Joan Serrano
Revisi 0.2
17/35
CFGS
Mdul 1
REQUISITOS PREVIOS
Tener un sistema Linux instalado, tener soltura con los comandos ms habituales (prctica 2) y no haber perdido la
contrasea de root.
Es importante recordar que con Alt+F1, +F2, etc., disponemos de varias consolas virtuales
ACTIVIDADES DE LA PRCTICA
Actividad 1.
Las medidas de seguridad en Linux, como en la mayora de SOs, se basan en la definicin de usuarios y la
asignacin de derechos y restricciones a estos usuarios.
En Linux el fichero /etc/passwd contiene la informacin de los usuarios del sistema. Est compuesto por lneas
como la siguiente, de forma que cada lnea representa a un usuario:
usuario:contrasea:uid:gid:comentario:origen:shell
usuario: es el nombre de usuario con el que acceder al sistema y se identificar (el que se pone en el login,
como por ejemplo root). Como mximo conviene que tenga 8 caracteres.
contrasea: la contrasea del usuario, aunque encriptada, ya que el fichero /etc/passwd lo pueden leer todos
los usuarios.
uid: user identifier. Un nmero que identifica al usuario, y es la forma con que Linux identifica internamente a
un usuario, aunque nosotros no lo podemos utilizar directamente a no ser que el comando nos d opcin a ello.
gid: group identifier. Un nmero que identifica un grupo (los grupos estn definidos en /etc/group, ms adelante
hablaremos de ellos) y aqu indica cul es el grupo primario de un usuario (un usuario puede pertenecer, de forma
secundaria, a otros grupos).
Joan Serrano
Revisi 0.2
18/35
CFGS
Mdul 1
comentario: texto libre, que generalmente es el nombre real del usuario o una descripcin breve.
origen: cul es el directorio origen del usuario (normalmente /home/usuario).
shell: qu shell (intrprete de comandos) utilizar el usuario por defecto. Suele ser /bin/bash.
Hay que tener en cuenta que, adems de los usuarios que hayamos definido nosotros, en Linux hay usuarios
predefinidos (que son con los que trabajan algunas aplicaciones o servidores). Los usuarios normales tienen un uid
ms alto que los del sistema (tpicamente a partir de 500). root siempre es el usuario 0.
Como medida de seguridad, generalmente en /etc/passwd no estn las contraseas encriptadas sino que en su
lugar hay una x; las contraseas encriptadas estn en el fichero /etc/shadow, que es una rplica de /etc/passwd
pero con las contraseas encriptadas, y adems slo root puede acceder a l (observaris que en /etc/shadow slo
se utilizan los campos usuario y contrasea). De esta forma los usuarios normales pueden ver qu usuarios hay en
el sistema pero slo root puede aadir usuarios.
Opcin
-c comentario
-d dirOrigen
-e AAAA-MM-DD
-g grupo
-G
grupo1[,grupo2...]
-m
-M
-n
Joan Serrano
Utilidad
Permite indicar el campo comentario*.
Indica el directorio origen del usuario (por defecto ser /home/
usuario).
Fecha en la que se desactivar la cuenta del usuario.
Grupo primario del usuario. Podemos indicar el nombre del grupo o
su gid**.
Grupos secundarios del usuario, separados por comas. Son grupos
a los que tambin pertenece y por tanto disfruta de su privilegios.
Crea el directorio origen del usuario y recrea en l la estructura de
ficheros y directorios que haya en /etc/skel***.
No crea directorio origen aunque tengamos CREATE_HOME yes.
No crea un grupo con el mismo nombre del usuario. Si no se
especifica grupo (-g), entonces por defecto el usuario pertenecer al
grupo users.
Revisi 0.2
19/35
CFGS
Mdul 1
-r
-p contrasea
-s shell
-u uid
-D
* Si queremos escribir un parmetro, nombre de fichero, opcin, etc. con espacios enmedio podemos hacerlo
escribindolo entre comillas dobles: adduser -c Jos Prez pepito. sta no es una caracterstica exclusiva de
adduser, sino de bash, as que se puede usar con cualquier programa o comando.
** Si no se especifica un grupo primario, se crea un grupo con el nombre del usuario, que ser su grupo primario (si
creamos al usuario jvalls, entonces crear un nuevo grupo jvalls, o lo asignar si ya existe).
*** Existe un fichero de configuracin, /etc/login.defs, que controla las opciones por defecto en la creacin de usuarios.
Por ejemplo, esta opcin se rige por la constante CREATE_HOME, que puede valer yes o no y que determina que esta
opcin se ejecute por defecto o sea necesario especificarla.
1.- Cread el usuario pr3. Intentad loguearos con este usuario. Podis?
passwd: cambiar contrasea de usuario
Con este comando podemos cambiar la contrasea de un usuario, activarlo cuando lo acabamos de crear y
desactivarlo cuando no queremos que acceda al sistema pero no queremos perder su informacin. Este comando lo
puede utilizar un usuario para cambiar su contrasea (no la de otros usuarios, claro) y root para cambiar la de todos
los usuarios.
Algunos ejemplos:
passwd
passwd pepito
#
#
#
#
Observaris que no acepta bien cualquier tipo de contrasea: debe tener seis caracteres al menos, no ser una
palabra del diccionario, etc. De todas formas, cuando da el mensaje de Bad password realmente la acepta,
aunque avisa de que no es una buena contrasea. La sintaxis es passwd [opciones] [usuario].
Joan Serrano
Revisi 0.2
20/35
CFGS
Mdul 1
Opcin
-d
-l
-u
-f
Utilidad
Borra la contrasea del usuario (la deja en blanco).
Bloquea el usuario (antepone algn signo a la contrasea).
Desbloquea el usuario
Aunque se d una contrasea en blanco o mala, esta opcin le
obliga a aceptarla.
2.- Cambiad la contrasea de vuestro usuario habitual desde root. Entrad con el usuario y volvedle a poner la
contrasea inicial.
3.- Si el nico que puede escribir en /etc/shadow es root, cmo puede un usuario normal cambiar su propia
contrasea? La respuesta, en la actividad de permisos.
userdel: borra un usuario
Este comando elimina un usuario del sistema (lo borra de los ficheros /etc/passwd y /etc/shadow). Si el usuario
est trabajando actualmente, puede seguir hacindolo, pero cuando salga no podr volver a entrar. Slo tiene una
opcin, que se muestra en los ejemplos:
userdel pepe
userdel -r pepe
Actividad 2.
Gestin de grupos
Joan Serrano
Revisi 0.2
21/35
CFGS
Mdul 1
El fichero /etc/group indica qu grupos hay en el sistema y qu usuarios pertenecen a ellos. Su estructura es muy
parecida a la de /etc/passwd pero tiene menos informacin:
grupo:contrasea:gid:miembros
gid: group identifier, nmero que identifica al grupo, y es el valor que utiliza Linux internamente. Los gid<500
suelen estar reservados para grupos especiales del sistema (500 es un valor definido en /etc/login.defs con el
nombre de GID_MIN).
miembros: aqu se listan los usuarios que tienen este grupo como secundario (no los que lo tienen como
primario, que ya lo tienen apuntado en su fichero /etc/passwd).
Utilidad
Obliga a que el grupo tenga un gid
determinado.
Permite crear un grupo de sistema
(gid<GID_MIN).
Joan Serrano
Revisi 0.2
22/35
CFGS
Mdul 1
Grupo
asi1t
asi2t
Usuario
Jess
Laura
Elena
Marcos
6.- Haced que pertenezcan tambin al grupo asi; incorporad a Jess y Laura con comandos, y a Elena y Marcos
modificando los ficheros de configuracin. Comprobadlo con la orden groups.
7.- Laura ha aprobado todo primero as que tiene que pasar a asi2t como nuevo grupo principal. Cmo lo harais
mediante comandos? Y modificando los ficheros de configuracin?
8.- Por qu los ficheros de Laura siguen perteneciendo al grupo asi1t si Laura ha cambiado al asi2t? Por qu no
pertenecen tambin al grupo asi, al que Laura tambin pertenece?
9.- Eliminad los usuarios Marcos y Elena, que ya han aprobado segundo. Pero eliminad a Marcos con comandos y a
Elena modificando los ficheros de configuracin.
Actividad 3.
Para poder practicar con las operaciones de gestin de usuarios y grupos, es importante conocer los siguientes
comandos de trabajo con usuarios: cambio del usuario actual, listado de usuarios conectados, etc.
su (set user): cambiar usuario actual
Aunque hayamos entrado en el sistema como cierto usuario, es posible que queramos trabajar temporalmente
como otro usuario (tpicamente, que necesitemos lanzar una orden como root). Para esto tenemos el comando su,
que nos permite cambiar de usuario, trabajar con l, y volver con nuestro usuario mediante la orden exit. Hay que
tener en cuenta que podemos anidar un su en otro, y tendremos que hacer tantos exit como sea necesario.
su pepito
su
Al cambiar a otro usuario pedir su contrasea, salvo si el usuario actual es root (que puede convertirse en los
usuarios que quiera).
who: quin hay conectado al sistema
Muestra una lista de los usuarios conectados al sistema, concretamente su nombre, la terminal a la que est
conectada (recordemos que con Alt+Fn disponemos de varias terminales: tty1, tty2, etc.), la fecha y hora de
entrada, y si est conectado desde otro ordenador.
Este comando lo puede ejecutar cualquier usuario:
$who
roottty1
pepetty2
01 05 15:32
01 05 17:15
Joan Serrano
Revisi 0.2
23/35
CFGS
Mdul 1
La opcin -i aade otra columna que indica cunto tiempo lleva inactivo ese usuario (o un . si ha trabajado en el
ltimo minuto).
La opci -w (o --message) muestra si el usuario acepta mensajes de la orden write (que veremos a continuacin).
Tras la informacin de cada usuario sale un + si los acepta, un - si no, y un ? si no se puede determinar (porque no
se encuentra su terminal).
Incluso permite un poco de filosofa para averiguar detalles sobre uno mismo: who am i.
Nota tcnica: el fichero /var/run/utmp contiene informacin sobre los usuarios conectados al sistema, aunque no
es legible. En algunos sistemas, /var/run/wtmp contiene informacin sobre los usuarios que se han conectado al
sistema alguna vez.
Actividad 4.
Permisos
El sistema de seguridad en Linux tiene como parte fundamental la asignacin de permisos para los diferentes
usuarios en ficheros y directorios. Veremos que se trata de un sistema muy detallado y aprenderemos a utilizar los
comandos ms importantes para trabajar con permisos.
Cuando hacemos ls l, nos aparece mucha ms informacin sobre los ficheros y directorios. La primera columna
contiene algo como drwxr-xr-x -rw-r--r-- , y de estas diez letras la primera indica el tipo de elemento que se
est visualizando (d=directorio; -=fichero normal; l= enlace simblico, que se explica ms abajo; b=dispositivo
de bloques, como un disco; c=dispositivo de caracteres, como el teclado; p=FIFO con nombre (named pipe), las
tuberas que se utilizan para comunicar programas; S=socket, que permite comunicar varios ordenadores entre s).
Pero lo que nos interesa es la siguiente parte: los nueve caracteres que indican los permisos que tienen los ficheros
(o directorios, o lo que sean: usaremos el trmino general fichero). Hay que agruparlos de tres en tres caracteres,
con lo que tenemos:
Las tres primeras letras indican los permisos de lectura, escritura y ejecucin del fichero para el propietario del
fichero (el nombre que muestra el ls l; suele ser quien lo ha creado, aunque esto se puede cambiar).
Las otras tres, los permisos de lectura, escritura y ejecucin del fichero para los miembros del grupo del fichero
(cada fichero pertenece a un grupo, como indica ls l, y adems ese grupo no tiene por qu ser el grupo primario
del propietario).
Las tres ltimas indican los mismos permisos para el resto de usuarios del sistema.
Sobre un fichero normal, los permisos tienen los siguientes significados:
Joan Serrano
Revisi 0.2
24/35
CFGS
Mdul 1
Lectura: se pueden listar los contenidos del directorio (podemos hacer un ls).
Escritura: se pueden crear y borrar ficheros.
Ejecucin: se puede acceder al directorio (hacer cd al directorio).
Consecuencia: aunque no tengas permiso de escritura en un fichero, puedes borrarlo si tienes permiso de escritura
en el directorio que lo contiene, aunque no puedes modificarlo.
Hay una serie de comandos que trabajan con permisos, y permiten indicarlos de dos maneras: simblica o
numrica.
NOTACIN NUMRICA DE PERMISOS
Los tres grupos de tres permisos que hemos visto se ven como tres cifras octales (base 8), la primera para el
propietario, la segunda para el grupo y la tercera para los dems, de forma que los permisos que quieran darse a
cada categora de usuarios sern el resultado de sumar los siguientes valores: 1 para ejecucin, 2 para escritura, 4
para lectura.
751 indica todos los permisos para el propietario (4+2+1=7), lectura y ejecucin para los del
grupo (4+1=5), y ejecucin slo para los dems (1)
A continuacin veremos las rdenes para manejar todo esto, aunque primero vamos a estudiar una orden que no
tiene mucha relacin pero ayudar a trabajar con permisos, pues permite crear cmodamente ficheros nuevos, y
cambiar la fecha de los existentes.
touch: cambiar tiempo y crear fichero
Su funcin principal es cambiar la fecha y la hora de los ficheros afectados, si bien una utilidad casi ms importante
es que, si alguno de los ficheros indicados no existe, lo crea. Respecto a un fichero se almacenan tres tiempos
diferentes, y esto no slo afecta a touch sino tambin a otros comandos como find:
Joan Serrano
Revisi 0.2
25/35
CFGS
Mdul 1
Tiempo de acceso: cundo se ha ledo por ltima vez (asociado a la letra a).
Tiempo de cambio de estado: cundo se ha cambiado sus propiedades por ltima vez (permisos, propietario,
tiempos, etc.) (asociado a la letra c).
Tiempo de modificacin: cundo se ha modificado por ltima vez (asociado a la letra m).
Slo puede utilizarlo el propietario de los ficheros, aunque si lo nico que se quiere es cambiar la fecha de acceso y
modificacin al tiempo actual, puede hacerlo cualquiera que tenga permisos de escritura sobre los ficheros.
touch [opciones] fichero(s)
Opcin
-a
-c
-m
--reference=fichero
-t[AAAA]
MMDDhhmm[.ss]
Utilidad
Cambia slo el tiempo de acceso
Si el fichero no existe no lo crea.
Slo cambia el tiempo de modificacin
En vez de poner el tiempo actual, le pone el
que tenga el fichero indicado
En vez de poner el tiempo actual, le pone el
indicado en la expresin (slo puede usarlo
el propietario)
Como se ve, el tiempo de cambio de estado no se puede cambiar (aunque si "tocamos" un fichero, ese momento
pasar a ser el nuevo tiempo de cambio de estado porque hemos cambiado una propiedad del fichero).
touch -a fich
touch noExisto
10.- Cread un fichero nuevo y ponedle como fecha de modificacin el 10/01/2014 a las 19:45. Comprobad que se ve
esta nueva fecha haciendo ls -l.
chmod (change mode): cambiar permisos
Permite cambiar los permisos de uno o ms ficheros o directorios. Slo puede utilizarlo el propietario de los ficheros
(o root, por supuesto). La sintaxis general es:
chmod [opciones] permisos fichero(s)
Donde las opciones son opcionales (por eso van entre corchetes y por eso se llaman opciones) y pueden ser las
siguientes:
Opcin
Utilidad
-v
Muestra informacin de lo que va haciendo con
cada fichero (modo verbose, se suele llamar a
Joan Serrano
Revisi 0.2
26/35
CFGS
Mdul 1
-f
-R
esto)
Evita que se impriman mensajes de error si no
puede cambiar los permisos de un fichero
Cambia los permisos de ficheros y directorios
recursivamente
Asigna al fichero los permisos que tenga fichRef.
-reference=fichRe
f
Los permisos se pueden indicar de forma simblica o numrica (incluso se pueden indicar varios permisos
separndolos con comas), y por ltimo se deben indicar los ficheros (o directorios) que queramos cambiar.
chmod a+x script? # Aade permiso de ejecucin a todos los ficheros
# script? (el ? representa a cualquier carcter)
chmod -R 755 .
# Pone como 755 todos los ficheros del directorio
# actual y de sus subdirectorios
chmod +x,o-w sc2 # Da permiso de ejecucin a todos pero quita de
# escritura a los dems del fichero sc2
Nota: aunque an no sepis bien de qu va el tema, adelantamos algo: chmod aplicado a un enlace simblico no
cambia las propiedades del enlace, sino del fichero a que hace referencia el enlace.
Hay otra forma de especificar los permisos, que es copirselos de otro fichero. Para ello se utiliza, en lugar de los
permisos, la opcin --reference=fichero, con lo que todos los ficheros indicados a continuacin pasarn a tener los
mismos permisos que este fichero.
# Los ficheros lista.txt y a.out pasarn a tener los mismos permisos que
# tenga fich1
chmod --reference=fich1 lista.txt a.out
11.- Supongamos que tenis dos usuarios normales, por ejemplo toni y laura (si no, creis dos). Puede acceder laura
al directorio origen de toni? Puede ver sus ficheros? Y modificarlos? Y borrarlos? Justificad, comprobando los
permisos correspondientes, por qu esto ocurre as.
12.- Para cada uno de los casos anteriores, cambiad los permisos para que el sistema haga lo contrario (si antes
dejaba que laura accediese al directorio de toni que ahora no pueda, etc.).
13.- Cread, con root, el directorio /home/prueba/. Comprobad que otros usuarios no pueden crear ficheros en l.
Cambiad los permisos para que todos los usuarios puedan crear ficheros en este directorio.
14.- Cread un usuario admin que pertenezca al grupo root y dadle todos los permisos para trabajar con el directorio /
root/.
chown (change owner): cambia el propietario de un fichero
Este comando permite cambiar la posesin de un fichero. En principio un fichero es de quien lo crea, pero a
menudo interesa cambiar la propiedad del fichero, o el grupo al que pertenece. Este comando slo se puede aplicar
a los ficheros sobre los que se tiene permiso de escritura, y slo te lo puedes asignar a ti mismo (salvo si eres root,
ya que entonces lo puedes asignar a quien quieras).
chown [opciones] propietarios fichero(s)
Joan Serrano
Revisi 0.2
27/35
CFGS
Mdul 1
Opciones:
pepe fich1
pepe:asi1t fich1
pepe: fich1
:asi1t fich1
#
#
#
#
#
fich1
fich1
fich1
fich1
asi1t
En vez de especificar un nuevo propietario y/o grupo, se puede copiar de otro fichero con --reference=fichero, igual
que con chmod.
15.- Cread el directorio /tmp/trabajo/ para el grupo asi1t. Haced que toni y laura pertenezcan a ese grupo y que
puedan crear ficheros en l, pero los dems usuarios slo podrn ver los contenidos de ese directorio.
16.- Con el usuario laura, cread un fichero ej2 en /home/laura/. Cambiad a laura al grupo primario asi1t. A qu grupo
pertenece el fichero /home/laura/ej2? Por qu no ha cambiado al grupo asi1t? Puede laura acceder todava al
fichero, si no es de su grupo? Por qu?
Importante: recordad que el grupo de un fichero no tiene nada que ver con el grupo de su propietario, pueden ser
totalmente distintos (aunque por defecto son el mismo grupo).
chgrp (change group): cambia el grupo de un fichero
Este comando permite cambiar un fichero de grupo (lo que tambin puede hacerse con chown). Las opciones y la
sintaxis son las mismas, y tambin dispone de la variante con --reference=fichero:
chgrp [opciones] nuevoGrupo fichero(s)
chgrp [opciones] --reference=fichero fichero(s)
Joan Serrano
Revisi 0.2
28/35
CFGS
Mdul 1
Hay que advertir que la mscara no contiene los valores de los permisos sino su complemento. O sea, lo que se
le resta a los permisos totales (777) para obtener los permisos por defecto. As, si nuestra mscara es 022, los
permisos por defecto de nuestros ficheros sern 777-022=755 (restando cifra a cifra, ciudado).
Actividad 5.
Enlaces
En Linux se distinguen dos tipos de enlaces: los duros (hardlinks) y los simblicos (symlinks), y conviene hablar de
ellos por separado.
Un enlace duro es el nombre de un fichero; es un enlace en el sentido de que permite al usuario acceder
a informacin que est almacenada en algn lugar misterioso del disco duro (ese lugar es el inodo, para
entendernos el nmero de bloque del disco en que est el fichero; con ls -i podemos ver el nmero de inodo de los
ficheros y directorios). As que cuando estamos haciendo cat fich.txt estamos utilizando un enlace duro (el que
tiene de nombre fich.txt) para acceder al contenido del fichero.
Lo novedoso en Linux es que un mismo fichero puede tener varios nombres, o sea, varios enlaces duros, todos
ellos igual de importantes. Si un fichero tiene dos enlaces duros (por ejemplo /home/luis/fich1.txt y /home/pedro/
prctica.txt), cualquier modificacin en alguno de ellos repercutir en el mismo fichero, porque al fin y al cabo ambos
hacen referencia al mismo fichero.
Si se borra un enlace duro, el fichero sigue siendo accesible desde los dems enlaces duros que tenga; cuando se
borre su ltimo enlace duro ser cuando se borre el fichero en s. Por cierto, ls -l dice, en la segunda columna, el
nmero de enlaces duros que tiene un mismo fichero.
Hay que tener en cuenta que rm lo que hace es borrar un enlace duro (y el fichero, pero slo si su nmero de
enlaces duros llega a cero). Si se hace mv de un fichero (y no cambia de sistema de ficheros, o sea, no lo estamos
moviendo del disco duro al disquete, por ejemplo) no se mueve el fichero en s, que permanece en el mismo inodo,
sino que se cambia un enlace duro por otro; los dems enlaces duros siguen siendo vlidos.
7.- Pregunta: sabiendo que el nmero de inodo es lo que indica realmente qu fichero es, o sea, que todos los enlaces
duros de un mismo fichero mostrarn el mismo nmero de inodo, cmo averiguarais cules son los enlaces duros
que tiene un fichero?
Por otra parte, un enlace simblico es un pequeo fichero que hace referencia a un fichero (estrictamente hablando,
a un enlace duro de un fichero). Con ls -l, los enlaces simblicos tienen una l en el primer carcter (tipo de fichero);
adems se muestra a qu fichero hacen referencia:
lrwxrwxrwx
1 root
root
7 ene 13
Este enlace puede utilizarse para acceder al fichero real, pero siempre teniendo en cuenta que, si por ejemplo
hacemos vi enlaceSim, Linux averiguar cul es el fichero a que hace referencia y abrir este fichero.
Si se borra un fichero o se renombra (mueve) el enlace duro correspondiente, los enlaces simblicos se quedan
colgando.
Joan Serrano
Revisi 0.2
29/35
CFGS
Mdul 1
Para hacerse mejor una idea, un enlace simblico es como un acceso directo de Windows.
Por si tenis curiosidad, los smbolos . y .. son enlaces duros al directorio actual y al directorio padre
respectivamente.
ln: crea un enlace (link)
Este comando permite crear nuevos enlaces para un fichero dado. Por defecto crea enlaces duros, aunque tiene
una opcin para crearlos simblicos. La sintaxis general y sus opciones son:
ln [opcin] objetivo(s)
Opcin
-d
-f
-i
-s
Utilidad
Permite que root (y slo l) haga enlaces
duros de directorios (en principio slo se
pueden hacer enlaces duros de directorios).
Borra los ficheros existentes si coinciden con
los enlaces a crear.
Pregunta antes de borrar ficheros si
coinciden con los enlaces a crear.
Crea enlaces simblicos (por defecto son
duros).
Joan Serrano
Revisi 0.2
30/35
CFGS
Mdul 1
8.- Cread un fichero llamado asignaturas que contenga los nombres de vuestras asignaturas. Cread un enlace
simblico al mismo en el mismo directorio. Haced ls -l y ved qu muestra (fijaos en el nmero de enlaces del fichero
original). Abrid el enlace con vi y comprobad que abre el fichero original; para verificar que se trata del mismo fichero,
haced un cambio y comprobad que haciendo cat asignaturas se ve el cambio. (Distinguidlo de una copia).
9.- Borrad el fichero original. Qu pasa con el enlace?
20.- Cread un fichero llamado semana con los das de la semana. Cread un enlace duro llamado semana2. Repetid el
primer ejercicio con este nuevo enlace y comprobad que el comportamiento es el mismo (hay una diferencia; cul?).
21.- Repetid el segundo ejercicio. Qu ocurre ahora?
Actividad 6.
Una parte esencial en la administracin de un sistema Linux es el control de los procesos que hay en el sistema
en cada momento, y conocer las herramientas necesarias para poderlos eliminar en un momento dado es
especialmente importante. Esto es an ms evidente en un servidor, en el que los procesos no se ven en pantalla
sino que, en principio, estn ocultos, y es importante saber obtener cules hay, en qu estado se encuentran y qu
consumo de recursos estn haciendo.
Los procesos en Linux tienen una relacin padre-hijo entre ellos, o sea, el proceso que ejecuta a otro es su padre; si
por ejemplo desde bash (que es un proceso) ejecutamos un find, ste ser hijo de aqul.
Los trabajos (jobs) en Linux representan las distintas tareas que est realizando un usuario en un momento dado, y
es bastante interesante saber controlarlas para maximizar la productividad en el trabajo y realizar varias tareas a la
vez; aunque esto es menos importante al disponer de varias consolas virtuales, en ocasiones no se dispone de ellas
o hay otras circunstancias que recomiendan la gestin de varios trabajos desde una misma consola.
Un trabajo, que al fin y al cabo es una orden completa de un usuario (o sea, todos los comandos enlazados
con tuberas en una misma orden, tipo ls *.exe | grep prueba | less), tiene un nmero asociado para poderlo
identificar posteriormente. Adems se puede encontrar en dos estados: se puede estar viendo cmo se ejecuta
en su terminal (se dice que est en primer plano o en foreground), o puede estarse ejecutando en la sombra, o
sea, ejecutndose pero sin que se vean sus resultados; entonces se dice que est en el fondo (background). Hay
comandos y opciones de bash para cambiar el estado de los trabajos.
Otro concepto, que se ve con ms profundidad en otros crditos, es el de seal, que es un mecanismo de
comunicacin entre procesos que permite enviar avisos entre distintos procesos. De momento lo usaremos para
matar procesos, aunque tiene muchos ms usos.
ps: muestra el estado de los procesos (processor share)
Este comando genera un listado de los procesos que hay en el sistema en un momento dado. La sintaxis
general es:
ps [opciones][pids]
Joan Serrano
Revisi 0.2
31/35
CFGS
Mdul 1
Donde pids es una lista de PIDs (process identifiers, los nmeros que identifican a cada proceso) separada por
comas y sin espacios (ni entre ellos ni respecto a la ltima opcin). Permite ver informacin slo de los procesos
indicados:
ps a13,42
ps 44,32
Segn la opcin elegida, ps mostrar ms o menos informacin en un listado en el que cada fila es un proceso y
cada columna una caracterstica suya. El significado de cada columna, segn el ttulo que aparece en la primera
fila, es el siguiente:
Columna
Significado
USER
Usuario propietario del proceso (o sea, el que lo ha ejecutado)
PID
PID del proceso
%CPU
Porcentaje de CPU que est utilizando
%MEM
Porcentaje de memoria que est utilizando
VSZ
Tamao de memoria virtual
utilizada por el proceso (virtual
memory size)
RSS
Memoria RAM real que est ocupando (resident size)
TTY
Terminal asociada al proceso (? si el proceso no tiene ninguna
terminal asociada, como un servidor)
STAT
Estado del proceso:
R: ejecutable (runnable), o sea, que en cualquier
momento puede entrar en ejecucin*
Joan Serrano
Revisi 0.2
32/35
CFGS
Mdul 1
Las opciones de ps son las siguientes (atencin, no llevan un guin delante, se escribe ps a, por ejemplo):
Opcin
Significado
u
Listado para el usuario (o sea, es un listado largo; si no se pone, sale un
listado corto).
f
Listado en forma de bosque (forest) de procesos, o sea, muestra las
relaciones padre-hijo. Un bosque es un conjunto de rboles.
a
Muestra los procesos de todos (all) los usuarios. S, aunque no seas
root. Es una opcin de dudosa seguridad, pero ah est.
x
Muestra los procesos no controlados por ninguna terminal (servidores y
similares).
h
No incluye la cabecera en el listado.
r
Muestra slo los procesos con STAT=R
22.- Encontrad todos los procesos del usuario root.
Opciones de bash para enviar trabajos al background
Principalmente hay dos formas de enviar un trabajo al fondo:
Poner un & al final de su lnea de comandos para que empiece a ejecutarse en el fondo.
find / -nouser -or -nogroup > lista & # Se ejecuta, pero en el fondo
Cuando est en ejecucin en primer plano, presionar Ctrl+z (o sea, mantener Ctrl y entonces la z).
Al hacerlo, bash nos muestra un nmero entre corchetes que es su nmero de trabajo y permite obtener
informacin de l y volverlo a traer al frente con los comandos que vienen a continuacin.
[1] 215
Joan Serrano
Revisi 0.2
33/35
CFGS
Mdul 1
Este comando muestra qu trabajos tiene el usuario. Concretamente, muestra el nmero de trabajo, el estado
(stopped o running) y la orden de comandos que lo ha generado.
Sintaxis:
jobs [opciones] [identificadorTrabajo]
vi lista.txt
Opciones de jobs:
Opcin
-l
-n
-r
-s
Significado
Lista tambin los PIDs de los trabajos.
Muestra informacin slo de los trabajos cuyo estado ha cambiado
desde la ltima consulta.
Muestra informacin slo de los jobs ejecutndose (running).
Muestra informacin slo de los jobs parados (stopped).
23.- Crear un script que espere a que el usuario le introduzca un nmero. Hacer que el script se ejecute en fondo y
despus traerlo al frente.
kill: enva una seal al proceso
Aunque no siempre es para matarlo, como es su uso ms habitual se le ha quedado ese nombre al comando. Se
puede usar especificando un nombre o un nmero de seal y un proceso o un trabajo:
kill
kill
kill
kill
kill
-l
-s
-s
-9
-9
SIGKILL 152
SIGKILL %4
152
%4
#
#
#
#
#
De todas las seales, es importante conocer SIGTERM (pide a un proceso/trabajo que termine, pero de buenas
maneras; segn el programa que sea, se puede negar) y SIGKILL (obliga a que el proceso/trabajo termine; casi
ningn proceso puede resistirse a esto).
24.- Abrid vi y enviadlo al fondo con Ctrl+Z. Enviadle la seal SIGTERM y, si no funciona, enviadle SIGKILL para
terminarlo.
Joan Serrano
Revisi 0.2
34/35
CFGS
Mdul 1
Joan Serrano
Revisi 0.2
35/35