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 esta lección 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
|
Aprenderá sobre |
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 propietario del grupo. 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 2
(SGID) a 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 uno o ambos conjuntos de SUID y SGID 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 exclusively
-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
|
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 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, por el bien de esta lección, 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
puede ayudarle en este sentido.
ulimit
se ocupa de los límites soft y hard — especificados por las opciones -S
y -H
, respectivamente. 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 que se puede bloquear en la memoria
-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 duros. 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 (...)
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 las máquinas (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 (%
).
Así, para que el usuario carol
pueda comprobar el estado de apache2
desde cualquier host como cualquier usuario o grupo, añadirá la siguiente línea en el fichero sudoers
:
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
directamente, simplemente debe utilizar el comando visudo
como root (por ejemplo: visudo
), que abrirá /etc/sudoers
utilizando su editor de texto predefinido. Para cambiar el editor de texto por defecto, 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 siguiente línea:
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 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 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 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