Linux
          Professional Institute Learning Logo.
Pasar al contenido principal
  • Inicio
    • Todos los recursos
    • LPI Learning Materials
    • Conviértete en colaborador
    • Publishing Partners
    • Conviértase en un Publishing Partner
    • Acerca de nosotros
    • FAQ
    • Colaboradores
    • Roadmap
    • Contáctenos
  • LPI.org
110.1 Lección 1

Tema 105: Shells y scripts
105.1 Personalizar y usar el entorno de shell
  • 105.1 Lección 1
  • 105.1 Lección 2
  • 105.1 Lección 3
105.2 Personalizar y escribir scripts sencillos
  • 105.2 Lección 1
  • 105.2 Lección 2
Tema 106: Interfaces de usuario y escritorios
106.1 Instalar y configurar X11
  • 106.1 Lección 1
106.2 Escritorios gráficos
  • 106.2 Lección 1
106.3 Accesibilidad
  • 106.3 Lección 1
Tema 107: Tareas administrativas
107.1 Administrar cuentas de usuario y de grupo y los archivos de sistema relacionados con ellas
  • 107.1 Lección 1
  • 107.1 Lección 2
107.2 Automatizar tareas administrativas del sistema mediante la programación de trabajos
  • 107.2 Lección 1
  • 107.2 Lección 2
107.3 Localización e internacionalización
  • 107.3 Lección 1
Tema 108: Servicios esenciales del sistema
108.1 Mantener la hora del sistema
  • 108.1 Lección 1
  • 108.1 Lección 2
108.2 Registros del sistema
  • 108.2 Lección 1
  • 108.2 Lección 2
108.3 Conceptos básicos del Agente de Transferencia de Correo
  • 108.3 Lección 1
108.4 Gestión de la impresión y de las impresoras
  • 108.4 Lección 1
Tema 109: Fundamentos de redes
109.1 Fundamentos de los protocolos de Internet
  • 109.1 Lección 1
  • 109.1 Lección 2
109.2 Configuración de red persistente
  • 109.2 Lección 1
  • 109.2 Lección 2
109.3 Resolución de problemas básicos de red
  • 109.3 Lección 1
  • 109.3 Lección 2
109.4 Configuración DNS en el lado del cliente
  • 109.4 Lección 1
Tema 110: Seguridad
110.1 Tareas de administración de seguridad
  • 110.1 Lección 1
110.2 Configuración de la seguridad del sistema
  • 110.2 Lección 1
110.3 Protección de datos mediante cifrado
  • 110.3 Lección 1
  • 110.3 Lección 2
How to get certified
  1. Tema 110: Seguridad
  2. 110.1 Tareas de administración de seguridad
  3. 110.1 Lección 1

110.1 Lección 1

Certificación:

LPIC-1

Versión:

5.0

Tema:

110 Seguridad

Objetivo:

110.1 Tareas de administración de seguridad

Lección:

1 de 1

Introducción

La seguridad es una necesidad en la administración de sistemas. Como un buen administrador de sistemas Linux debe vigilar una serie de cosas como los permisos especiales en los archivos, el vencimiento de las contraseñas de los usuarios, los puertos y sockets abiertos, la limitación del uso de los recursos del sistema, el manejo de los usuarios con sesión iniciada y la escalación de privilegios a través de su y sudo. En este tema revisaremos cada uno de estos temas.

Comprobación de archivos con el conjunto SUID y SGID

Además del conjunto tradicional de permisos de lectura, escritura y ejecución, los archivos en un sistema Linux pueden tener también algunos permisos especiales como los bits SUID o SGID.

El bit SUID permite que el fichero se ejecute con los privilegios del propietario del archivo. Se representa numéricamente por 4000 y simbólicamente por s o S en el bit de permiso execute del propietario. Un ejemplo clásico de un archivo ejecutable con el permiso SUID establecido es passwd:

carol@debian:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 63736 jul 27  2018 /usr/bin/passwd

La s minúscula en rws indica la presencia del SUID en el archivo, junto con el permiso de ejecución. Una S mayúscula en su lugar (rwS) significaría que el permiso execute subyacente no está establecido.

Note

La utilidad passwd es empleada principalmente por root para establecer/cambiar las contraseñas de los usuarios (por ejemplo: passwd carol). Sin embargo, los usuarios normales también pueden utilizarla para cambiar sus propias contraseñas. Por lo tanto, viene con el conjunto SUID.

Por otro lado, el bit SGID puede establecerse tanto en archivos como en directorios. En el caso de los archivos, su comportamiento es equivalente al de SUID, pero los privilegios son los del grupo propietario. Sin embargo, cuando se establece en un directorio, permitirá que todos los archivos creados en él hereden la propiedad del grupo del directorio. Al igual que SUID, SGID se representa simbolicamente por s o S en el bit de permiso execute del grupo. Numéricamente, se representa por 2000. Puede establecer el SGID en un directorio utilizando chmod. Es necesario añadir  2 (SGID) a la izquierda los permisos tradicionales (755 en nuestro caso):

carol@debian:~$ ls -ld shared_directory
drwxr-xr-x 2 carol carol 4096 may 30 23:55 shared_directory
carol@debian:~$ sudo chmod 2755 shared_directory/
carol@debian:~$ ls -ld shared_directory
drwxr-sr-x 2 carol carol 4096 may 30 23:55 shared_directory

Para buscar archivos con alguno o ambos de estos permisos puede utilizar el comando find y hacer uso de la opción -perm. Puede utilizar tanto valores numéricos como simbólicos. Los valores — a su vez — pueden ser pasados solos o precedidos por un guión (-) o una barra inclinada (/). El significado es el siguiente:

-perm numeric-value o -perm symbolic-value

Encontrar archivos que tengan el permiso especial exclusivamente

-perm -numeric-value o -perm -symbolic-value

Buscar archivos que tengan el permiso especial y otros permisos

-perm /numeric-value o -perm /symbolic-value

Encontrar archivos que tengan alguno de los permisos especiales (y otros permisos)

Por ejemplo, para buscar archivos con sólo SUID en el directorio de trabajo actual, se utilizará el siguiente comando:

carol@debian:~$ find . -perm 4000
carol@debian:~$ touch file
carol@debian:~$ chmod 4000 file
carol@debian:~$ find . -perm 4000
./file

Observe como — al no haber ningún archivo que tenga exclusivamente el SUID — creamos uno para mostrar alguna salida. Puede ejecutar el mismo comando en notación simbólica:

carol@debian:~$ find . -perm u+s
./file

Para buscar archivos que coincidan con el SUID (independientemente de cualquier otro permiso) en el directorio /usr/bin/, puede utilizar cualquiera de los siguientes comandos:

