pràctica 3 linux

35
CFGS Mòdul 1 ASIX / DAM / DAW Implantació de Sistemes Operatius / Sistemes Informàtics 1 r UF2 PRÁCTICA 3: ADMINISTRACIÓN DE UN SISTEMA LINUX OBJETIVOS Ahora que ya conocéis los comandos básicos de Linux, los comandos para los usuarios normales, es momento de empezar a trabajar como administradores con el sistema, creando y eliminando usuarios, dándoles permisos y configurando el sistema para adaptarlo a sus necesidades. Otro aspecto importante es saber consultar qué procesos hay en el sistema y saberlos eliminar si es necesario. También veremos cómo acceder a dispositivos de almacenamiento y cómo configurar el gestor de arranque, LILO, para lograr más opciones o rescatar un sistema que no arranca. REQUISITOS PREVIOS Tener un sistema Linux instalado, tener soltura con los comandos más habituales (práctica 2) y no haber perdido la contraseña de root. Es importante recordar que con Alt+F1, +F2, etc., disponemos de varias consolas virtuales ACTIVIDADES DE LA PRÁCTICA Actividad 1. Creación y eliminación de usuarios Las medidas de seguridad en Linux, como en la mayoría de SOs, se basan en la definición de usuarios y la asignación de derechos y restricciones a estos usuarios. En Linux el fichero /etc/passwd contiene la información de los usuarios del sistema. Está compuesto por líneas como la siguiente, de forma que cada línea representa a un usuario: usuario:contraseña: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 máximo conviene que tenga 8 caracteres. contraseña: la contraseña del usuario, aunque encriptada, ya que el fichero /etc/passwd lo pueden leer todos los usuarios. uid: user identifier. Un número 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é opción a ello. gid: group identifier. Un número que identifica un grupo (los grupos están definidos en /etc/group, más adelante hablaremos de ellos) y aquí indica cuál es el grupo primario de un usuario (un usuario puede pertenecer, de forma secundaria, a otros grupos). Joan Serrano Revisió 0.2 1/35

Upload: genis28

Post on 23-Dec-2015

53 views

Category:

Documents


8 download

DESCRIPTION

Comandos para Linux

TRANSCRIPT

Page 1: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

PRÁCTICA 3: ADMINISTRACIÓN DE UN SISTEMA LINUX

OBJETIVOSAhora que ya conocéis los comandos básicos de Linux, los comandos para los usuarios normales, es momento de empezar a trabajar como administradores con el sistema, creando y eliminando usuarios, dándoles permisos y configurando el sistema para adaptarlo a sus necesidades. Otro aspecto importante es saber consultar qué procesos hay en el sistema y saberlos eliminar si es necesario.También veremos cómo acceder a dispositivos de almacenamiento y cómo configurar el gestor de arranque, LILO, para lograr más opciones o rescatar un sistema que no arranca.

REQUISITOS PREVIOSTener un sistema Linux instalado, tener soltura con los comandos más habituales (práctica 2) y no haber perdido la contraseña de root.Es importante recordar que con Alt+F1, +F2, etc., disponemos de varias consolas virtuales

ACTIVIDADES DE LA PRÁCTICA

Actividad 1. Creación y eliminación de usuarios

Las medidas de seguridad en Linux, como en la mayoría de SOs, se basan en la definición de usuarios y la asignación de derechos y restricciones a estos usuarios. En Linux el fichero /etc/passwd contiene la información de los usuarios del sistema. Está compuesto por líneas como la siguiente, de forma que cada línea representa a un usuario:usuario:contraseña: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 máximo conviene que tenga 8 caracteres.▪ contraseña: la contraseña del usuario, aunque encriptada, ya que el fichero /etc/passwd lo pueden leer todos los usuarios.▪ uid: user identifier. Un número 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é opción a ello.▪ gid: group identifier. Un número que identifica un grupo (los grupos están definidos en /etc/group, más adelante hablaremos de ellos) y aquí indica cuál es el grupo primario de un usuario (un usuario puede pertenecer, de forma secundaria, a otros grupos).

Joan Serrano Revisió 0.2 1/35

Page 2: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

▪ comentario: texto libre, que generalmente es el nombre real del usuario o una descripción breve.▪ origen: cuál es el directorio origen del usuario (normalmente /home/usuario).▪ shell: qué shell (intérprete de comandos) utilizará el usuario por defecto. Suele ser /bin/bash.

Hay que tener en cuenta que, además 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 más alto que los del sistema (típicamente a partir de 500). root siempre es el usuario 0.Como medida de seguridad, generalmente en /etc/passwd no están las contraseñas encriptadas sino que en su lugar hay una x; las contraseñas encriptadas están en el fichero /etc/shadow, que es una réplica de /etc/passwd pero con las contraseñas encriptadas, y además sólo root puede acceder a él (observaréis que en /etc/shadow sólo se utilizan los campos usuario y contraseña). De esta forma los usuarios normales pueden ver qué usuarios hay en el sistema pero sólo root puede añadir usuarios.

adduser (useradd): añadir usuario

El programa real es useradd, pero suele haber un enlace (o sea, una especie de alias) llamado adduser que es más legible. Ambos están en /usr/bin; conviene ir familiarizándose con la estructura de directorios de Linux. Este programa permite añadir un usuario al sistema. Lo que hace es añadir una línea para el usuario en /etc/passwd, otra en /etc/shadow, crear su directorio origen y copiar en éste una serie de ficheros de configuración básicos. Sólo puede ejecutarlo root.La sintaxis básica es adduser [opciones] usuario:adduser pepito # Crea el usuario pepitoadduser -g asi1t manolito # Crea el usuario manolito y lo asigna al

# grupo asi1t

Opción Utilidad-c comentario Permite indicar el campo comentario*.-d dirOrigen Indica el directorio origen del usuario (por defecto será /home/

usuario).-e AAAA-MM-DD Fecha en la que se desactivará la cuenta del usuario.-g grupo Grupo primario del usuario. Podemos indicar el nombre del grupo o

su gid**.-G grupo1[,grupo2...]

Grupos secundarios del usuario, separados por comas. Son grupos a los que también pertenece y por tanto disfruta de su privilegios.

-m Crea el directorio origen del usuario y recrea en él la estructura de ficheros y directorios que haya en /etc/skel***.

-M No crea directorio origen aunque tengamos CREATE_HOME yes.-n 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.

Joan Serrano Revisió 0.2 2/35

Page 3: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

-r Crea una cuenta del sistema (uid<UID_MIN, otra constante de /etc/login.defs), o sea, con uid pequeño. Normalmente se reservan para propósitos especiales. Con esta opción, si no se especifica -m no se creará directorio origen.

-p contraseña Permite indicar la contraseña del usuario, aunque debe estar ya encriptada (la función de C crypt() permite crear programas que encripten las contraseñas). Si no se indica contraseña, la cuenta estará desactivada.

-s shell Qué shell tendrá el usuario. Por defecto suele ser /bin/bash.-u uid Permite especificar el uid del usuario (si no existe ya). Lo habitual es

dejar que el sistema lo asigne.-D Muestra qué valores por defecto hay en /etc/default/useradd (fichero

que contiene opciones de configuración de useradd).

