Contenido S08
Contenido S08
Contenido S08
Introducción.
El sistema operativo Linux cuenta con una gran capacidad de gestión de usuarios y grupos
que les permite realizar un uso óptimo de su plataforma multiusuario. Quienes utilizan un
servidor de archivos, se identifican mediante un nombre de usuario, y también debe contar
con una contraseña para que pueda realizar la verificación de credenciales y acceder al
sistema. Además, el acceso a determinados archivos, directorios y ficheros dependerá de
los grupos a los que pertenezca el usuario del sistema.
1
la protección de los datos de cada usuario, así como para asegurar y proteger el
funcionamiento de todo el sistema.
Tipos de usuario.
Los usuarios en Unix/Linux se identifican por un número único de usuario, User ID, UID. Y
pertenecen a un grupo principal de usuarios, identificado también por un número único de
grupo, Group ID, GID. El usuario puede pertenecer a más grupos además del principal.
Aunque sujeto a cierta polémica, es posible identificar tres tipos de usuarios en Linux:
Usuario root.
Usuarios especiales.
Ejemplos: bin, daemon, adm, lp, sync, shutdown, mail, operator, squid, apache, etc.
● Se les llama también cuentas del sistema.
● No tiene todos los privilegios del usuario root, pero dependiendo de la cuenta
asumen distintos privilegios de root.
● Lo anterior para proteger al sistema de posibles formas de vulnerar la seguridad.
● No tienen contraseñas pues son cuentas que no están diseñadas para iniciar
sesiones con ellas.
● También se les conoce como cuentas de "no inicio de sesión" (nologin).
● Se crean (generalmente) automáticamente al momento de la instalación de Linux
o de la aplicación.
● Generalmente se les asigna un UID entre 1 y 100 (definido en /etc/login.defs)
2
Usuarios normales.
Grupos en Linux.
Los grupos en Linux son usados principalmente para otorgar permisos sobre archivos y
directorios. El sistema operativo ya trae incluido ciertos grupos predeterminados que
cumplen con funciones específicas. Cada grupo creado en Linux tiene la característica de
ser independiente de otros. Además, los grupos en Linux pueden tener contraseñas. Estos
grupos pueden ser de tipo primario o secundario:
● Grupo principal: tiene la función de determinar quién será el grupo que posea
los archivos creados por el usuario. El grupo primario es el que se le asocia a
la cuenta por defecto, y al que se le asignarán los archivos y directorios
desarrollados por el usuario. Además, el nombre del grupo suele ser el mismo
nombre de usuario.
3
● adduser o useradd: permite la creación de nuevos usuarios.
Creación de usuarios
- Crear usuario
4
Ejemplo, si deseamos crear un usuario llamado ‘pedro’ cuyo grupo principal sea ‘profesores’,
cuya carpeta home sea /home/pedro y su intérprete de comandos sea /bin/bash,
ejecutaremos el siguiente comando:
- Crear un usuario
Entonces el sistema nos preguntará dos veces la contraseña que queremos asignar a pedro.
- Modificación de usuarios
Se utiliza el comando usermod y permite cambiar el nombre del usuario, su carpeta home,
su intérprete de comandos, los grupos a los que pertenece y algunos otros parámetros.
- Eliminación de usuarios
Se realiza con el comando userdel seguido del nombre del usuario. Con la opción -r
eliminará también su carpeta home, ejemplo:
- Eliminación de un usuario
5
sudo userdel -r pedro
Creación de grupos.
El comando groupadd permite añadir un grupo indicando como parámetro el nombre del
grupo. Ejemplo, si deseamos crear un grupo llamado ‘alumnos’ ejecutaremos:
- Añadir un grupo
- Modificación de grupos
- Eliminación de grupos
Se realiza con el comando groupdel seguido del nombre del grupo, ejemplo:
Eliminación de un grupo
Eliminaría el grupo profesores. Si algún usuario tuviera dicho grupo como grupo primario, el
comando groupdel no eliminará el grupo.
Se utiliza el comando adduser seguido del nombre del usuario y del nombre del grupo al
que queremos añadirle, ejemplo:
6
- Quitar usuarios de un grupo
Se utiliza el comando deluser seguido del nombre del usuario y del nombre del grupo del
que queremos quitarle, ejemplo:
Los sistemas Linux también disponen de mecanismos que permiten iniciar el sistema con
diferentes configuraciones, dependiendo de las necesidades de los usuarios. Estas
configuraciones están basadas en los procesos que se activan en el arranque. Los sistemas
Linux son multitarea porque pueden mantener en ejecución muchos programas a la vez,
para ver la lista de programas en ejecución en el sistema se puede ejecutar la orden ps -ef.
Si se modifican los programas que se inician en el arranque (muchos de ellos no son
imprescindibles para el funcionamiento básico del sistema), entonces podemos conseguir
que Linux trabaje de forma distinta y ofrezca un diferente conjunto de servicios.
Cuando se inicia un sistema Linux o Unix, el control recae sobre un proceso especial
llamado init, que es el primero que comienza su ejecución. Por esta razón, también se le
conoce como ¨el padre de todos los procesos¨. Init es un proceso especial sin el cual no se
iniciará nunca Linux y controla el inicio de otros procesos. Por lo tanto, si el usuario desea
establecer qué procesos se iniciarán en el arranque, entonces deberá configurar init para
que se inicien absolutamente los procesos que nos interesan.
El proceso init permite que el usuario pueda definir diferentes configuraciones, cada una de
ellas iniciará un conjunto distinto de procesos. A estas configuraciones se les conoce como
niveles de ejecución. Cada nivel de ejecución hace que el sistema se comporte de una forma
distinta, ya que, como hemos dicho, inicia un conjunto de procesos distintos. De esta forma,
7
el usuario puede seleccionar sobre qué configuración o nivel de ejecución va a iniciar el
sistema.
El sistema operativo GNU/Linux puede aprovechar los niveles de ejecución a través de los
programas del proyecto sysvinit. Después de que el núcleo Linux ha arrancado, el programa
init lee el archivo /etc/inittab para determinar el comportamiento para cada nivel de
ejecución. A no ser que el usuario especifique otro valor como un parámetro de
autoarranque del núcleo, el sistema intentará entrar (iniciar) al nivel de ejecución por
defecto.
La mayor parte de usuarios de sistemas puede comprobar el nivel de ejecución actual con
cualquiera de los comandos siguientes (con systemd , no SysV):
8
Por ejemplo, el nivel 0, que apaga el equipo, mata o detiene a todos los procesos del
sistema, todos los servicios, lo mismo hace el 6 con la diferencia que después inicia un
script que permite reiniciar el sistema. El nivel por omisión o por default del sistema está
definido en /etc/inittab, en la línea initdefault:
id:5:initdefault:
# runlevel 0 is System halt (Do not use this for initdefault!)
# runlevel 6 is System reboot (Do not use this for initdefault!)
root@linux:~# init 3.
Por defecto, Linux establece qué procesos se van a iniciar en un determinado nivel de
ejecución. Por defecto, es el nivel 5 el que más procesos se inician, por lo que el arranque
es un poco más lento que en otros niveles. Sin embargo, cuando disponemos de privilegios
de root, podemos cambiar esto, es decir, podemos establecer que más procesos se van a
iniciar en un nivel de ejecución concreto. La forma más sencilla de hacer esto es utilizando
las herramientas de entorno gráfico o en modo texto. También se puede hacer
manualmente accediendo a los archivos situados en la carpeta /etc/init.d/, aunque se está
más expuesto a cometer errores que comprometan el buen funcionamiento del equipo.
El archivo /etc/inittab contiene la configuración principal del proceso init y todas las
herramientas de configuración acceden a él para realizar los cambios. Cuando se edita
manualmente este archivo, hay que tener mucho cuidado para no cometer errores de
sintaxis, ya que puede ocurrir que no arranque Linux. El siguiente ejemplo muestra cuál
puede ser el contenido de este archivo.
9
id:2:initdefault:
si::sysinit:/etc/init.d/rcs
~~:S:wait:/sbin/sulogin
10:0:wait:/etc/init.d/rc 0
11:1:wait:/etc/init.d/rc 1
12:2:wait:/etc/init.d/rc 2
13:3:wait:/etc/init.d/rc 3
14:4:wait:/etc/init.d/rc 4
15:5:wait:/etc/init.d/rc 5
16:6:wait:/etc/init.d/rc 6
z6:6:respawn:/sbin/sulogin
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop
- La primera línea indica el nivel de ejecución por defecto en el que se inicia el sistema,
como se ha explicado.
- La siguiente línea indica que se iniciaran los procesos del nivel de ejecución S
cuando se inicie el sistema en cualquier nivel.
10
- La tercera línea indica lo que hay que hacer cuando se inicia en el nivel de ejecución
S (en este caso, ejecutar la orden sulogin para solicitar la contraseña de acceso del
usuario root).
- Las líneas desde la cuarta hasta la undécima indican los procesos a iniciar para cada
nivel de ejecución. Cada uno de estos procesos están indicados como archivos de
inicio en las carpetas /etc/init.d/rcx.d (donde x es nivel de ejecución).
- La duodécima líneas especifica la orden que se va a ejecutar cuando se pulsa la
combinación de teclas CTRL+ALT+SUPR desde una ventana de terminal de línea de
órdenes. En este caso se indica que se va a ejecutar la orden ¨shutdown -r¨, que
reinicia el sistema.
- Las líneas desde la decimotercera a la decimoquinta indican qué hacer cuando se
produce un fallo en la alimentación de corriente eléctrica el equipo.
La carpeta INIT.D.
La mayoría de versiones de Linux, Unix y otros sistemas derivados utilizan una carpeta
especial, denominada init.d, que normalmente se ubica dentro de la carpeta /etc, que
contiene toda la configuración acerca de los procesos que se inician automáticamente para
los distintos niveles de ejecución. Esta carpeta contiene una estructura jerárquica a base de
carpetas y archivos para los diferentes servicios que se cargan como procesos.
• Una serie de archivos que guardan las órdenes necesarias para iniciar y parar los
diferentes servicios que están disponibles en el sistema. Por ejemplo, puede
contener los archivos ¨sshd¨ (para el servidor SSH), ¨gdm¨ (para el servidor gráfico
Gnome), ¨alsa¨ (para el mezclador de volumen del sistema de sonido), ¨apache2¨
(para el servidor web Apache), etc.
• Una serie de carpetas, cuyo nombre es ¨rcx.d¨, donde x se sustituye por cada uno de
los niveles de ejecución disponibles en el equipo. Cada una de estas carpetas
contiene enlaces simbólicos. Estos enlaces son de dos tipos:
11
o Aquellos enlaces cuyo nombre comienza por la letra ¨S¨ (derivada de start)
se usan para indicar que el servicio especificado al que apunta se va a iniciar
en ese nivel de ejecución. A continuación de esta letra, se indica un número
que especifica el orden en el que se va a iniciar este servicio en el arranque.
El orden de inicio de estos servicios es importante ya que, para que muchos
de ellos se puedan iniciar correctamente, puede ser necesario que otros ya
estén funcionando.
Se puede acceder a los logs, dirigiéndose al directorio /var/log del sistema, y allí se
encontrará una serie de subdirectorios y ficheros muy interesantes con una información
muy valiosa, desde errores para detectar y corregir problemas del sistema o con el hardware,
12
hasta otra información como los accesos que ha tenido tu sistema para detectar, por
ejemplo, intrusos que han entrado sin tu consentimiento. De hecho, estos logs suelen ser
borrados o modificados por los asaltantes para no dejar constancia o rastro de su acceso.
Algunos ejemplos de la información que contienen los logs en Linux son los siguientes:
1. Los paquetes que se instalan y desinstalan en el sistema operativo.
2. Información sobre accesos remotos a nuestro equipo.
3. Los intentos fallidos de autenticación de los usuarios al equipo.
4. Registro de errores que se dan en los programas o servicios que usamos.
5. Los accesos o salidas están bloqueadas por nuestro firewall.
Como acaban de ver, los logs en linux son una fuente básica para saber qué está pasando
en nuestro equipo. Por lo tanto, todo administrador de sistemas debería saber cómo
consultar los logs para este modo:
1. Detectar la causa de los problemas que puede tener un equipo o servidor.
2. Registrar y detectar ataques informáticos por parte de un hacker.
3. Detectar comportamientos anómalos de programas o servicios que tenemos
instalados en nuestro equipo.
4. Ver el rendimiento de un ordenador o servidor.
5. Averiguar qué ocurrió en una determinada actualización de un equipo.
13
Simplificando al máximo los logs en Linux se pueden clasificar del siguiente modo:
Lo más recomendable es navegar hacia la carpeta /var/log y listar los archivos contenidos
dentro de esa carpeta. Aparecerán todos los archivos de registro disponibles. Sus nombres
son autoexplicativos.
14
cd /var/log
ls
● syslogd: gestiona los logs del sistema. Distribuye los mensajes a archivos, tuberías,
destinos remotos, terminales o usuarios, usando las indicaciones especificadas en
su archivo de configuración /etc/syslog.conf, donde se indica qué se loguea y a
dónde se envían estos logs.
● klogd: se encarga de los logs del kernel. Lo normal es que klogd envíe sus
mensajes a syslogd pero no siempre es así, sobre todo en los eventos de alta
prioridad, que salen directamente por pantalla.
15
● Los logs se guardan en archivos ubicados en el directorio /var/log, aunque muchos
programas manejan sus propios logs y los guardan en /var/log/<programa>.
Además, es posible especificar múltiples destinos para un mismo mensaje. Algunos de los
logs más importantes son:
● /var/log/messages: aquí encontraremos los logs que llegan con prioridad info
(información), notice (notificación) o warn (aviso).
● /var/log/kern.log: aquí se almacenan los logs del kernel, generados por klogd.
● /var/log/auth.log: en este log se registran los login en el sistema, las veces que
hacemos su, etc. Los intentos fallidos se registran en líneas con información del
tipo invalid password o authentication failure.
● /var/log/dmesg: en este archivo se almacena la información que genera el kernel
durante el arranque del sistema. Podemos ver su contenido con el comando
dmesg:
$dmesg
Los archivos de log crecen y con el tiempo se pueden volver muy extensos, pero no tenemos
que preocuparnos porque en /etc/cron.daily (tareas que se ejecutan cada día) está el script
/etc/cron.daily/logrotate, (cuyo archivo de configuración es /etc/logrotate.conf), que se
encarga de comprimirlos y aplicar una rotación de archivos, añadiendoles la extensión 1.gz,
.2.gz, etc., volviendo a crear un vacío (cuanto mayor sea el número más antiguo será el log).
Para monitorizar los logs en la consola, utilizaremos el comando tail. Este comando muestra
las últimas líneas de uno o más archivos de texto (por defecto las diez últimas), pero con la
opción -f, en lugar de mostrar las últimas diez líneas y terminar, tail seguirá activo y
conforme se añadan nuevas líneas al fichero las imprimirá, lo que es muy útil para
monitorizar archivos.
haremos lo siguiente:
$ tail -f /var/log/messages
16
Monitorizar los logs en el entorno gráfico.
Muchas veces los logs no se miran, por lo que es buena idea configurar el sistema para
enviar todos los logs a un archivo (además de los archivos habituales) y visualizarlo en un
terminal, para así poder ver en tiempo real todo lo que pasa en nuestra máquina. Esto nos
permitirá aprender más sobre nuestro sistema y cómo funciona, y también detectar
cualquier anomalía o error que de otra manera pasarían desapercibidos. Para ello:
17
# touch /var/log/all.log
*.* /var/log/all.log
# /etc/init.d/rsysklogd reload
/var/log/all.log
$ tail -f /var/log/all.log
El comando logger permite enviar eventos al demonio syslogd, por lo que se utiliza en
scripts para registrar mensajes vía sysklogd. Por ejemplo, si hacemos:
18