carol@debian:~$ sudo find /usr/bin -perm -4000
/usr/bin/umount
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/chfn
/usr/bin/mount
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/sudo
/usr/bin/su
carol@debian:~$ sudo find /usr/bin -perm -u+s
/usr/bin/umount
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/chfn
/usr/bin/mount
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/sudo
/usr/bin/su

Si busca archivos en el mismo directorio con el bit SGID activado, puede ejecutar find /usr/bin/ -perm -2000 o find /usr/bin/ -perm -g+s.

Por último, para buscar archivos con cualquiera de los dos permisos especiales establecidos, añada 4 y 2 y utilice /:

carol@debian:~$ sudo find /usr/bin -perm /6000
/usr/bin/dotlock.mailutils
/usr/bin/umount
/usr/bin/newgrp
/usr/bin/wall
/usr/bin/ssh-agent
/usr/bin/chage
/usr/bin/dotlockfile
/usr/bin/gpasswd
/usr/bin/chfn
/usr/bin/mount
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/expiry
/usr/bin/sudo
/usr/bin/bsd-write
/usr/bin/crontab
/usr/bin/su

Gestión y caducidad de contraseñas

Como se ha indicado anteriormente, puede emplear la utilidad passwd para cambiar su propia contraseña como usuario normal. Además, puede pasar la opción -S o --status para obtener información sobre el estado de su cuenta:

carol@debian:~$ passwd -S
carol P 12/07/2019 0 99999 7 -1

A continuación se desglosan los siete campos que se obtienen en la salida:

carol

Nombre de acceso del usuario.

P

Indica que el usuario tiene una contraseña válida (P); otros valores posibles son L para una contraseña bloqueada y NP para ninguna contraseña.

12/07/2019

Fecha del último cambio de contraseña.

0

Edad mínima en días (el número mínimo de días entre cambios de contraseña). Un valor de 0 significa que la contraseña puede cambiarse en cualquier momento.

99999

Edad máxima en días (el número máximo de días que la contraseña es válida). Un valor de 99999 desactivará la caducidad de la contraseña.

7

Período de advertencia en días (el número de días antes de la expiración de la contraseña que un usuario será advertido).

-1

Periodo de inactividad de la contraseña en días (el número de días inactivos después de la expiración de la contraseña antes de que la cuenta se bloquee). Un valor de -1 eliminará la inactividad de una cuenta.

Aparte de informar sobre el estado de las cuentas, se puede utilizar el comando passwd como root para llevar a cabo algunas tareas básicas de mantenimiento de cuentas. Puede bloquear y desbloquear cuentas, forzar a un usuario a cambiar su contraseña en el siguiente inicio de sesión y eliminar la contraseña de un usuario con las opciones -l, -u, -e y -d, respectivamente.

Para probar estas opciones es conveniente introducir el comando su en este punto. A través de su se puede cambiar de usuario durante una sesión de inicio de sesión. Por ejemplo, usemos passwd como root para bloquear la contraseña de carol. Entonces cambiaremos a carol y comprobaremos el estado de nuestra cuenta para verificar que la contraseña ha sido --de hecho-- bloqueada (L) y no puede ser cambiada. Finalmente, volviendo al usuario root, desbloquearemos la contraseña de carol:

root@debian:~# passwd -l carol
passwd: password expiry information changed.
root@debian:~# su - carol
carol@debian:~$ passwd -S
carol L 05/31/2020 0 99999 7 -1
carol@debian:~$ passwd
Changing password for carol.
Current password:
passwd: Authentication token manipulation error
passwd: password unchanged
carol@debian:~$ exit
logout
root@debian:~# passwd -u carol
passwd: password expiry information changed.

También puede bloquear y desbloquear la contraseña de un usuario con el comando usermod:

Bloquear la contraseña del usuario carol

usermod -L carol o usermod --lock carol.

Desbloquear la contraseña del usuario carol

usermod -U carol o usermod --unlock carol.

Note

Con las opciones -f o --inactive, usermod también pueden utilizarse para establecer el número de días antes de que se desactive una cuenta con una contraseña expirada (por ejemplo: usermod -f 3 carol).

Además de passwd y usermod, el comando más directo para tratar la caducidad de contraseñas y cuentas es chage (“change age”). Como root, puede pasarle a chage la opción -l (o --list) seguido de un nombre de usuario para que se imprima en la pantalla la contraseña actual de ese usuario y la información de caducidad de la cuenta; como usuario normal, puede ver su propia información:

carol@debian:~$ chage -l carol
Last password change					: Aug 06, 2019
Password expires					: never
Password inactive					: never
Account expires						: never
Minimum number of days between password change		: 0
Maximum number of days between password change		: 99999
Number of days of warning before password expires	: 7

Ejecutado sin opciones y sólo seguido de un nombre de usuario, chage se comportará de forma interactiva:

root@debian:~# chage carol
Changing the aging information for carol
Enter the new value, or press ENTER for the default

	Minimum Password Age [0]:
	Maximum Password Age [99999]:
	Last Password Change (YYYY-MM-DD) [2020-06-01]:
	Password Expiration Warning [7]:
	Password Inactive [-1]:
	Account Expiration Date (YYYY-MM-DD) [-1]:

Las opciones para modificar los diferentes ajustes de chage son las siguientes:

-m days username o --mindays days username

Especifica el número mínimo de días entre cambios de contraseña (por ejemplo: chage -m 5 carol). Un valor de 0 permitirá al usuario cambiar su contraseña en cualquier momento.

-M days username o --maxdays days username

Especifica el número máximo de días que la contraseña será válida (por ejemplo: chage -M 30 carol). Para desactivar la caducidad de la contraseña, es habitual dar a esta opción un valor de 99999.

-d days username o --lastday days username

Especifica el número de días desde que la contraseña fue cambiada por última vez (por ejemplo: chage -d 10 carol). Un valor de 0 obligará al usuario a cambiar su contraseña en el siguiente inicio de sesión.

-W days username o --warndays days username

Especifica el número de días que se le recordará al usuario que su contraseña ha caducado.

-I days username o --inactive days username

Especifica el número de días inactivos después de la expiración de la contraseña (por ejemplo: chage -I 10 carol) — lo mismo que usermod -f o usermod --inactive. Una vez que haya pasado ese número de días, la cuenta se bloqueará. Sin embargo, con un valor de 0, la cuenta no se bloqueará.

-E date username o --expiredate date username

Especifica la fecha (o el número de días desde la época — el 1 de enero de 1970) en la que se bloqueará la cuenta. Normalmente se expresa en el formato YYYY-MM-DD (por ejemplo: chage -E 2050-12-13 carol).

Note