* Si queremos escribir un parámetro, nombre de fichero, opción, etc. con espacios enmedio podemos hacerlo escribiéndolo entre comillas dobles: adduser -c “José Pérez” pepito. Ésta no es una característica 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 configuración, /etc/login.defs, que controla las opciones por defecto en la creación de usuarios. Por ejemplo, esta opción se rige por la constante CREATE_HOME, que puede valer yes o no y que determina que esta opción se ejecute por defecto o sea necesario especificarla.

1.- Cread el usuario pr3. Intentad loguearos con este usuario. ¿Podéis?

passwd: cambiar contraseña de usuario

Con este comando podemos cambiar la contraseña de un usuario, activarlo cuando lo acabamos de crear y desactivarlo cuando no queremos que acceda al sistema pero no queremos perder su información. Este comando lo puede utilizar un usuario para cambiar su contraseña (no la de otros usuarios, claro) y root para cambiar la de todos los usuarios.

Algunos ejemplos:passwd # Cambia la contraseña del usuario actual. Pide la

# contraseña actual y dos veces la nueva.passwd pepito # Cambia la contraseña del usuario pepito (debemos ser root

# o pepito para poder hacer esto).

Observaréis que no acepta bien cualquier tipo de contraseña: 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 contraseña. La sintaxis es passwd [opciones] [usuario].

Joan Serrano Revisió 0.2 3/35

Page 4: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

Opción Utilidad-d Borra la contraseña del usuario (la deja en blanco).-l Bloquea el usuario (antepone algún signo a la contraseña).-u Desbloquea el usuario-f Aunque se dé una contraseña en blanco o “mala”, esta opción le

obliga a aceptarla.

2.- Cambiad la contraseña de vuestro usuario habitual desde root. Entrad con el usuario y volvedle a poner la contraseña inicial.3.- Si el único que puede escribir en /etc/shadow es root, ¿cómo puede un usuario normal cambiar su propia contraseña? 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 haciéndolo, pero cuando salga no podrá volver a entrar. Sólo tiene una opción, que se muestra en los ejemplos:userdel pepe # Borra el usuario pepeuserdel -r pepe # Borra el usuario pepe y su directorio origen

Este comando sólo puede ejecutarlo root.También podemos eliminar usuarios eliminando manualmente las entradas correspondientes en /etc/passwd y /etc/shadow y borrando su directorio origen. Si se ha creado un grupo especial para este usuario conviene borrarlo también, con groupdel.De ambas formas sólo borramos el directorio origen, pero un usuario puede tener más ficheros en el sistema; el comando find permite encontrar los ficheros que pertenecen a un usuario o a un grupo, para poder eliminarlos todos.Al borrar un usuario hay que borrar también sus ficheros o asignarlos a algún usuario especial.

4.- Borrad un usuario que no necesitéis (o cread uno expresamente). Comprobad que los ficheros y directorios que poseía ahora no aparecen con un usuario/grupo, sino que sólo aparece el número. Utilizad la orden find para encontrar los ficheros y directorios de /home/ que haya en esta situación y borrarlos.

usermod: modifica un usuario

Este comando permite modificar los datos básicos de la cuenta de un usuario, y por tanto tiene las mismas opciones que useradd, a la que hay que añadir -l usuario para cambiar el nombre del usuario (el uid no se puede cambiar, ya que es lo que realmente identifica al usuario).

Actividad 2. Gestión de grupos

Joan Serrano Revisió 0.2 4/35

Page 5: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

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 información:grupo:contraseña:gid:miembros

▪ grupo: nombre del grupo▪ contraseña: este campo no se suele utilizar, permite indicar una contraseña para el grupo de forma que se pueda entrar en él aun no perteneciendo (usando el comando newgrp). En todo caso la contraseña encriptada no estaría aquí, sino en el fichero /etc/gshadow, con el mismo objetivo que /etc/shadow. En la práctica estas contraseñas no se utilizan.▪ gid: group identifier, número 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).

Este fichero también es legible por todos los usuarios.

groups: a qué grupos pertenece un usuario

Este comando permite ver a qué grupos pertenecemos o a qué grupos pertenecen otros usuarios. Lo puede lanzar cualquier usuario, y puede averiguar los grupos de cualquier otro usuario (al fin y al cabo ésa es información que está en /etc/passwd y /etc/group, disponible para todos).groups # Indica a qué grupos pertenece el usuario actualgroups pepe # A qué grupos pertenece pepegroups pepe root mari # A qué grupos pertenecen pepe, root, mari

groupadd: crear grupo

Crea un nuevo grupo. La sintaxis es groupadd [opciones] grupo, y las opciones son:

Opción Utilidad-g gid Obliga a que el grupo tenga un gid

determinado.-r Permite crear un grupo de sistema

(gid<GID_MIN).

groupdel: borrar grupo

Borra un grupo. No se puede borrar el grupo primario de un usuario; hay que eliminar primero el usuario en cuestión (o cambiarlo de grupo primario) y después borrar el grupo.Uso: groupdel grupo.

5.- Cread la siguiente estructura de grupos y usuarios:

Joan Serrano Revisió 0.2 5/35

Page 6: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

Grupo Usuario

asi1t JesúsLaura

asi2t ElenaMarcos

6.- Haced que pertenezcan también al grupo asi; incorporad a Jesús y Laura con comandos, y a Elena y Marcos modificando los ficheros de configuración. Comprobadlo con la orden groups.7.- Laura ha aprobado todo primero así que tiene que pasar a asi2t como nuevo grupo principal. ¿Cómo lo haríais mediante comandos? ¿Y modificando los ficheros de configuración?8.- ¿Por qué los ficheros de Laura siguen perteneciendo al grupo asi1t si Laura ha cambiado al asi2t? ¿Por qué no pertenecen también al grupo asi, al que Laura también 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 configuración.

Actividad 3. Trabajo con usuarios

Para poder practicar con las operaciones de gestión 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 (típicamente, 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 # Cambia al usuario pepitosu # Cambia a root

Al cambiar a otro usuario pedirá su contraseña, salvo si el usuario actual es root (que puede convertirse en los usuarios que quiera).

who: quién 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:$whoroottty1 01 05 15:32pepetty2 01 05 17:15

Joan Serrano Revisió 0.2 6/35

Page 7: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

La opción -i añade otra columna que indica cuánto 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 continuación). Tras la información 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 filosofía para averiguar detalles sobre uno mismo: who am i.

Nota técnica: el fichero /var/run/utmp contiene información sobre los usuarios conectados al sistema, aunque no es legible. En algunos sistemas, /var/run/wtmp contiene información 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 asignación 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 más importantes para trabajar con permisos.

