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 |
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 sonL
para una contraseña bloqueada yNP
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
ousermod --lock carol
. - Desbloquear la
contraseña del usuario
carol
-
usermod -U carol
ousermod --unlock carol
.
Note
|
Con las opciones |
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 de0
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 de99999
. -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 de0
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 queusermod -f
ousermod --inactive
. Una vez que haya pasado ese número de días, la cuenta se bloqueará. Sin embargo, con un valor de0
, 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 |
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 |
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 |
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
|
|
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.*
onmap 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
|
|
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 |
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:
-
El usuario
carol
en la terminalpts/0
desde el host192.168.1.4
inició su sesión elsábado 6 de junio
a las14:25
y todavía estáconectada
. El sistema, que utiliza el kernel4.19.0-9-amd64
, se inició (reboot system boot
) elsábado 6 de junio
a las14:24
y sigue funcionando. -
El usuario
mimi
en la terminalpts/0
desde el host192.168.1.4
inició su sesión elsábado 6 de junio
a las12:07
y cerró la sesión a las14:24
(la sesión duró un total de(02:16)
horas). El sistema que utiliza el kernel4.19.0-9-amd64
, se inició (reboot system boot
) elsábado 6 de junio
a las12:07
y se apagó a las14:24
(estuvo funcionando durante(02:17)
horas).
Note
|
La línea |
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 |
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/*
.
-
sudo
le permite ejecutar comandos individuales con privilegios elevados en lugar de lanzar un nuevo subshell para root como hacesu
.
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
|
|
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 |
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 |
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 hostSERVERS
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 usuarioADMINS
- por ejemplo - incluye al usuariocarol
, los miembros del gruposudo
y aquellos miembros del alias de usuarioPRIVILEGE_USERS
que no pertenecen al alias de usuarioREGULAR_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 |
Ejercicios guiados
-
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
-
La visualización de archivos con sólo el bit
SUID
oSGID
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 elSGID
en/usr/bin
:
-
-
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 usuariomary
: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.
-
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 puerto22
usandolsof
.
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
al443
en el host192.168.1.55
usandonmap
.
-
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é?
-
-
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é?
-
-
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
-
Además del
SUID
y elSGID
, 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
:
-
-
Cuando la contraseña de un usuario está bloqueada mediante
passwd -l nombre
ousermod -L nombre
, ¿cómo se puede saber mirando en/etc/shadow
?
-
¿Cuál es la contraparte del comando
usermod
achage -E date username
ochage --expiredate date username
?
-
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
ySGID
. -
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
-
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
-
La visualización de archivos con sólo el bit
SUID
oSGID
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
orfind /usr/bin -perm -u+s
-
Busque todos los archivos con el
SGID
(y otros permisos) establecidos en/usr/bin
:find /usr/bin -perm -2000
orfind /usr/bin -perm -g+s
-
Encuentre todos los archivos con el
SUID
o elSGID
en/usr/bin
:find /usr/bin -perm /6000
-
-
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 usuariomary
: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
-
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 puerto22
usandolsof
.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
al443
en el host192.168.1.55
usandonmap
.nmap -p 80-443 192.168.1.55
-
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.
-
-
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).
-
-
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 deADMINS
; los únicos usuarios (aparte decarol
, miembros del gruposudo
yroot
) que pueden ejecutarsystemctl status apache2
en losSERVERS
.
Respuestas a los ejercicios de exploración
-
Además del
SUID
y elSGID
, 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
-
-
Cuando la contraseña de un usuario está bloqueada mediante
passwd -l nombre
ousermod -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…
). -
¿Cuál es la contraparte del comando
usermod
achage -E date username
ochage --expiredate date username
?usermod -e date username
,usermod --expiredate date username
-
Proporcione dos comandos diferentes
nmap
para escanear todos los 65535 puertos en localhost:nmap -p 1-65535 localhost
andnmap -p- localhost