Puede encontrar más información sobre passwd, usermod y chage y sus opciones consultando sus respectivas páginas de manual.

Descubrir los puertos abiertos

Cuando se trata de vigilar los puertos TCP/IP abiertos, hay cuatro potentes utilidades presentes en la mayoría de los sistemas Linux: lsof, fuser, netstat y nmap. Las cubriremos en esta sección.

lsof significa “listar archivos abiertos”, lo cual no es poca cosa teniendo en cuenta que — para Linux — todo es un archivo. De hecho, si escribe lsof en el terminal, obtendrá un gran listado de archivos regulares, archivos de dispositivos, sockets, etc. Sin embargo, nos centraremos principalmente en los puertos. Para imprimir el listado de todos los archivos de red de “Internet”, ejecute lsof con la opción -i:

root@debian:~# lsof -i
COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dhclient 357     root    7u  IPv4  13493      0t0  UDP *:bootpc
sshd     389     root    3u  IPv4  13689      0t0  TCP *:ssh (LISTEN)
sshd     389     root    4u  IPv6  13700      0t0  TCP *:ssh (LISTEN)
apache2  399     root    3u  IPv6  13826      0t0  TCP *:http (LISTEN)
apache2  401 www-data    3u  IPv6  13826      0t0  TCP *:http (LISTEN)
apache2  402 www-data    3u  IPv6  13826      0t0  TCP *:http (LISTEN)
sshd     557     root    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
sshd     569    carol    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)

Aparte del servicio bootpc  — que es utilizado por DHCP — la salida muestra dos servicios que están escuchando conexiones — ssh y el servidor web Apache (http)  — así como dos conexiones SSH establecidas. Puede especificar un host en particular con la notación @ip-address para comprobar sus conexiones:

root@debian:~# lsof -i@192.168.1.7
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    557  root    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
sshd    569 carol    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
Note

Para imprimir sólo los archivos de red IPv4 e IPv6, utilice las opciones -i4 y -i6 respectivamente.

Asimismo, puede filtrar por puerto pasando la opción -i (o -i@ip-address) al argumento :port.

root@debian:~# lsof -i :22
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    389  root    3u  IPv4  13689      0t0  TCP *:ssh (LISTEN)
sshd    389  root    4u  IPv6  13700      0t0  TCP *:ssh (LISTEN)
sshd    557  root    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
sshd    569 carol    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)

Los puertos múltiples se separan con comas (y los rangos se especifican con un guión):

root@debian:~# lsof -i@192.168.1.7:22,80
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    705  root    3u  IPv4  13960      0t0  TCP 192.168.1.7:ssh->192.168.1.4:44766 (ESTABLISHED)
sshd    718 carol    3u  IPv4  13960      0t0  TCP 192.168.1.7:ssh->192.168.1.4:44766 (ESTABLISHED)
Note

La cantidad de opciones de que dispone lsof es bastante impresionante. Para saber más, consulte su página de manual.

El siguiente en la lista de comandos de red es fuser. Su propósito principal es encontrar el "usuario de un fichero", lo que implica saber qué procesos están accediendo a qué ficheros; también da alguna otra información como el tipo de acceso. Por ejemplo, para comprobar el directorio de trabajo actual, basta con ejecutar fuser. Sin embargo, para obtener un poco más de información, es conveniente utilizar la opción verbose (-v o --verbose):

root@debian:~# fuser .
/root:                 580c
root@debian:~# fuser -v .
                     USER        PID ACCESS COMMAND
/root:               root        580 ..c.. bash

Desglosemos la salida:

File

El archivo del que estamos obteniendo información (/root).

USER

El propietario del fichero (root).

PID

El identificador del proceso (580).

ACCESS

Tipo de acceso (..c..). Uno de:

c

Directorio actual.

e

Ejecutables que se llevan a cabo.

f

Abrir archivo (se omite en el modo de visualización por defecto).

F

Abrir archivo para escribir (se omite en el modo de visualización por defecto).

r

Directorio raíz.

m

archivo mmap’ed o biblioteca compartida.

.

Marcador de posición (omitido en el modo de visualización por defecto).

COMMAND

El comando afiliado al archivo (bash).

Con la opción -n (o --namespace), puede encontrar información sobre los puertos/sockets de red. También debe proporcionar el protocolo de red y el número de puerto. Así para obtener información sobre el servidor web Apache ejecutará el siguiente comando:

root@debian:~# fuser -vn tcp 80
                     USER        PID ACCESS COMMAND
80/tcp:              root        402 F.... apache2
                     www-data    404 F.... apache2
                     www-data    405 F.... apache2
Note

fuser también se puede utilizar para matar los procesos que acceden al archivo con las opciones -k o --kill (por ejemplo: fuser -k 80/tcp). Consulte la página del manual para obtener información más detallada.

Pasemos ahora a netstat. Esta es una herramienta de red muy versátil que se utiliza principalmente para imprimir “estadísticas de red”.

Ejecutado sin opciones, netstat mostrará tanto las conexiones activas a Internet como los sockets de Unix. Debido al tamaño del listado, es posible que quiera canalizar su salida a través de less:

carol@debian:~$ netstat |less
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 192.168.1.7:ssh         192.168.1.4:55444       ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    10509    /run/systemd/journal/syslog
unix  3      [ ]         DGRAM                    10123    /run/systemd/notify
(...)

Para listar sólo los puertos y sockets de “escucha”, se utilizarán las opciones -l o --listening. Las opciones -t/--tcp y -u/--udp pueden añadirse para filtrar por protocolo TCP y UDP, respectivamente (también pueden combinarse en el mismo comando). Asimismo, -e/--extend mostrará información adicional:

carol@debian:~$ netstat -lu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
udp        0      0 0.0.0.0:bootpc          0.0.0.0:*
carol@debian:~$ netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN
tcp6       0      0 [::]:http               [::]:*                  LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN
carol@debian:~$ netstat -lute
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      root       13729
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN      root       14372
tcp6       0      0 [::]:http               [::]:*                  LISTEN      root       14159
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      root       13740
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN      root       14374
udp        0      0 0.0.0.0:bootpc          0.0.0.0:*                           root       13604

Si omite la opción -l, sólo se mostrarán las conexiones establecidas:

carol@debian:~$ netstat -ute
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode
tcp        0      0 192.168.1.7:ssh         192.168.1.4:39144       ESTABLISHED root       15103

Si sólo le interesa la información numérica relativa a los puertos y hosts, puede utilizar la opción -n o --numeric para imprimir sólo los números de puerto y las direcciones IP. Observe cómo ssh se convierte en 22 al añadir -n al comando anterior:

carol@debian:~$ netstat -uten
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode
tcp        0      0 192.168.1.7:22          192.168.1.4:39144       ESTABLISHED 0          15103

Como puede ver, es posible utilizar comandos netstat muy útiles y productivos combinando algunas de sus opciones. Navegue por las páginas del manual para aprender más y encontrar las combinaciones que mejor se adapten a sus necesidades.

Por último, presentaremos nmap  — o el “network mapper”. Otra utilidad muy potente, este escáner de puertos se ejecuta especificando una dirección IP o un nombre de host:

root@debian:~# nmap localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:29 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000040s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 1.58 seconds

Aparte de un solo host, nmap le permite escanear:

Múltiples hosts

Separándolos con espacios (por ejemplo: nmap localhost 192.168.1.7).

Rangos de hosts

Utilizando un guión (por ejemplo: nmap 192.168.1.3-20).

Subredes

Utilizando un comodín o una notación CIDR (por ejemplo: nmap 192.168.1.* o nmap 192.168.1.0/24). Puede excluir determinados hosts (por ejemplo: nmap 192.168.1.0/24 --exclude 192.168.1.7).

Para escanear un puerto concreto, utilice la opción -p seguida del número de puerto o del nombre del servicio (nmap -p 22 y nmap -p ssh le darán la misma salida):

root@debian:~# nmap -p 22 localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:54 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000024s latency).
Other addresses for localhost (not scanned): ::1

PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds

También puede escanear varios puertos o rangos de puertos utilizando comas y guiones, respectivamente:

root@debian:~# nmap -p ssh,80 localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:58 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000051s latency).
Other addresses for localhost (not scanned): ::1

PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds
root@debian:~# nmap -p 22-80 localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:58 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000011s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 57 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 1.47 seconds

Otras dos opciones importantes y útiles de nmap son:

-F

Ejecuta un escaneo rápido en los 100 puertos más comunes.

-v

Obtiene una salida más detallada (-vv imprimirá una salida con más información).

Note

nmap puede ejecutar comandos bastante complejos haciendo uso de los tipos de exploración. Sin embargo, ese tema está fuera del alcance de esta lección.

Límites en los inicios de sesión de los usuarios, los procesos y el uso de la memoria

Los recursos en un sistema Linux no son ilimitados, por lo que — como administrador del sistema — debe asegurar un buen equilibrio entre los límites de los usuarios sobre los recursos y el correcto funcionamiento del sistema operativo. ulimit (el comando interno de la shell) puede ayudarle en la tarea de aplicar límites en la cantidad y tamaño de los recursos que la shell abierta por un usuario puede usar.

ulimit se ocupa de los límites soft y hard  . Un límite estricto (hard ) es aquél que no puede ser aumentado una vez puesto; un límite flexible (soft) puede incrementarse hasta el valor dado por el límite estricto. La opción -S de ulimit actua sobre los límites flexibles la opción -H actua sobre los límites estrictos. Si se ejecuta sin opciones ni argumentos, ulimit mostrará los bloques de archivos con límites flexibles del usuario actual:

carol@debian:~$ ulimit
unlimited

Con la opción -a, ulimit mostrará todos los límites flexibles actuales (lo mismo que -Sa); para mostrar todos los límites estrictos actuales, utilice -Ha:

carol@debian:~$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
(...)
carol@debian:~$ ulimit -Ha
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
(...)

Los recursos del shell disponibles se especifican mediante opciones como:

-b

tamaño máximo del búfer en el socket

-f

tamaño máximo de los archivos escritos por el shell y sus hijos

-l

tamaño máximo de memoria que se puede bloquear.

-m

tamaño máximo del conjunto residente (RSS) — la porción actual de memoria que tiene un proceso en la memoria principal (RAM)-

-v

cantidad máxima de memoria virtual

-u

número máximo de procesos disponibles para un solo usuario

Así, para mostrar los límites se utilizará ulimit seguido de -S (flexible) o -H(estricto) y la opción de recurso; si no se suministra ni -S ni -H, se mostrarán los límites flexibles:

carol@debian:~$ ulimit -u
10000
carol@debian:~$ ulimit -Su
10000
carol@debian:~$ ulimit -Hu
15672

Del mismo modo, para establecer nuevos límites en un recurso concreto se especificará S o H, seguido de la opción de recurso correspondiente y el nuevo valor. Este valor puede ser un número o las palabras especiales soft (límite flexible actual), hard (límite estricto actual) o unlimited (sin límite). Si no se especifica ni S ni H, se establecerán ambos límites. Por ejemplo, leamos primero el valor del tamaño máximo actual de los archivos escritos por el shell y sus hijos:

root@debian:~# ulimit -Sf
unlimited
root@debian:~# ulimit -Hf
unlimited

Ahora, cambiemos el valor de ilimitado a 500 bloques sin especificar ni -S ni -H. Observe cómo se modifican tanto los límites flexibles como los estrictos:

root@debian:~# ulimit -f 500
root@debian:~# ulimit -Sf
500
root@debian:~# ulimit -Hf
500

Por último, disminuiremos sólo el límite flexible a 200 bloques:

root@debian:~# ulimit -Sf 200
root@debian:~# ulimit -Sf
200
root@debian:~# ulimit -Hf
500

Los límites estrictos sólo pueden ser aumentados por el usuario root. Por otro lado, los usuarios regulares pueden disminuir los límites estrictos y aumentar los límites flexibles hasta el valor de los límites estrictos. Para hacer que los nuevos valores de los límites sean persistentes a través de los reinicios, debe escribirlos en el archivo /etc/security/limits.conf. Este es también el archivo utilizado por el administrador para aplicar restricciones a determinados usuarios.

Note

Se advierte que no hay una página man de ulimit como tal. Es una integración de bash, así que tiene que consultar la página man de bash para aprender sobre este.

Tratar con usuarios registrados

Otro de los trabajos como administrador de sistemas implica llevar un registro de los usuarios conectados. Hay tres utilidades que pueden ayudar con esas tareas: last, who y w.

last imprime un listado de los últimos usuarios conectados con la información más reciente en la parte superior:

root@debian:~# last
carol    pts/0        192.168.1.4      Sat Jun  6 14:25   still logged in
reboot   system boot  4.19.0-9-amd64   Sat Jun  6 14:24   still running
mimi     pts/0        192.168.1.4      Sat Jun  6 12:07 - 14:24  (02:16)
reboot   system boot  4.19.0-9-amd64   Sat Jun  6 12:07 - 14:24  (02:17)
(...)
wtmp begins Sun May 31 14:14:58 2020