Cuando hacemos ls –l, nos aparece mucha más información 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 simbólico, que se explica más abajo; b=dispositivo de bloques, como un disco; c=dispositivo de caracteres, como el teclado; p=FIFO con nombre (named pipe), las tuberías 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 término 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 ejecución 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 ejecución del fichero para los miembros del grupo del fichero (cada fichero pertenece a un grupo, como indica ls –l, y además 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:● Lectura: se puede leer el contenido del fichero.● Escritura: se puede modificar el contenido del fichero.● Ejecución: se puede ejecutar el fichero (aplicable a programas binarios y scripts).

Sin embargo el significado de los permisos de un directorio es ligeramente distinto:

Joan Serrano Revisió 0.2 7/35

Page 8: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

● Lectura: se pueden listar los contenidos del directorio (podemos hacer un ls).● Escritura: se pueden crear y borrar ficheros.● Ejecución: 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: simbólica o numérica.

NOTACIÓN NUMÉRICA DE PERMISOSLos 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 demás, de forma que los permisos que quieran darse a cada categoría de usuarios serán el resultado de sumar los siguientes valores: 1 para ejecución, 2 para escritura, 4 para lectura.751 indica todos los permisos para el propietario (4+2+1=7), lectura y ejecución para los del grupo (4+1=5), y ejecución sólo para los demás (1)

NOTACIÓN SIMBÓLICA DE PERMISOSEn primer lugar hay que indicar a quién queremos cambiarle los permisos: al propietario (u, de user), al grupo (g), a los demás (o, de other) o a todos (a, de all).A continuación indicaremos qué queremos hacer con los ficheros: un + añade los permisos indicados, un – los quita y un = deja sólo los que indiquemos en la orden. Enseguida se ilustrará con ejemplos.Por último hay que indicar qué permisos queremos modificar: lectura (r), escritura (w), ejecución (x).

u+x añade permiso de ejecución al propietario (y deja el resto como estén)go-w quita permiso de escritura al grupo y a los demáso=rx deja sólo lectura y ejecución a los demás (los de propietario y grupo los deja como estén)o= deja a los demás sin ningún permisoo=g truco para dar a los demás los permisos que tenga el grupoa-w quita permiso de escritura a todos+w da permiso de escritura a todos (si no se indican usuarios, por defecto es a)

A continuación veremos las órdenes para manejar todo esto, aunque primero vamos a estudiar una orden que no tiene mucha relación pero ayudará a trabajar con permisos, pues permite crear cómodamente ficheros nuevos, y cambiar la fecha de los existentes.

touch: cambiar tiempo y crear fichero

Su función principal es cambiar la fecha y la hora de los ficheros afectados, si bien una utilidad casi más 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 sólo afecta a touch sino también a otros comandos como find:

Joan Serrano Revisió 0.2 8/35

Page 9: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

● Tiempo de acceso: cuándo se ha leído por última vez (asociado a la letra a).● Tiempo de cambio de estado: cuándo se ha cambiado sus propiedades por última vez (permisos, propietario, tiempos, etc.) (asociado a la letra c).● Tiempo de modificación: cuándo se ha modificado por última vez (asociado a la letra m).

Sólo puede utilizarlo el propietario de los ficheros, aunque si lo único que se quiere es cambiar la fecha de acceso y modificación al tiempo actual, puede hacerlo cualquiera que tenga permisos de escritura sobre los ficheros.

touch [opciones] fichero(s)

Opción Utilidad-a Cambia sólo el tiempo de acceso-c Si el fichero no existe no lo crea.-m Sólo cambia el tiempo de modificación--reference=fichero En vez de poner el tiempo actual, le pone el

que tenga el fichero indicado-t[AAAA]MMDDhhmm[.ss]

En vez de poner el tiempo actual, le pone el indicado en la expresión (sólo 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 # El tiempo de acceso de fich pasa a ser el actualtouch noExisto # Si no existe, crea el fichero noExisto (si existe ya,

# cambia su tiempo de acceso y modificación al actual)touch -m -t200105032215 secreto # Modificado el 3/5/2001 a las 22:15

10.- Cread un fichero nuevo y ponedle como fecha de modificación 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 más ficheros o directorios. Sólo 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:

Opción Utilidad-v Muestra información de lo que va haciendo con

cada fichero (modo verbose, se suele llamar a

Joan Serrano Revisió 0.2 9/35

Page 10: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

esto)-f Evita que se impriman mensajes de error si no

puede cambiar los permisos de un fichero-R Cambia los permisos de ficheros y directorios

recursivamente--reference=fichRef

Asigna al fichero los permisos que tenga fichRef.

Los permisos se pueden indicar de forma simbólica o numérica (incluso se pueden indicar varios permisos separándolos con comas), y por último se deben indicar los ficheros (o directorios) que queramos cambiar.chmod a+x script? # Añade permiso de ejecución a todos los ficheros # script? (el ? representa a cualquier carácter)chmod -R 755 . # Pone como 755 todos los ficheros del directorio # actual y de sus subdirectorioschmod +x,o-w sc2 # Da permiso de ejecución a todos pero quita de # escritura a los demás del fichero sc2

Nota: aunque aún no sepáis bien de qué va el tema, adelantamos algo: chmod aplicado a un enlace simbólico no cambia las propiedades del enlace, sino del fichero a que hace referencia el enlace. Hay otra forma de especificar los permisos, que es copiárselos de otro fichero. Para ello se utiliza, en lugar de los permisos, la opción --reference=fichero, con lo que todos los ficheros indicados a continuación pasarán a tener los mismos permisos que este fichero.# Los ficheros lista.txt y a.out pasarán a tener los mismos permisos que# tenga fich1chmod --reference=fich1 lista.txt a.out

11.- Supongamos que tenéis dos usuarios normales, por ejemplo toni y laura (si no, creáis 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 posesión 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 sólo se puede aplicar a los ficheros sobre los que se tiene permiso de escritura, y sólo 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

Page 11: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

Opciones:● -v, -f, -R y --reference=fichero, con el mismo significado que en chmod

Al especificar los nuevos propietarios podemos indicar el propietario, el grupo o ambos:chown pepe fich1 # fich1 pasa a ser de pepe y sigue en el mismo grupochown pepe:asi1t fich1 # fich1 pasa a ser de pepe y del grupo asi1tchown pepe: fich1 # fich1 pasa a ser de pepe y del grupo primario de pepechown :asi1t fich1 # fich1 sigue siendo del mismo dueño pero pasa al grupo

# asi1t (hace lo mismo que chgrp)

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 demás usuarios sólo podrán 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 todavía 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 también puede hacerse con chown). Las opciones y la sintaxis son las mismas, y también dispone de la variante con --reference=fichero:chgrp [opciones] nuevoGrupo fichero(s)chgrp [opciones] --reference=fichero fichero(s)

umask (user mask): máscara de permisos por defecto

O sea, cuando se crea un nuevo fichero, ¿por defecto con qué permisos se crea? Pues podemos cambiarlo para que nuestro trabajo resulte más cómodo.

# Muestra el estado actual de la máscara de permisos en modo numéricoumask022# Muestra el estado actual de la máscara en modo simbólicoumask -Su=rwx,g=rx,o=rx# Cambia la máscara a 022 (debemos indicarla numéricamente)umask 022

Joan Serrano Revisió 0.2 11/35

Page 12: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

Hay que advertir que la máscara 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 máscara es 022, los permisos por defecto de nuestros ficheros serán 777-022=755 (restando cifra a cifra, ciudado).

Actividad 5. Enlaces

En Linux se distinguen dos tipos de enlaces: los “duros” (hardlinks) y los simbólicos (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 información que está almacenada en algún lugar “misterioso” del disco duro (ese lugar es el inodo, para entendernos el número de bloque del disco en que está el fichero; con ls -i podemos ver el número 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/práctica.txt), cualquier modificación 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 demás 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 número 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 sólo si su número 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 demás enlaces duros siguen siendo válidos.

7.- Pregunta: sabiendo que el número de inodo es lo que indica realmente qué fichero es, o sea, que todos los enlaces duros de un mismo fichero mostrarán el mismo número de inodo, ¿cómo averiguaríais cuáles son los enlaces duros que tiene un fichero?

Por otra parte, un enlace simbólico es un pequeño fichero que hace referencia a un fichero (estrictamente hablando, a un enlace duro de un fichero). Con ls -l, los enlaces simbólicos tienen una l en el primer carácter (tipo de fichero); además se muestra a qué fichero hacen referencia:lrwxrwxrwx 1 root root 7 ene 13 2002 /usr/sbin/adduser -> useradd*

Este enlace puede utilizarse para acceder al fichero real, pero siempre teniendo en cuenta que, si por ejemplo hacemos vi enlaceSim, Linux averiguará cuál 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 simbólicos se quedan “colgando”.

Joan Serrano Revisió 0.2 12/35

Page 13: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

Para hacerse mejor una idea, un enlace simbólico es como un acceso directo de Windows.

Por si tenéis curiosidad, los símbolos . 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 opción para crearlos simbólicos. La sintaxis general y sus opciones son:

ln [opción] objetivo(s)

Opción Utilidad-d Permite que root (y sólo él) haga enlaces

duros de directorios (en principio sólo se pueden hacer enlaces duros de directorios).

-f Borra los ficheros existentes si coinciden con los enlaces a crear.

-i Pregunta antes de borrar ficheros si coinciden con los enlaces a crear.

-s Crea enlaces simbólicos (por defecto son duros).

Hay tres formas básicas de utilizarlo:# Primera: con un nombre de fichero crea un enlace a ese fichero en el# directorio actual y con el mismo nombre# Por ejemplo: si estamos en /home/ podemos hacerln luis/prueba1.txt# Y eso creará un enlace prueba1.txt pero en el directorio /home/

# Segunda: con dos nombres de fichero crea un enlace del segundo al primerocd luisln prueba1.txt listado.txt# Crea un nuevo enlace, en el mismo directorio, llamado listado.txt# No es necesario que el enlace esté en el mismo directorio:ln prueba1.txt /usr/local/listado.txt

# Tercera: varios nombres de fichero y un directorio al final, con lo que# crea enlaces a todos los ficheros en el directorio indicadoln prueba1.txt ../pepe/notas.txt /home/miguel/p1.c /root/# Crea enlaces llamados prueba1.txt, notas.txt y p1.c en /root/

# La siguiente instrucción da error porque hay más de dos nombres y el # último no es un directorioln prueba1.txt ../pepe/notas.txt /home/miguel/p1.c

Joan Serrano Revisió 0.2 13/35

Page 14: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

8.- Cread un fichero llamado asignaturas que contenga los nombres de vuestras asignaturas. Cread un enlace simbólico al mismo en el mismo directorio. Haced ls -l y ved qué muestra (fijaos en el número 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 días 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; ¿cuál?).21.- Repetid el segundo ejercicio. ¿Qué ocurre ahora?

Actividad 6. Gestión de procesos y trabajos

Una parte esencial en la administración 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 aún más evidente en un servidor, en el que los procesos no “se ven en pantalla” sino que, en principio, están ocultos, y es importante saber obtener cuáles hay, en qué estado se encuentran y qué consumo de recursos están haciendo.Los procesos en Linux tienen una relación 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 aquél.

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 gestión 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 tuberías en una misma orden, tipo “ls *.exe | grep “prueba” | less”), tiene un número asociado para poderlo identificar posteriormente. Además se puede encontrar en dos estados: se puede estar viendo cómo se ejecuta en su terminal (se dice que está en primer plano o en foreground), o puede estarse ejecutando en la sombra, o sea, ejecutándose 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 más profundidad en otros créditos, es el de señal, que es un mecanismo de comunicación entre procesos que permite enviar avisos entre distintos procesos. De momento lo usaremos para “matar” procesos, aunque tiene muchos más 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

Page 15: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

Donde pids es una lista de PIDs (process identifiers, los números que identifican a cada proceso) separada por comas y sin espacios (ni entre ellos ni respecto a la última opción). Permite ver información sólo de los procesos indicados:ps a13,42 # La a es la opción utilizada, y 13 y 42 son los procesosps 44,32 # Muestra la información de esos procesos, sin ninguna opción

Según la opción elegida, ps mostrará más o menos información en un listado en el que cada fila es un proceso y cada columna una característica suya. El significado de cada columna, según el título que aparece en la primera fila, es el siguiente:

Columna SignificadoUSER 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á utilizandoVSZ Tamaño 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 ejecución*● S: durmiendo (sleeping), o sea, está esperando alguna señal● T: parado en traza (trace). No es lo mismo que S, en general muestran una T los procesos que están siendo controlados por otro, como un depurador que ejecute paso a paso un programa● Z: zombie, representa un proceso que por algún error ha terminado sin que su padre lo esperase, y que se queda en un estado de suspensión llamado zombie

START Momento en que ha comenzadoTIME Tiempo de procesador que lleva consumidoCOMMAND Línea de comandos con que se ha puesto en ejecución

*Recordad que en un sistema operativo multitarea puede haber varios procesos listos para ejecutarse pero en un momento dado sólo uno de ellos se estará ejecutando (si sólo hay un procesador en el sistema, claro). De hecho si se está ejecutando el ps, no es posible que justo en el mismo momento se esté ejecutando otro proceso; sin embargo, los procesos R pueden tomar el procesador en cualquier momento.

Joan Serrano Revisió 0.2 15/35

Page 16: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

Las opciones de ps son las siguientes (atención, no llevan un guión delante, se escribe “ps a”, por ejemplo):Opción Significadou 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 opción 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 sólo 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 línea de comandos para que empiece a ejecutarse en el fondo.find / -nouser -or -nogroup > lista & # Se ejecuta, pero en el fondo

● Cuando esté en ejecución en primer plano, presionar Ctrl+z (o sea, mantener Ctrl y entonces la z). find / -nouser -or -nogroup > lista# Y una vez se ponga en marcha, presionad Ctrl+z: se queda parado en el fondo

Al hacerlo, bash nos muestra un número entre corchetes que es su número de trabajo y permite obtener información de él y volverlo a traer al frente con los comandos que vienen a continuación.[1] 215 # Identificador de trabajo y PID

fg: traer un trabajo al frente (foreground)

El uso de este comando es muy sencillo: especificando un número de trabajo, lo vuelve a poner en ejecución en el frente:fg %1 # Si 1 es el número de trabajo, lo trae al frente

# y lo pone en ejecución%1 # Poner simplemente esto equivale a %1

bg: hacer que continúe ejecutándose un trabajo en el fondo (background)

Cuando suspendemos un trabajo con Ctrl+z podemos seguir ejecutándolo pero en el fondo con bg:bg %2 # Se pone en ejecución, pero en el fondo%2 & # Equivale a lo anterior

jobs: lista de los trabajos del usuario

Joan Serrano Revisió 0.2 16/35

Page 17: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

Este comando muestra qué trabajos tiene el usuario. Concretamente, muestra el número de trabajo, el estado (stopped o running) y la orden de comandos que lo ha generado.Sintaxis:jobs [opciones] [identificadorTrabajo]

Si se indica un identificador de trabajo sólo muestra información de ese trabajo:jobs %3[3] Stopped vi lista.txt

Opciones de jobs:Opción Significado-l Lista también los PIDs de los trabajos.-n Muestra información sólo de los trabajos cuyo estado ha cambiado

desde la última consulta.-r Muestra información sólo de los jobs ejecutándose (running).-s Muestra información sólo de los jobs parados (stopped).

23.- Crear un script que espere a que el usuario le introduzca un número. Hacer que el script se ejecute en fondo y después traerlo al frente. kill: envía una señal al proceso

Aunque no siempre es para matarlo, como es su uso más habitual se le ha quedado ese nombre al comando. Se puede usar especificando un nombre o un número de señal y un proceso o un trabajo:kill -l # Muestra el listado de señales y su númerokill -s SIGKILL 152 # Envía la señal SIGKILL al proceso 152kill -s SIGKILL %4 # Envía la señal SIGKILL al trabajo 4kill -9 152 # Envía la señal 9 al proceso 152kill -9 %4 # Envía la señal 9 al trabajo 4

De todas las señales, es importante conocer SIGTERM (pide a un proceso/trabajo que termine, pero de buenas maneras; según el programa que sea, se puede negar) y SIGKILL (obliga a que el proceso/trabajo termine; casi ningún proceso puede resistirse a esto).

24.- Abrid vi y enviadlo al fondo con Ctrl+Z. Enviadle la señal SIGTERM y, si no funciona, enviadle SIGKILL para terminarlo.

Joan Serrano Revisió 0.2 17/35

Page 18: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

PRÁCTICAS DE REDES DE ÁREA LOCAL

PRÁCTICA 3: ADMINISTRACIÓN DE UN SISTEMA LINUX

OBJETIVOSAhora que ya conocéis los comandos básicos de Linux, los comandos para los usuarios normales, es momento de empezar a trabajar como administradores con el sistema, creando y eliminando usuarios, dándoles permisos y configurando el sistema para adaptarlo a sus necesidades. Otro aspecto importante es saber consultar qué procesos hay en el sistema y saberlos eliminar si es necesario.También veremos cómo acceder a dispositivos de almacenamiento y cómo configurar el gestor de arranque, LILO, para lograr más opciones o rescatar un sistema que no arranca.

REQUISITOS PREVIOSTener un sistema Linux instalado, tener soltura con los comandos más habituales (práctica 2) y no haber perdido la contraseña de root.Es importante recordar que con Alt+F1, +F2, etc., disponemos de varias consolas virtuales

ACTIVIDADES DE LA PRÁCTICA

Actividad 1. Creación y eliminación de usuarios

Las medidas de seguridad en Linux, como en la mayoría de SOs, se basan en la definición de usuarios y la asignación de derechos y restricciones a estos usuarios. En Linux el fichero /etc/passwd contiene la información de los usuarios del sistema. Está compuesto por líneas como la siguiente, de forma que cada línea representa a un usuario:usuario:contraseña: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 máximo conviene que tenga 8 caracteres.▪ contraseña: la contraseña del usuario, aunque encriptada, ya que el fichero /etc/passwd lo pueden leer todos los usuarios.▪ uid: user identifier. Un número 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é opción a ello.▪ gid: group identifier. Un número que identifica un grupo (los grupos están definidos en /etc/group, más adelante hablaremos de ellos) y aquí indica cuál es el grupo primario de un usuario (un usuario puede pertenecer, de forma secundaria, a otros grupos).

Joan Serrano Revisió 0.2 18/35

Page 19: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

▪ comentario: texto libre, que generalmente es el nombre real del usuario o una descripción breve.▪ origen: cuál es el directorio origen del usuario (normalmente /home/usuario).▪ shell: qué shell (intérprete de comandos) utilizará el usuario por defecto. Suele ser /bin/bash.

Hay que tener en cuenta que, además 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 más alto que los del sistema (típicamente a partir de 500). root siempre es el usuario 0.Como medida de seguridad, generalmente en /etc/passwd no están las contraseñas encriptadas sino que en su lugar hay una x; las contraseñas encriptadas están en el fichero /etc/shadow, que es una réplica de /etc/passwd pero con las contraseñas encriptadas, y además sólo root puede acceder a él (observaréis que en /etc/shadow sólo se utilizan los campos usuario y contraseña). De esta forma los usuarios normales pueden ver qué usuarios hay en el sistema pero sólo root puede añadir usuarios.

adduser (useradd): añadir usuario

El programa real es useradd, pero suele haber un enlace (o sea, una especie de alias) llamado adduser que es más legible. Ambos están en /usr/bin; conviene ir familiarizándose con la estructura de directorios de Linux. Este programa permite añadir un usuario al sistema. Lo que hace es añadir una línea para el usuario en /etc/passwd, otra en /etc/shadow, crear su directorio origen y copiar en éste una serie de ficheros de configuración básicos. Sólo puede ejecutarlo root.La sintaxis básica es adduser [opciones] usuario:adduser pepito # Crea el usuario pepitoadduser -g asi1t manolito # Crea el usuario manolito y lo asigna al

# grupo asi1t

Opción Utilidad-c comentario Permite indicar el campo comentario*.-d dirOrigen Indica el directorio origen del usuario (por defecto será /home/

usuario).-e AAAA-MM-DD Fecha en la que se desactivará la cuenta del usuario.-g grupo Grupo primario del usuario. Podemos indicar el nombre del grupo o

su gid**.-G grupo1[,grupo2...]

Grupos secundarios del usuario, separados por comas. Son grupos a los que también pertenece y por tanto disfruta de su privilegios.

-m Crea el directorio origen del usuario y recrea en él la estructura de ficheros y directorios que haya en /etc/skel***.

-M No crea directorio origen aunque tengamos CREATE_HOME yes.-n 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.

Joan Serrano Revisió 0.2 19/35

Page 20: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

-r Crea una cuenta del sistema (uid<UID_MIN, otra constante de /etc/login.defs), o sea, con uid pequeño. Normalmente se reservan para propósitos especiales. Con esta opción, si no se especifica -m no se creará directorio origen.

-p contraseña Permite indicar la contraseña del usuario, aunque debe estar ya encriptada (la función de C crypt() permite crear programas que encripten las contraseñas). Si no se indica contraseña, la cuenta estará desactivada.

-s shell Qué shell tendrá el usuario. Por defecto suele ser /bin/bash.-u uid Permite especificar el uid del usuario (si no existe ya). Lo habitual es

dejar que el sistema lo asigne.-D Muestra qué valores por defecto hay en /etc/default/useradd (fichero

que contiene opciones de configuración de useradd).

* Si queremos escribir un parámetro, nombre de fichero, opción, etc. con espacios enmedio podemos hacerlo escribiéndolo entre comillas dobles: adduser -c “José Pérez” pepito. Ésta no es una característica 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 configuración, /etc/login.defs, que controla las opciones por defecto en la creación de usuarios. Por ejemplo, esta opción se rige por la constante CREATE_HOME, que puede valer yes o no y que determina que esta opción se ejecute por defecto o sea necesario especificarla.

1.- Cread el usuario pr3. Intentad loguearos con este usuario. ¿Podéis?

passwd: cambiar contraseña de usuario

Con este comando podemos cambiar la contraseña de un usuario, activarlo cuando lo acabamos de crear y desactivarlo cuando no queremos que acceda al sistema pero no queremos perder su información. Este comando lo puede utilizar un usuario para cambiar su contraseña (no la de otros usuarios, claro) y root para cambiar la de todos los usuarios.

Algunos ejemplos:passwd # Cambia la contraseña del usuario actual. Pide la

# contraseña actual y dos veces la nueva.passwd pepito # Cambia la contraseña del usuario pepito (debemos ser root

# o pepito para poder hacer esto).

Observaréis que no acepta bien cualquier tipo de contraseña: 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 contraseña. La sintaxis es passwd [opciones] [usuario].

Joan Serrano Revisió 0.2 20/35

Page 21: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

Opción Utilidad-d Borra la contraseña del usuario (la deja en blanco).-l Bloquea el usuario (antepone algún signo a la contraseña).-u Desbloquea el usuario-f Aunque se dé una contraseña en blanco o “mala”, esta opción le

obliga a aceptarla.

2.- Cambiad la contraseña de vuestro usuario habitual desde root. Entrad con el usuario y volvedle a poner la contraseña inicial.3.- Si el único que puede escribir en /etc/shadow es root, ¿cómo puede un usuario normal cambiar su propia contraseña? 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 haciéndolo, pero cuando salga no podrá volver a entrar. Sólo tiene una opción, que se muestra en los ejemplos:userdel pepe # Borra el usuario pepeuserdel -r pepe # Borra el usuario pepe y su directorio origen

Este comando sólo puede ejecutarlo root.También podemos eliminar usuarios eliminando manualmente las entradas correspondientes en /etc/passwd y /etc/shadow y borrando su directorio origen. Si se ha creado un grupo especial para este usuario conviene borrarlo también, con groupdel.De ambas formas sólo borramos el directorio origen, pero un usuario puede tener más ficheros en el sistema; el comando find permite encontrar los ficheros que pertenecen a un usuario o a un grupo, para poder eliminarlos todos.Al borrar un usuario hay que borrar también sus ficheros o asignarlos a algún usuario especial.

4.- Borrad un usuario que no necesitéis (o cread uno expresamente). Comprobad que los ficheros y directorios que poseía ahora no aparecen con un usuario/grupo, sino que sólo aparece el número. Utilizad la orden find para encontrar los ficheros y directorios de /home/ que haya en esta situación y borrarlos.

usermod: modifica un usuario

Este comando permite modificar los datos básicos de la cuenta de un usuario, y por tanto tiene las mismas opciones que useradd, a la que hay que añadir -l usuario para cambiar el nombre del usuario (el uid no se puede cambiar, ya que es lo que realmente identifica al usuario).

Actividad 2. Gestión de grupos

Joan Serrano Revisió 0.2 21/35

Page 22: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

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 información:grupo:contraseña:gid:miembros

▪ grupo: nombre del grupo▪ contraseña: este campo no se suele utilizar, permite indicar una contraseña para el grupo de forma que se pueda entrar en él aun no perteneciendo (usando el comando newgrp). En todo caso la contraseña encriptada no estaría aquí, sino en el fichero /etc/gshadow, con el mismo objetivo que /etc/shadow. En la práctica estas contraseñas no se utilizan.▪ gid: group identifier, número 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).

Este fichero también es legible por todos los usuarios.

groups: a qué grupos pertenece un usuario

Este comando permite ver a qué grupos pertenecemos o a qué grupos pertenecen otros usuarios. Lo puede lanzar cualquier usuario, y puede averiguar los grupos de cualquier otro usuario (al fin y al cabo ésa es información que está en /etc/passwd y /etc/group, disponible para todos).groups # Indica a qué grupos pertenece el usuario actualgroups pepe # A qué grupos pertenece pepegroups pepe root mari # A qué grupos pertenecen pepe, root, mari

groupadd: crear grupo

Crea un nuevo grupo. La sintaxis es groupadd [opciones] grupo, y las opciones son:

Opción Utilidad-g gid Obliga a que el grupo tenga un gid

determinado.-r Permite crear un grupo de sistema

(gid<GID_MIN).

groupdel: borrar grupo

Borra un grupo. No se puede borrar el grupo primario de un usuario; hay que eliminar primero el usuario en cuestión (o cambiarlo de grupo primario) y después borrar el grupo.Uso: groupdel grupo.

5.- Cread la siguiente estructura de grupos y usuarios:

Joan Serrano Revisió 0.2 22/35

Page 23: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

Grupo Usuario

asi1t JesúsLaura

asi2t ElenaMarcos

6.- Haced que pertenezcan también al grupo asi; incorporad a Jesús y Laura con comandos, y a Elena y Marcos modificando los ficheros de configuración. Comprobadlo con la orden groups.7.- Laura ha aprobado todo primero así que tiene que pasar a asi2t como nuevo grupo principal. ¿Cómo lo haríais mediante comandos? ¿Y modificando los ficheros de configuración?8.- ¿Por qué los ficheros de Laura siguen perteneciendo al grupo asi1t si Laura ha cambiado al asi2t? ¿Por qué no pertenecen también al grupo asi, al que Laura también 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 configuración.

Actividad 3. Trabajo con usuarios

Para poder practicar con las operaciones de gestión 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 (típicamente, 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 # Cambia al usuario pepitosu # Cambia a root

Al cambiar a otro usuario pedirá su contraseña, salvo si el usuario actual es root (que puede convertirse en los usuarios que quiera).

who: quién 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:$whoroottty1 01 05 15:32pepetty2 01 05 17:15

Joan Serrano Revisió 0.2 23/35

Page 24: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

La opción -i añade otra columna que indica cuánto 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 continuación). Tras la información 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 filosofía para averiguar detalles sobre uno mismo: who am i.

Nota técnica: el fichero /var/run/utmp contiene información sobre los usuarios conectados al sistema, aunque no es legible. En algunos sistemas, /var/run/wtmp contiene información 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 asignación 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 más importantes para trabajar con permisos.

Cuando hacemos ls –l, nos aparece mucha más información 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 simbólico, que se explica más abajo; b=dispositivo de bloques, como un disco; c=dispositivo de caracteres, como el teclado; p=FIFO con nombre (named pipe), las tuberías 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 término 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 ejecución 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 ejecución del fichero para los miembros del grupo del fichero (cada fichero pertenece a un grupo, como indica ls –l, y además 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:● Lectura: se puede leer el contenido del fichero.● Escritura: se puede modificar el contenido del fichero.● Ejecución: se puede ejecutar el fichero (aplicable a programas binarios y scripts).

Sin embargo el significado de los permisos de un directorio es ligeramente distinto:

Joan Serrano Revisió 0.2 24/35

Page 25: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

● Lectura: se pueden listar los contenidos del directorio (podemos hacer un ls).● Escritura: se pueden crear y borrar ficheros.● Ejecución: 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: simbólica o numérica.

NOTACIÓN NUMÉRICA DE PERMISOSLos 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 demás, de forma que los permisos que quieran darse a cada categoría de usuarios serán el resultado de sumar los siguientes valores: 1 para ejecución, 2 para escritura, 4 para lectura.751 indica todos los permisos para el propietario (4+2+1=7), lectura y ejecución para los del grupo (4+1=5), y ejecución sólo para los demás (1)

NOTACIÓN SIMBÓLICA DE PERMISOSEn primer lugar hay que indicar a quién queremos cambiarle los permisos: al propietario (u, de user), al grupo (g), a los demás (o, de other) o a todos (a, de all).A continuación indicaremos qué queremos hacer con los ficheros: un + añade los permisos indicados, un – los quita y un = deja sólo los que indiquemos en la orden. Enseguida se ilustrará con ejemplos.Por último hay que indicar qué permisos queremos modificar: lectura (r), escritura (w), ejecución (x).

u+x añade permiso de ejecución al propietario (y deja el resto como estén)go-w quita permiso de escritura al grupo y a los demáso=rx deja sólo lectura y ejecución a los demás (los de propietario y grupo los deja como estén)o= deja a los demás sin ningún permisoo=g truco para dar a los demás los permisos que tenga el grupoa-w quita permiso de escritura a todos+w da permiso de escritura a todos (si no se indican usuarios, por defecto es a)

A continuación veremos las órdenes para manejar todo esto, aunque primero vamos a estudiar una orden que no tiene mucha relación pero ayudará a trabajar con permisos, pues permite crear cómodamente ficheros nuevos, y cambiar la fecha de los existentes.

touch: cambiar tiempo y crear fichero

Su función principal es cambiar la fecha y la hora de los ficheros afectados, si bien una utilidad casi más 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 sólo afecta a touch sino también a otros comandos como find:

Joan Serrano Revisió 0.2 25/35

Page 26: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

● Tiempo de acceso: cuándo se ha leído por última vez (asociado a la letra a).● Tiempo de cambio de estado: cuándo se ha cambiado sus propiedades por última vez (permisos, propietario, tiempos, etc.) (asociado a la letra c).● Tiempo de modificación: cuándo se ha modificado por última vez (asociado a la letra m).

Sólo puede utilizarlo el propietario de los ficheros, aunque si lo único que se quiere es cambiar la fecha de acceso y modificación al tiempo actual, puede hacerlo cualquiera que tenga permisos de escritura sobre los ficheros.

touch [opciones] fichero(s)

Opción Utilidad-a Cambia sólo el tiempo de acceso-c Si el fichero no existe no lo crea.-m Sólo cambia el tiempo de modificación--reference=fichero En vez de poner el tiempo actual, le pone el

que tenga el fichero indicado-t[AAAA]MMDDhhmm[.ss]

En vez de poner el tiempo actual, le pone el indicado en la expresión (sólo 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 # El tiempo de acceso de fich pasa a ser el actualtouch noExisto # Si no existe, crea el fichero noExisto (si existe ya,

# cambia su tiempo de acceso y modificación al actual)touch -m -t200105032215 secreto # Modificado el 3/5/2001 a las 22:15

10.- Cread un fichero nuevo y ponedle como fecha de modificación 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 más ficheros o directorios. Sólo 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:

Opción Utilidad-v Muestra información de lo que va haciendo con

cada fichero (modo verbose, se suele llamar a

Joan Serrano Revisió 0.2 26/35

Page 27: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

esto)-f Evita que se impriman mensajes de error si no

puede cambiar los permisos de un fichero-R Cambia los permisos de ficheros y directorios

recursivamente--reference=fichRef

Asigna al fichero los permisos que tenga fichRef.

Los permisos se pueden indicar de forma simbólica o numérica (incluso se pueden indicar varios permisos separándolos con comas), y por último se deben indicar los ficheros (o directorios) que queramos cambiar.chmod a+x script? # Añade permiso de ejecución a todos los ficheros # script? (el ? representa a cualquier carácter)chmod -R 755 . # Pone como 755 todos los ficheros del directorio # actual y de sus subdirectorioschmod +x,o-w sc2 # Da permiso de ejecución a todos pero quita de # escritura a los demás del fichero sc2

Nota: aunque aún no sepáis bien de qué va el tema, adelantamos algo: chmod aplicado a un enlace simbólico no cambia las propiedades del enlace, sino del fichero a que hace referencia el enlace. Hay otra forma de especificar los permisos, que es copiárselos de otro fichero. Para ello se utiliza, en lugar de los permisos, la opción --reference=fichero, con lo que todos los ficheros indicados a continuación pasarán a tener los mismos permisos que este fichero.# Los ficheros lista.txt y a.out pasarán a tener los mismos permisos que# tenga fich1chmod --reference=fich1 lista.txt a.out

11.- Supongamos que tenéis dos usuarios normales, por ejemplo toni y laura (si no, creáis 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 posesión 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 sólo se puede aplicar a los ficheros sobre los que se tiene permiso de escritura, y sólo 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

Page 28: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

Opciones:● -v, -f, -R y --reference=fichero, con el mismo significado que en chmod

Al especificar los nuevos propietarios podemos indicar el propietario, el grupo o ambos:chown pepe fich1 # fich1 pasa a ser de pepe y sigue en el mismo grupochown pepe:asi1t fich1 # fich1 pasa a ser de pepe y del grupo asi1tchown pepe: fich1 # fich1 pasa a ser de pepe y del grupo primario de pepechown :asi1t fich1 # fich1 sigue siendo del mismo dueño pero pasa al grupo

# asi1t (hace lo mismo que chgrp)

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 demás usuarios sólo podrán 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 todavía 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 también puede hacerse con chown). Las opciones y la sintaxis son las mismas, y también dispone de la variante con --reference=fichero:chgrp [opciones] nuevoGrupo fichero(s)chgrp [opciones] --reference=fichero fichero(s)

umask (user mask): máscara de permisos por defecto

O sea, cuando se crea un nuevo fichero, ¿por defecto con qué permisos se crea? Pues podemos cambiarlo para que nuestro trabajo resulte más cómodo.

# Muestra el estado actual de la máscara de permisos en modo numéricoumask022# Muestra el estado actual de la máscara en modo simbólicoumask -Su=rwx,g=rx,o=rx# Cambia la máscara a 022 (debemos indicarla numéricamente)umask 022

Joan Serrano Revisió 0.2 28/35

Page 29: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

Hay que advertir que la máscara 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 máscara es 022, los permisos por defecto de nuestros ficheros serán 777-022=755 (restando cifra a cifra, ciudado).

Actividad 5. Enlaces

En Linux se distinguen dos tipos de enlaces: los “duros” (hardlinks) y los simbólicos (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 información que está almacenada en algún lugar “misterioso” del disco duro (ese lugar es el inodo, para entendernos el número de bloque del disco en que está el fichero; con ls -i podemos ver el número 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/práctica.txt), cualquier modificación 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 demás 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 número 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 sólo si su número 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 demás enlaces duros siguen siendo válidos.

7.- Pregunta: sabiendo que el número de inodo es lo que indica realmente qué fichero es, o sea, que todos los enlaces duros de un mismo fichero mostrarán el mismo número de inodo, ¿cómo averiguaríais cuáles son los enlaces duros que tiene un fichero?

Por otra parte, un enlace simbólico es un pequeño fichero que hace referencia a un fichero (estrictamente hablando, a un enlace duro de un fichero). Con ls -l, los enlaces simbólicos tienen una l en el primer carácter (tipo de fichero); además se muestra a qué fichero hacen referencia:lrwxrwxrwx 1 root root 7 ene 13 2002 /usr/sbin/adduser -> useradd*

Este enlace puede utilizarse para acceder al fichero real, pero siempre teniendo en cuenta que, si por ejemplo hacemos vi enlaceSim, Linux averiguará cuál 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 simbólicos se quedan “colgando”.

Joan Serrano Revisió 0.2 29/35

Page 30: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

Para hacerse mejor una idea, un enlace simbólico es como un acceso directo de Windows.

Por si tenéis curiosidad, los símbolos . 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 opción para crearlos simbólicos. La sintaxis general y sus opciones son:

ln [opción] objetivo(s)

Opción Utilidad-d Permite que root (y sólo él) haga enlaces

duros de directorios (en principio sólo se pueden hacer enlaces duros de directorios).

-f Borra los ficheros existentes si coinciden con los enlaces a crear.

-i Pregunta antes de borrar ficheros si coinciden con los enlaces a crear.

-s Crea enlaces simbólicos (por defecto son duros).

Hay tres formas básicas de utilizarlo:# Primera: con un nombre de fichero crea un enlace a ese fichero en el# directorio actual y con el mismo nombre# Por ejemplo: si estamos en /home/ podemos hacerln luis/prueba1.txt# Y eso creará un enlace prueba1.txt pero en el directorio /home/

# Segunda: con dos nombres de fichero crea un enlace del segundo al primerocd luisln prueba1.txt listado.txt# Crea un nuevo enlace, en el mismo directorio, llamado listado.txt# No es necesario que el enlace esté en el mismo directorio:ln prueba1.txt /usr/local/listado.txt

# Tercera: varios nombres de fichero y un directorio al final, con lo que# crea enlaces a todos los ficheros en el directorio indicadoln prueba1.txt ../pepe/notas.txt /home/miguel/p1.c /root/# Crea enlaces llamados prueba1.txt, notas.txt y p1.c en /root/

# La siguiente instrucción da error porque hay más de dos nombres y el # último no es un directorioln prueba1.txt ../pepe/notas.txt /home/miguel/p1.c

Joan Serrano Revisió 0.2 30/35

Page 31: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

8.- Cread un fichero llamado asignaturas que contenga los nombres de vuestras asignaturas. Cread un enlace simbólico al mismo en el mismo directorio. Haced ls -l y ved qué muestra (fijaos en el número 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 días 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; ¿cuál?).21.- Repetid el segundo ejercicio. ¿Qué ocurre ahora?

Actividad 6. Gestión de procesos y trabajos

Una parte esencial en la administración 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 aún más evidente en un servidor, en el que los procesos no “se ven en pantalla” sino que, en principio, están ocultos, y es importante saber obtener cuáles hay, en qué estado se encuentran y qué consumo de recursos están haciendo.Los procesos en Linux tienen una relación 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 aquél.

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 gestión 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 tuberías en una misma orden, tipo “ls *.exe | grep “prueba” | less”), tiene un número asociado para poderlo identificar posteriormente. Además se puede encontrar en dos estados: se puede estar viendo cómo se ejecuta en su terminal (se dice que está en primer plano o en foreground), o puede estarse ejecutando en la sombra, o sea, ejecutándose 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 más profundidad en otros créditos, es el de señal, que es un mecanismo de comunicación entre procesos que permite enviar avisos entre distintos procesos. De momento lo usaremos para “matar” procesos, aunque tiene muchos más 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

Page 32: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

Donde pids es una lista de PIDs (process identifiers, los números que identifican a cada proceso) separada por comas y sin espacios (ni entre ellos ni respecto a la última opción). Permite ver información sólo de los procesos indicados:ps a13,42 # La a es la opción utilizada, y 13 y 42 son los procesosps 44,32 # Muestra la información de esos procesos, sin ninguna opción

Según la opción elegida, ps mostrará más o menos información en un listado en el que cada fila es un proceso y cada columna una característica suya. El significado de cada columna, según el título que aparece en la primera fila, es el siguiente:

Columna SignificadoUSER 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á utilizandoVSZ Tamaño 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 ejecución*● S: durmiendo (sleeping), o sea, está esperando alguna señal● T: parado en traza (trace). No es lo mismo que S, en general muestran una T los procesos que están siendo controlados por otro, como un depurador que ejecute paso a paso un programa● Z: zombie, representa un proceso que por algún error ha terminado sin que su padre lo esperase, y que se queda en un estado de suspensión llamado zombie

START Momento en que ha comenzadoTIME Tiempo de procesador que lleva consumidoCOMMAND Línea de comandos con que se ha puesto en ejecución

*Recordad que en un sistema operativo multitarea puede haber varios procesos listos para ejecutarse pero en un momento dado sólo uno de ellos se estará ejecutando (si sólo hay un procesador en el sistema, claro). De hecho si se está ejecutando el ps, no es posible que justo en el mismo momento se esté ejecutando otro proceso; sin embargo, los procesos R pueden tomar el procesador en cualquier momento.

Joan Serrano Revisió 0.2 32/35

Page 33: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

Las opciones de ps son las siguientes (atención, no llevan un guión delante, se escribe “ps a”, por ejemplo):Opción Significadou 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 opción 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 sólo 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 línea de comandos para que empiece a ejecutarse en el fondo.find / -nouser -or -nogroup > lista & # Se ejecuta, pero en el fondo

● Cuando esté en ejecución en primer plano, presionar Ctrl+z (o sea, mantener Ctrl y entonces la z). find / -nouser -or -nogroup > lista# Y una vez se ponga en marcha, presionad Ctrl+z: se queda parado en el fondo

Al hacerlo, bash nos muestra un número entre corchetes que es su número de trabajo y permite obtener información de él y volverlo a traer al frente con los comandos que vienen a continuación.[1] 215 # Identificador de trabajo y PID

fg: traer un trabajo al frente (foreground)

El uso de este comando es muy sencillo: especificando un número de trabajo, lo vuelve a poner en ejecución en el frente:fg %1 # Si 1 es el número de trabajo, lo trae al frente

# y lo pone en ejecución%1 # Poner simplemente esto equivale a %1

bg: hacer que continúe ejecutándose un trabajo en el fondo (background)

Cuando suspendemos un trabajo con Ctrl+z podemos seguir ejecutándolo pero en el fondo con bg:bg %2 # Se pone en ejecución, pero en el fondo%2 & # Equivale a lo anterior

jobs: lista de los trabajos del usuario

Joan Serrano Revisió 0.2 33/35

Page 34: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

Este comando muestra qué trabajos tiene el usuario. Concretamente, muestra el número de trabajo, el estado (stopped o running) y la orden de comandos que lo ha generado.Sintaxis:jobs [opciones] [identificadorTrabajo]

Si se indica un identificador de trabajo sólo muestra información de ese trabajo:jobs %3[3] Stopped vi lista.txt

Opciones de jobs:Opción Significado-l Lista también los PIDs de los trabajos.-n Muestra información sólo de los trabajos cuyo estado ha cambiado

desde la última consulta.-r Muestra información sólo de los jobs ejecutándose (running).-s Muestra información sólo de los jobs parados (stopped).

23.- Crear un script que espere a que el usuario le introduzca un número. Hacer que el script se ejecute en fondo y después traerlo al frente. kill: envía una señal al proceso

Aunque no siempre es para matarlo, como es su uso más habitual se le ha quedado ese nombre al comando. Se puede usar especificando un nombre o un número de señal y un proceso o un trabajo:kill -l # Muestra el listado de señales y su númerokill -s SIGKILL 152 # Envía la señal SIGKILL al proceso 152kill -s SIGKILL %4 # Envía la señal SIGKILL al trabajo 4kill -9 152 # Envía la señal 9 al proceso 152kill -9 %4 # Envía la señal 9 al trabajo 4

De todas las señales, es importante conocer SIGTERM (pide a un proceso/trabajo que termine, pero de buenas maneras; según el programa que sea, se puede negar) y SIGKILL (obliga a que el proceso/trabajo termine; casi ningún proceso puede resistirse a esto).

24.- Abrid vi y enviadlo al fondo con Ctrl+Z. Enviadle la señal SIGTERM y, si no funciona, enviadle SIGKILL para terminarlo.

Joan Serrano Revisió 0.2 34/35

Page 35: Pràctica 3 Linux

CFGS

Mòdul 1

ASIX / DAM / DAW

Implantació de Sistemes Operatius / Sistemes Informàtics1r

UF2

Joan Serrano Revisió 0.2 35/35