Considerando el listado truncado, obtenemos información sobre los dos últimos usuarios del sistema. Las dos primeras líneas nos hablan del usuario carol; las dos siguientes, del usuario mimi. La información es la siguiente:

  1. El usuario carol en la terminal pts/0 desde el host 192.168.1.4 inició su sesión el sábado 6 de junio a las 14:25 y todavía está conectada. El sistema, que utiliza el kernel 4.19.0-9-amd64, se inició (reboot system boot) el sábado 6 de junio a las 14:24 y sigue funcionando.

  2. El usuario mimi en la terminal pts/0 desde el host 192.168.1.4 inició su sesión el sábado 6 de junio a las 12:07 y cerró la sesión a las 14:24 (la sesión duró un total de (02:16) horas). El sistema que utiliza el kernel 4.19.0-9-amd64, se inició (reboot system boot) el sábado 6 de junio a las 12:07 y se apagó a las 14:24 (estuvo funcionando durante (02:17) horas).

Note

La línea wtmp begins Sun May 31 14:14:58 2020 se refiere a /var/log/wtmp, que es el archivo de registro especial del que last obtiene la información.

Puede pasarle a last un nombre de usuario para que sólo se muestren las entradas de ese usuario:

root@debian:~# last carol
carol    pts/0        192.168.1.4      Sat Jun  6 14:25   still logged in
carol    pts/0        192.168.1.4      Sat Jun  6 12:07 - 14:24  (02:16)
carol    pts/0        192.168.1.4      Fri Jun  5 00:48 - 01:28  (00:39)
(...)

En cuanto a la segunda columna (terminal), pts significa Pseudo Terminal Slave - en contraposición a un terminal TeleTYpewriter o tty propiamente dicho; 0 se refiere al primero (la cuenta comienza en cero).

Note

Para comprobar los intentos fallidos de inicio de sesión, ejecute lastb en lugar de last.

Las utilidades who y w se centran en los usuarios actualmente conectados y son bastante similares. La primera muestra quién está conectado, mientras que la segunda también muestra información sobre lo que están haciendo.

Cuando se ejecuta sin opciones, who mostrará cuatro columnas correspondientes al usuario conectado, el terminal, la fecha, la hora, y el nombre del host:

root@debian:~# who
carol    pts/0        2020-06-06 17:16 (192.168.1.4)
mimi     pts/1        2020-06-06 17:28 (192.168.1.4)

who acepta una serie de opciones, entre las que podemos destacar las siguientes:

-b,--boot

Muestra la hora del último arranque del sistema.

-r,--runlevel

Muestra el nivel de ejecución actual.

-H,--heading

Imprime los títulos de las columnas.

En comparación con who, w da una salida un poco más detallada:

root@debian:~# w
 17:56:12 up 40 min,  2 users,  load average: 0.04, 0.12, 0.09
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
carol    pts/0    192.168.1.4    17:16    1.00s  0.15s  0.05s sshd: carol [priv]
mimi     pts/1    192.168.1.4    17:28   15:08   0.05s  0.05s -bash

La línea superior ofrece información sobre la hora actual (17:56:12), el tiempo que lleva el sistema en funcionamiento (up 40 min), el número de usuarios conectados en ese momento (2 usuarios) y los números de la media de carga (media de carga: 0,04, 0,12, 0,09). Estos valores se refieren al número de trabajos en la cola de ejecución promediados en los últimos 1, 5 y 15 minutos, respectivamente.

A continuación, encontrará ocho columnas; vamos a desglosarlas:

USER

Nombre de inicio de sesión del usuario.

TTY

Nombre del terminal en el que se encuentra el usuario.

FROM

Host remoto desde el que el usuario se ha conectado.

LOGIN@

Hora de inicio de sesión.

IDLE

Tiempo de inactividad.

JCPU

Tiempo utilizado por todos los procesos conectados a la tty (incluidos los trabajos en segundo plano que se están ejecutando actualmente).

PCPU

Tiempo utilizado por el proceso actual (el que se muestra bajo WHAT).

WHAT

Línea de comandos del proceso actual.

Al igual que con who puede pasar nombres de usuario w:

root@debian:~# w mimi
 18:23:15 up  1:07,  2 users,  load average: 0.00, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
mimi     pts/1    192.168.1.4      17:28    9:23   0.06s  0.06s -bash

Configuración y uso básico de sudo

Como ya se ha señalado en esta lección, su permite cambiar a cualquier otro usuario del sistema siempre que se proporcione la contraseña del usuario de destino. En el caso del usuario root, tener su contraseña distribuida o conocida por muchos usuarios pone en riesgo el sistema y es una muy mala práctica de seguridad. El uso básico de su es su - nombre-de-usuario-destino. Sin embargo, al cambiar a root, el nombre de usuario de destino es opcional:

carol@debian:~$ su - root
Password:
root@debian:~# exit
logout
carol@debian:~$ su -
Password:
root@debian:~#

El uso del guión (-) garantiza que se cargue el entorno del usuario de destino. Sin el, se mantendrá el entorno del usuario anterior:

carol@debian:~$ su
Password:
root@debian:/home/carol#

Por otro lado, está el comando sudo, con el que se puede ejecutar un comando como usuario root o cualquier otro usuario. Desde una perspectiva de seguridad, sudo es una opción mucho mejor que su ya que presenta dos ventajas principales: Para ejecutar un comando como root, no se necesita la contraseña del usuario root, sino sólo la del usuario que lo invoca en cumplimiento de una política de seguridad. La política de seguridad por defecto es sudoers como se especifica en /etc/sudoers y /etc/sudoers.d/*.

  1. sudo le permite ejecutar comandos individuales con privilegios elevados en lugar de lanzar un nuevo subshell para root como hace su.

El uso básico de sudo es sudo -u nombredeusuario comando. Sin embargo, para ejecutar un comando como usuario root, la opción -u nombredeusuario no es necesario:

carol@debian:~$ sudo -u mimi whoami
mimi
carol@debian:~$ sudo whoami
root
Note

sudoers utilizará una marca de tiempo por usuario (y por terminal) para el almacenamiento en caché de las credenciales, de forma que pueda utilizar sudo sin contraseña durante un período por defecto de quince minutos. Este valor por defecto puede ser modificado añadiendo la opción timestamp_timeout como un ajuste Defaults en /etc/sudoers (por ejemplo Defaults timestamp_timeout=1 establecerá el tiempo de espera de la caché de credenciales en un minuto).

El archivo /etc/sudoers

El archivo de configuración principal de sudo es /etc/sudoers (también existe el directorio /etc/sudoers.d). Este es el lugar donde se determinan los privilegios de sudo de los usuarios. En otras palabras, aquí se especifica quién puede ejecutar qué comandos como qué usuarios en qué máquinas — así como otras configuraciones. La sintaxis utilizada es la siguiente:

carol@debian:~$ sudo less /etc/sudoers
(...)
# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
(...)

En la imagen de arriba, la especificación de privilegios para el usuario root es ALL=(ALL:ALL) ALL. Esto se traduce como: el usuario root (root) puede iniciar sesión desde todas los máquinas (orígenes remotos) (ALL), como todos los usuarios y todos los grupos ((ALL:ALL)), y ejecutar todos los comandos (ALL). Lo mismo ocurre con los miembros del grupo sudo — nótese cómo los nombres de los grupos se identifican con un signo de porcentaje precedente (%)-.

Aquí abajo podemos observar la línea que tendríamos que añadir al fichero sudoers para que el usuario carol puede comprobar el estado de apache2 desde cualquier host como cualquier usuario o grupo.

carol   ALL=(ALL:ALL) /usr/bin/systemctl status apache2

Puede que quiera ahorrarle a carol la molestia de tener que proporcionar su contraseña para ejecutar el comando systemctl status apache2. Para ello, puede modificar la línea para que se vea así:

carol   ALL=(ALL:ALL) NOPASSWD: /usr/bin/systemctl status apache2

Digamos que ahora quiere restringir sus hosts a 192.168.1.7 y permitir que carol ejecute systemctl status apache2 como usuario mimi. Usted modificaría la línea de la siguiente manera:

carol   192.168.1.7=(mimi) /usr/bin/systemctl status apache2

Ahora puede comprobar el estado del servidor web Apache como usuario mimi:

carol@debian:~$ sudo -u mimi systemctl status apache2
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-06-09 13:12:19 CEST; 29min ago
(...)

Si carol fuese promovida a sysadmin y quisiera darle todos los privilegios, el enfoque más fácil sería el de incluirla en el grupo especial sudo con usermod y la opción -G (también es posible querer usar la opción -a, que asegura que el usuario no sea removido de cualquier otro grupo al que pudiera pertenecer):

root@debian:~# sudo useradd -aG sudo carol
Note

En la familia de distribuciones de Red Hat el grupo wheel es la contrapartida del grupo administrativo especial sudo de los sistemas Debian.

En lugar de editar /etc/sudoers invocando directamente un editor convencional (nano, vi, etc), es conveniente usar el comando visudo como root que abrirá /etc/sudoers utilizando su editor de texto predefinido (nano, vi, etc). Para cambiar el editor de texto predefinido, puedes añadir la opción editor como un ajuste Defaults en /etc/sudoers. Por ejemplo, para cambiar el editor a nano, añada la línea de abajo. visudo crea un entorno de edición controlado para evitar ediciones simultáneas del fichero sudoers y aplica,  al finalizar la edición, controles de sintáxis y lógica en la codificación.

Defaults	editor=/usr/bin/nano
Note

Como alternativa, puede especificar un editor de texto a través de la variable de entorno EDITOR cuando utilice visudo (por ejemplo: EDITOR=/usr/bin/nano; visudo)

Aparte de los usuarios y grupos, también puede hacer uso de los alias en /etc/sudoers. Hay tres categorías principales de alias que puedes definir: alias de host (Host_Alias), alias de usuario (User_Alias) y alias de comando (Cmnd_Alias). He aquí un ejemplo:

# Especificación de alias de host

Host_Alias SERVERS = 192.168.1.7, server1, server2

# Especificación de alias de usuario

User_Alias REGULAR_USERS = john, mary, alex

User_Alias PRIVILEGED_USERS = mimi, alex

User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS

# Especificación de alias de Cmnd

Cmnd_Alias SERVICES = /usr/bin/systemctl *

# Especificación de los privilegios del usuario
root    ALL=(ALL:ALL) ALL
ADMINS  SERVERS=SERVICES

# Permitir a los miembros del grupo sudo ejecutar cualquier comando
%sudo   ALL=(ALL:ALL) ALL

Teniendo en cuenta este archivo de ejemplo sudoers, vamos a explicar los tres tipos de alias con un poco más de detalle:

Host aliases

Incluyen una lista separada por comas de nombres de host, direcciones IP, así como redes y netgroups (precedidos por +). También se pueden especificar máscaras de red. El alias de host SERVERS incluye una dirección IP y dos nombres de host:

Host_Alias SERVERS = 192.168.1.7, server1, server2
User aliases

Incluyen una lista separada por comas de usuarios especificados como nombres de usuario, grupos (precedidos por %) y netgroups (precedidos por +). Se pueden excluir usuarios concretos con !. El alias de usuario ADMINS - por ejemplo - incluye al usuario carol, los miembros del grupo sudo y aquellos miembros del alias de usuario PRIVILEGE_USERS que no pertenecen al alias de usuario REGULAR_USERS:

User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS
Command aliases

Incluyen una lista de comandos y directorios separados por comas. Si se especifica un directorio, se incluirá cualquier archivo de ese directorio, aunque se ignorarán los subdirectorios. El alias de comando SERVICES incluye un solo comando con todos sus subcomandos — según lo especificado por el asterisco (*):

Cmnd_Alias SERVICES = /usr/bin/systemctl *

Como resultado de las especificaciones de alias, la línea ADMINS SERVERS=SERVICES bajo la sección Especificación de privilegios del usuario se traduce como: todos los usuarios pertenecientes a ADMINS pueden usar sudo para ejecutar cualquier comando en SERVICES en cualquier servidor en SERVERS.

Note

Hay un cuarto tipo de alias que puede incluir en /etc/sudoers: Los alias de runa (Runas_Alias). Son muy similares a los alias de usuario, pero permiten especificar usuarios por su identificación de usuario (UID). Esta característica puede ser conveniente en algunos escenarios.

Ejercicios guiados

  1. Complete la siguiente tabla relativa a los permisos especiales:

    Permiso especial Representación numérica Representación simbólica Buscar archivos con sólo ese permiso establecido

    SUID




    SGID




  2. La visualización de archivos con sólo el bit SUID o SGID activado no suele ser muy práctica. Realice las siguientes tareas para probar que sus búsquedas pueden ser más productivas:

    • Encuentre todos los archivos con el SUID (y otros permisos) establecidos en /usr/bin:


    • Busque todos los archivos con el SGID (y otros permisos) establecidos en /usr/bin:


    • Encuentra todos los archivos con el SUID o el SGID en /usr/bin:


  3. chage permite cambiar la información de caducidad de la contraseña de un usuario. Como root, complete la siguiente tabla proporcionando los comandos correctos en el usuario mary:

    Significado Comandos chage

    Hacer que la contraseña sea válida durante 365 días.


    Hacer que el usuario cambie la contraseña en el próximo inicio de sesión.


    Establecer el número mínimo de días entre cambios de contraseña a 1.


    Desactivar la caducidad de la contraseña.


    Permitir al usuario cambiar su contraseña en cualquier momento.


    Establecer el período de advertencia en 7 días y la fecha de caducidad de la cuenta en el 20 de agosto de 2050.


    Imprimir la información de caducidad de la contraseña del usuario.


  4. Complete la siguiente tabla con la utilidad de red apropiada:

    Acción Comando(s)

    Muestra archivos de red para el host 192.168.1.55 en el puerto 22 usando lsof.


    Muestra los procesos que acceden al puerto por defecto del servidor web Apache en su máquina con fuser.


    Muestra todos los sockets udp que están escuchando en su máquina usando netstat.


    Escanea los puertos del 80 al 443 en el host 192.168.1.55 usando nmap.


  5. Realice las siguientes tareas relacionadas con el tamaño del conjunto residente (RSS) y el ulimit como un usuario normal:

    • Mostrar límites flexibles en el máximo de RSS:


    • Mostrar límites estrictos en el máximo RSS:


    • Establecer los límites flexibles en el máximo RSS a 5.000 kilobytes:


    • Establecer los límites estrictos del máximo RSS a 10.000 kilobytes:


    • Por último, intente aumentar el límite estricto del máximo RSS hasta 15.000 kilobytes. ¿Puede hacerlo? ¿Por qué?


  6. Considere la siguiente línea de salida del comando last y responda a las preguntas:

    carol    pts/0        192.168.1.4      Sun May 31 14:16 - 14:22  (00:06)
    • ¿Se conectó carol desde un host remoto? ¿Por qué?


    • ¿Cuánto duró la sesión de carol?


    • ¿Se conectó carol a través de un verdadero terminal clásico basado en texto? ¿Por qué?


  7. Considere el siguiente extracto de /etc/sudoers y responda a la siguiente pregunta.

    # Especificación de alias de host
    
    Host_Alias SERVERS = 192.168.1.7, server1, server2
    
    # Especificación de alias de usuario
    
    User_Alias REGULAR_USERS = john, mary, alex
    
    User_Alias PRIVILEGED_USERS = mimi, alex
    
    User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS
    
    # Especificación de alias de Cmnd
    
    Cmnd_Alias WEB_SERVER_STATUS = /usr/bin/systemctl status apache2
    
    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    ADMINS  SERVERS=WEB_SERVER_STATUS
    
    # Permitir a los miembros del grupo sudo ejecutar cualquier comando
    %sudo   ALL=(ALL:ALL) ALL

    ¿Puede alex comprobar el estado del servidor web Apache en cualquier host? ¿Por qué?


Ejercicios de exploración

  1. Además del SUID y el SGID, existe un tercer permiso especial: el sticky bit. Actualmente se utiliza sobre todo en directorios como /tmp para evitar que los usuarios habituales borren o muevan archivos que no sean los suyos. Realice las siguientes tareas:

    • Establecer el sticky bit en ~/temporal:


    • Buscar directorios con el sticky bit (y cualquier otro permiso) establecido en su directorio principal:


    • Desactivar el sticky bit en ~/temporal:


  2. Cuando la contraseña de un usuario está bloqueada mediante passwd -l nombre o usermod -L nombre, ¿cómo se puede saber mirando en /etc/shadow?


  3. ¿Cuál es la contraparte del comando usermod a chage -E date username o chage --expiredate date username?


  4. Proporcione dos comandos diferentes nmap para escanear todos los 65535 puertos en localhost:


Resumen

En esta lección ha aprendido a realizar una serie de tareas de administración de la seguridad. Se han cubierto los siguientes temas:

  • Buscar archivos con los permisos especiales SUID y SGID.

  • Establecer y cambiar las contraseñas de los usuarios y manejar la información de caducidad de las contraseñas.

  • Usar una serie de utilidades de red para descubrir puertos abiertos en hosts/redes.

  • Establecer límites en los recursos del sistema.

  • Verificar los usuarios que han entrado en el sistema o que están actualmente conectados.

  • Uso y configuración básica de sudo (a través del archivo /etc/sudoers).

Comandos y archivos tratados en esta lección:

find

Busca archivos en una jerarquía de directorios.

passwd

Cambia la contraseña del usuario.

chmod

Cambia los bits del modo de archivo.

chage

Modifica la información de caducidad de la contraseña del usuario.

lsof

Lista los archivos abiertos.

fuser

Identifica los procesos que utilizan archivos o sockets.

netstat

Imprime las conexiones de red.

nmap

Herramienta de exploración de redes y escáner de puertos.

ulimit

Muestra y establece los límites de los usuarios.

/etc/security/limits.conf

Archivo de configuración para aplicar restricciones a los usuarios.

last

Imprime un listado de los últimos usuarios conectados.

lastb

Imprime un listado de los intentos de inicio de sesión incorrectos.

/var/log/wtmp

Base de datos de los inicios de sesión de los usuarios.

who

Muestra quién está conectado.

w

Muestra quién está conectado y qué está haciendo.

su

Cambiar de usuario o convertirse en superusuario.

sudo

Ejecuta un comando como otro usuario (incluyendo el superusuario).

/etc/sudoers

Archivo de configuración por defecto para la política de seguridad sudo.

Respuesta a los ejercicios guiados

  1. Complete la siguiente tabla relativa a los permisos especiales:

    Permiso especial Representación numérica Representación simbólica Buscar archivos con sólo ese permiso establecido

    SUID

    4000

    s,S

    find -perm 4000, find -perm u+s

    SGID

    2000

    s,S

    find -perm 2000, find -perm g+s

  2. La visualización de archivos con sólo el bit SUID o SGID activado no suele ser muy práctica. Realice las siguientes tareas para probar que sus búsquedas pueden ser más productivas:

    • Encuentre todos los archivos con el SUID (y otros permisos) establecidos en /usr/bin:

      find /usr/bin -perm -4000 or find /usr/bin -perm -u+s

    • Busque todos los archivos con el SGID (y otros permisos) establecidos en /usr/bin:

      find /usr/bin -perm -2000 or find /usr/bin -perm -g+s

    • Encuentre todos los archivos con el SUID o el SGID en /usr/bin:

      find /usr/bin -perm /6000

  3. chage permite cambiar la información de caducidad de la contraseña de un usuario. Como root, complete la siguiente tabla proporcionando los comandos correctos en el usuario mary:

    Significado Comandos chage

    Hacer que la contraseña sea válida durante 365 días.

    chage -M 365 mary, chage --maxdays 365 mary

    Hacer que el usuario cambie la contraseña en el próximo inicio de sesión.

    chage -d 0 mary, chage --lastday 0 mary

    Establecer el número mínimo de días entre cambios de contraseña a 1.

    chage -m 1 mary, chage --mindays 1 mary

    Desactivar la caducidad de la contraseña.

    chage -M 99999 mary, chage --maxdays 99999 mary

    Permitir al usuario cambiar su contraseña en cualquier momento.

    chage -m 0 mary, chage --mindays 0 mary

    Establecer el período de advertencia en 7 días y la fecha de caducidad de la cuenta en el 20 de agosto de 2050.

    chage -W 7 -E 2050-08-20 mary, chage --warndays 7 --expiredate 2050-08-20 mary

    Imprimir la información de caducidad de la contraseña del usuario.

    chage -l mary, chage --list mary

  4. Complete la siguiente tabla con la utilidad de red apropiada:

    Acción Comando(s)

    Muestra archivos de red para el host 192.168.1.55 en el puerto 22 usando lsof.

    lsof -i@192.168.1.55:22

    Muestra los procesos que acceden al puerto por defecto del servidor web Apache en su máquina con fuser.

    fuser -vn tcp 80, fuser --verbose --namespace tcp 80

    Muestra todos los sockets udp que están escuchando en su máquina usando netstat.

    netstat -lu,netstat --listening --udp

    Escanea los puertos del 80 al 443 en el host 192.168.1.55 usando nmap.

    nmap -p 80-443 192.168.1.55

  5. Realice las siguientes tareas relacionadas con el tamaño del conjunto residente (RSS) y el ulimit como un usuario normal:

    • Mostrar límites flexibles en el máximo de RSS:

      ulimit -m, ulimit -Sm

    • Mostrar límites estrictos en el máximo RSS:

      ulimit -Hm

    • Establecer los límites flexibles en el máximo RSS a 5.000 kilobytes:

      ulimit -Sm 5000

    • Establecer los límites estrictos del máximo RSS a 10.000 kilobytes:

      ulimit -Hm 10000

    • Por último, intenta aumentar el límite estricto del máximo RSS hasta 15.000 kilobytes. ¿Puede hacerlo? ¿Por qué?

      No. Una vez establecidos, los usuarios habituales no pueden aumentar los límites estrictos.

  6. Considere la siguiente línea de salida del comando last y responda a las preguntas:

    carol    pts/0        192.168.1.4      Sun May 31 14:16 - 14:22  (00:06)
    • ¿Se conectó carol desde un host remoto? ¿Por qué?

      Sí, la dirección IP del host remoto está en la tercera columna.

      *¿Cuánto duró la sesión de carol?

      Seis minutos (como se muestra en la última columna).

    • ¿Se conectó carol a través de un verdadero terminal clásico basado en texto? ¿Por qué?

      No, pts/0 en la segunda columna indica que la conexión se realizó a través de un emulador de terminal gráfico (también conocido como Pseudo Terminal Slave).

  7. Considere el siguiente extracto de /etc/sudoers y responda a la siguiente pregunta.

    # Especificación de alias de host
    
    Host_Alias SERVERS = 192.168.1.7, server1, server2
    
    # Especificación de alias de usuario
    
    User_Alias REGULAR_USERS = john, mary, alex
    
    User_Alias PRIVILEGED_USERS = mimi, alex
    
    User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS
    
    # Especificación de alias de Cmnd
    
    Cmnd_Alias WEB_SERVER_STATUS = /usr/bin/systemctl status apache2
    
    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    ADMINS  SERVERS=WEB_SERVER_STATUS
    
    # Permitir a los miembros del grupo sudo ejecutar cualquier comando
    %sudo   ALL=(ALL:ALL) ALL

    ¿Puede alex comprobar el estado del servidor web Apache en cualquier host? ¿Por qué?

    No, ya que es miembro de REGULAR_USERS y ese grupo de usuarios está excluido de ADMINS; los únicos usuarios (aparte de carol, miembros del grupo sudo y root) que pueden ejecutar systemctl status apache2 en los SERVERS.

Respuestas a los ejercicios de exploración

  1. Además del SUID y el SGID, existe un tercer permiso especial: el sticky bit. Actualmente se utiliza sobre todo en directorios como /tmp para evitar que los usuarios habituales borren o muevan archivos que no sean los suyos. Realice las siguientes tareas:

    • Establecer el sticky bit en ~/temporal:

      chmod +t temporal, chmod 1755 temporal

    • Buscar directorios con el sticky bit (y cualquier otro permiso) establecido en su directorio principal:

      find ~ -perm -1000, find ~ -perm /1000

    • Desactivar el sticky bit en ~/temporal:

      chmod -t temporal, chmod 0755 temporal

  2. Cuando la contraseña de un usuario está bloqueada mediante passwd -l nombre o usermod -L nombre, ¿cómo se puede saber mirando en /etc/shadow?

    Aparecerá un signo de exclamación en el segundo campo, justo después del nombre de acceso del usuario afectado (Ejemplo: mary:!$6$gOg9xJgv… ​).

  3. ¿Cuál es la contraparte del comando usermod a chage -E date username o chage --expiredate date username?

    usermod -e date username, usermod --expiredate date username

  4. Proporcione dos comandos diferentes nmap para escanear todos los 65535 puertos en localhost:

    nmap -p 1-65535 localhost and nmap -p- localhost

Linux Professional Insitute Inc. Todos los derechos reservados. Visite el sitio web de Learning Materials: https://learning.lpi.org
Este trabajo está registrado bajo la Licencia Internacional Creative Commons Attribution-NonCommercial-NoDerivatives 4.0

Siguiente lección

110.3 Protección de datos mediante cifrado (110.3 Lección 1)

Leer la próxima lección

Linux Professional Insitute Inc. Todos los derechos reservados. Visite el sitio web de Learning Materials: https://learning.lpi.org
Este trabajo está registrado bajo la Licencia Internacional Creative Commons Attribution-NonCommercial-NoDerivatives 4.0

LPI es una organización sin fines de lucro.

© 2022 Linux Professional Institute (LPI) es la organización global de certificación y apoyo académico para profesionales de código abierto. Con más de 200,000 titulares de certificación, es el primer y más grande organismo de certificación no comercial del mundo para Linux y Open Source. LPI cuenta con profesionales certificados en más de 180 países, realiza exámenes en varios idiomas y tiene cientos de socios de capacitación.

Nuestro propósito es hacer que las oportunidades económicas y creativas estén disponibles para todos, haciendo que el conocimiento de código abierto y la certificación sea universalmente accesible.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Contáctenos
  • Política de privacidad y cookies

¿Detecta un error o desea ayudar a mejorar esta página? Por favor háznoslo saber.

© 1999–2022 The Linux Professional Institute Inc. Todos los derechos reservados.