5.1 Lección 1
Certificación: |
Linux Essentials |
---|---|
Versión: |
1.6 |
Tema: |
5 Seguridad y permisos de archivos |
Objetivo: |
5.1 Seguridad básica e identificación de tipos de usuario |
Lección: |
1 de 1 |
Introducción
Este tema se centrará en la terminología básica de las cuentas, los controles de acceso y su seguridad local de los sistemas Linux; además de las herramientas que provee la interfaz de línea de comandos (CLI), en un sistema Linux para controles básicos de acceso de seguridad y los archivos básicos para admitir cuentas de usuarios y grupos, incluyendo los utilizados para escalar privilegios.
La seguridad básica en los sistemas Linux se basa en los controles de acceso de Unix, que a pesar de tener casi cincuenta años, son bastante efectivos en comparación con algunos otros sistemas operativos de un linaje mucho más nuevo. Incluso algunos sistemas operativos populares basados en Unix tienden a “tomarse libertades” que se centran en la “facilidad de acceso”, mientras que Linux no lo hace.
Los modernos entornos de escritorio en Linux simplifican la creación y administración de los usuarios, y a menudo, automatizan la asignación de controles de acceso cuando un usuario inicia sesión; esto ocurre, por ejemplo, en los permisos de acceso a la pantalla, los permisos de acceso a la configuración de audio, y los permisos de acceso a servicios de distintos órdenes. Si no fuera así, requeríría la intervención manual del administrador del sistema (algo muy engorroso). Este comportamiento "asistido" del sistema no debe hacer perder al usuario el interés por comprender los conceptos básicos que subyacen en el sistema operativo Linux en lo que a control de acceso se refiere.
Cuentas
La seguridad implica muchos conceptos, uno de los más comunes es el concepto general de controles de acceso. Antes de poder abordar los controles de acceso en los archivos (como la propiedad y los permisos) se debe comprender los conceptos básicos de las cuentas de usuario en Linux, que se dividen en varios tipos.
Cada usuario en un sistema Linux tiene una cuenta asociada que además de la información de inicio de sesión (como nombre de usuario y contraseña) también define cómo y dónde puede interactuar con el sistema. Los privilegios y los controles de acceso definen los “límites” dentro de los cuales puede operar cada usuario.
Identificadores (UIDs/GIDs)
Los User y Group Identifiers (UIDs/GIDs) son las referencias básicas y enumeradas a las cuentas. Las primeras implementaciones eran enteros limitados a 16 bits (valores de 0 a 65535), pero los sistemas del siglo XXI admiten UIDs y GIDs de 64 bits. Los usuarios y grupos se enumeran de forma independiente, por lo que el mismo ID puede representar tanto a un usuario como a un grupo.
Cada usuario tiene un UID y un GID primario. El GID primario para un usuario puede ser exclusivo de solo ese usuario y puede terminar sin ser utilizado por ningún otro. Sin embargo, este grupo también podría ser un grupo compartido por numerosos usuarios. Además de estos grupos principales, cada usuario también puede ser miembro de otros grupos.
Por defecto en los sistemas Linux,
cada usuario está asignado a un grupo
con el mismo nombre de usuario y el
mismo GID que su UID. Por ejemplo, si
crea un nuevo usuario llamado newuser
,
por defecto, su grupo predeterminado
también será newuser
.
La cuenta de superusuario
En Linux, la cuenta de superusuario
es root;
siempre tiene
el UID 0. El superusuario a veces se
denomina administrador del sistema y
tiene acceso y control ilimitados
sobre el sistema, incluidos otros
usuarios.
El grupo predeterminado para el
superusuario tiene el GID 0
y también se denomina root
.
El directorio de inicio para el
superusuario es un directorio dedicado
de nivel superior, /root
,
al que solo puede acceder el usuario root
.
Cuentas de usuario estándar (User Accounts)
Todas las cuentas que no sean root
son cuentas de usuario técnicamente
regulares, en un sistema Linux el
término coloquial user account
a menudo significa una cuenta de
usuario “regular” (sin privilegios).
Por lo general, tienen las siguientes
propiedades, con algunas excepciones:
-
El UID se asigna desde el 1000 (4 dígitos) en adelante, aunque algunos sistemas antiguos pueden comenzar en 500.
-
Posee un directorio de inicio, generalmente es un subdirectorio de
/home
. Esto puede cambiar dependiendo de la configuración local del sistema. -
Posee un Shell definido para el inicio de sesión. En Linux, el shell predeterminado suele ser Bourne Again Shell (
/bin/bash
), aunque puede haber otros disponibles.
Si una cuenta de usuario no tiene un
shell válido en sus atributos, el
usuario no podrá abrir un shell
interactivo. Usualmente /sbin/nologin
se usa como un shell inválido. Esto
puede tener un propósito, solo si el
usuario autenticará para otros
servicios que no sean la consola o el
acceso SSH, por ejemplo, solo para el
acceso Secure FTP (sftp
).
Para evitar confusiones, el término user account solo se aplicará a las cuentas de usuario estándar o regulares en adelante. Por ejemplo, system account se usará para explicar una cuenta de Linux que sea de tipo usuario del sistema.
Cuentas del sistema (System Accounts)
Las cuentas del sistema (System accounts) normalmente se crean en el momento de la instalación del sistema. Estas son para instalaciones, programas y servicios que no se ejecutarán como superusuario. En un entorno ideal, todas estas cuentas deberían ser incorporadas en el proceso de instación del sistema operativo o en el de instalación de software posterior.
Las cuentas del sistema varían, pero sus atributos incluyen:
-
Los UID suelen estar comprendidos entre 01 y 99 (2 dígitos) o entre 500 y 1000 (3 dígitos).
-
Pueden tener registrado un directorio de inicio inexistente o existente pero si existe no estará ubicado por debajo de
/home
. -
Sin shell de inicio de sesión válido (normalmente
/sbin/nologin
), con raras excepciones.
En Linux la mayoría de las cuentas del sistema nunca iniciarán sesión y tampoco necesitan un shell en sus atributos. Muchos procesos de propiedad y ejecutados por las cuentas del sistema se bifurcan en su propio entorno por la administración del sistema, ejecutándose con la cuenta del sistema especificada. Estas cuentas generalmente tienen privilegios limitados o no tienen privilegios (la mayoría de las veces).
Cuentas de servicio (Service Accounts)
Las cuentas de servicio generalmente se crean cuando los servicios se instalan y configuran. Al igual que las cuentas del sistema, son para instalaciones, programas y servicios que no se ejecutarán como superusuario.
Las cuentas de sistema y servicio son
similares y se intercambian a menudo.
Esto incluye la ubicación de los
directorios de inicio que normalmente
están fuera de /home
, si
se define en todas (las cuentas de
servicio a menudo tienen más
probabilidades de tener una ubicación,
en comparación a las cuentas del
sistema), además no hay un shell
válido de inicio de sesión. Aunque no
existe una definición estricta, la
diferencia principal entre las cuentas
de sistema y servicio reside en el
rango de UID/GID.
- Cuenta del sistema (System Account)
-
UID/GID <100 (2- dígitos) o <500-1000 (3- dígitos)
- Cuenta de servicio (Service account)
-
UID/GID >1000 (4+ dígitos). Este rango también se utiliza para las cuentas de usuario "estándar" o "regular".
Algunas distribuciones de Linux
todavía tienen cuentas de servicio
previamente reservadas con un UID
<100, y también podrían
considerarse una cuenta del sistema,
aunque no se creen en la instalación
del sistema operativo. Por ejemplo, en
las distribuciones Linux basadas en
Fedora (incluido Red Hat), el usuario
Apache del servidor web tiene un UID
(y GID) 48. Claramente es una cuenta
del sistema, a pesar de tener un
directorio de inicio (generalmente en
/usr/share/httpd
o /var/www/html/
).
Note
|
Desde el punto de vista de este documento, las cuentas del sistema son UID <1000, y las cuentas de usuario normales son UID >1000. Estos UID también pueden incluir cuentas de servicio. |
Shells de inicio de sesión y directorios de inicio
Algunas cuentas tienen un shell de
inicio de sesión, mientras que otras
no, ya que no se les permite acceso
interactivo por cuestiones de
seguridad. En la mayoría de las
distribuciones de Linux, el shell
predeterminado de inicio de sesión es
Bourne Again Shell (bash),
pero puede haber otros shells
disponibles, como C Shell (csh
),
Korn shell (ksh
) o Z
shell (zsh
).
Un usuario puede cambiar su shell de
inicio de sesión utilizando el comando
chsh
. Por defecto, el
comando se ejecuta en modo interactivo
y muestra un mensaje preguntando qué
shell debe usar. La respuesta debería
ser la ruta completa del binario de
shell, como se muestra a continuación:
$ chsh Changing the login shell for emma Enter the new value, or press ENTER for the default Login Shell [/bin/bash]: /usr/bin/zsh
También puede ejecutar el comando en
modo no interactivo, con el parámetro
-s
seguido de la ruta del
binario, algo así:
$ chsh -s /usr/bin/zsh
La mayoría de las cuentas tienen definido un directorio de inicio. En Linux, este suele ser la única ubicación donde esa cuenta de usuario tiene acceso garantizado de escritura, con algunas excepciones (por ejemplo, áreas del sistema de archivos temporales). Sin embargo, por razones de seguridad, algunas cuentas se configuran a propósito para que no tengan acceso de escritura ni siquiera a su propio directorio de inicio.
Obtenga información sobre sus usuarios
Visualizar la información básica del usuario es una práctica común en un sistema Linux. En algunos casos, se deberá cambiar de usuario y aumentar los privilegios para completar algunas tareas.
Los usuarios regulares tienen la capacidad de enumerar atributos. La información básica en un contexto limitado no es una operación privilegiada.
Listar la información actual de un
usuario en la línea de comando es tan
simple como ejecutar un comando de dos
letras, id
. La salida
variará según su ID de inicio de sesión:
$ id uid=1024(emma) gid=1024(emma) 1024(emma),20(games),groups=10240(netusers),20480(netadmin) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
En la lista anterior, el usuario (emma
)
tiene identificadores que se desglosan
de la siguiente manera:
-
1024
= ID de usuario (UID), seguido del nombre de usuario (nombre común también conocido como nombre de inicio de sesión) entre paréntesis. -
1024
= ID del grupo primario (GID), seguido del nombre de grupo (nombre común) entre paréntesis. -
Una lista de GID adicionales (nombres de grupo) a los que también pertenece el usuario.
Para visualizar la última vez que los
usuarios han iniciado sesión en el
sistema se utiliza el comando last
:
$ last emma pts/3 ::1 Fri Jun 14 04:28 still logged in reboot system boot 5.0.17-300.fc30. Fri Jun 14 04:03 still running reboot system boot 5.0.17-300.fc30. Wed Jun 5 14:32 - 15:19 (00:46) reboot system boot 5.0.17-300.fc30. Sat May 25 18:27 - 19:11 (00:43) reboot system boot 5.0.16-100.fc28. Sat May 25 16:44 - 17:06 (00:21) reboot system boot 5.0.9-100.fc28.x Sun May 12 14:32 - 14:46 (00:14) root tty2 Fri May 10 21:55 - 21:55 (00:00) ...
La información que figura en las columnas puede variar, pero algunas entradas notables en el listado anterior son:
-
En la primera línea observamos que el usuario
emma
inició sesión en el terminal TTYpts/3
(se suelen activar hasta cinco terminales virtuales de tipo caracter) y todavía está conectado. -
En la segunda línea observamos que el sistema se inició a las 04:03 del día 14 de junio y aun sigue corriendo (el kernel del sistema es la versión 5.0.17)
-
El superusuario (
root
) inició sesión a través de el terminal virtual TTYtty2
, a mediados de mayo.
Una variante de last
es
el comando lastb
, que
enumera todos los últimos intentos de
inicio de sesión incorrectos.
Los comandos who
y w
enumeran solo los inicios de sesión
activos en el sistema:
$ who emma pts/3 2019-06-14 04:28 (::1) $ w 05:43:41 up 1:40, 1 user, load average: 0.25, 0.53, 0.51 USER TTY LOGIN@ IDLE JCPU PCPU WHAT emma pts/3 04:28 1:14m 0.04s 0.04s -bash
Ambos comandos enumeran parte de la
misma información. Por ejemplo, el
usuario (emma
) ha iniciado
sesión en el termina virtual TTY (pts/3
).
La hora de inicio de sesión fue a las
04:28.
El comando w
muestra más
información, incluida la siguiente:
-
La hora actual y cuánto tiempo ha estado funcionando el sistema
-
Cuántos usuarios están conectados
-
Los promedios de carga (load averages) de los últimos 1, 5 y 15 minutos
Y la información adicional para cada sesión de un usuario activo.
- Tiempos totales de utilización de la
CPU (
IDLE
,JCPU
yPCPU
). -
El proceso actual (
-bash
). El tiempo total de utilización de la CPU de ese proceso es el último elemento (PCPU
).
Ambos comandos tienen más opciones para enumerar información adicional.
Cambio de usuarios y aumento de privilegios
En un entorno ideal, los usuarios nunca
necesitarían escalar privilegios para
completar sus tareas. El sistema
"simplemente funcionará" y todo estaría
configurado para accesos de varios
usuarios. Funciona así para la mayoría
de los usuarios que no son
administradores del sistema, a pesar de
seguir siempre un modelo de seguridad de
privilegios mínimos para ellos.
Sin embargo, hay comandos que permiten
escalar de privilegios cuando es
necesario. Dos de los más importantes
son su
y sudo
.
En la mayoría de los sistemas Linux
actuales, el comando su
solo se usa para escalar privilegios a
root, que es el usuario predeterminado
si no se especifica un nombre de usuario
después del nombre del comando. Si bien
se puede usar para cambiar a otro
usuario, no es una buena práctica: los
usuarios deben iniciar sesión desde otro
sistema, a través de la red, consola
física o terminal en el sistema.
emma ~$ su - Password: root ~#
Después de ingresar la contraseña de
superusuario (root
), el
usuario tiene un shell de superusuario
(observe el #
al final del
símbolo del sistema) y es el que por
defecto se reserva para este símbolo
para el prompt del superusuario (root
).
$
) indica
en la línea de comandos un shell de usuario
no privilegiado, mientras que el símbolo de
almohadilla (#
) indica en la
línea de comandos un shell de superusuario (root
).
Se recomienda encarecidamente que el
carácter final de cualquier aviso nunca
se cambie de este estándar de "comprensión
universal", ya que esta nomenclatura se
utiliza en materiales de aprendizaje,
incluidos estos.
Warning
|
Nunca cambie al superusuario
( |
¿Cuál es el mayor problema con el uso
de su
para cambiar al
superusuario (root
)? Si la
sesión de un usuario normal se ha visto
comprometida, se podría capturar la
contraseña de superusuario (root
).
Ahí es donde entra en juego el “Switch
User Do’' (o "`Superuser Do”):
$ cat /sys/devices/virtual/dmi/id/board_serial cat: /sys/devices/virtual/dmi/id/board_serial: Permission denied $ sudo cat /sys/devices/virtual/dmi/id/board_serial [sudo] password for emma: /6789ABC/
En la lista anterior, el usuario está intentando buscar el número de serie de su placa del sistema. Sin embargo, el permiso es denegado, ya que esa información está marcada como privilegiada.
Sin embargo, al usar sudo
,
el usuario ingresa su propia contraseña
para autenticar quién es. Si ha sido
autorizado en la configuración de /etc/sudoers
para ejecutar ese comando con
privilegio, con las opciones permitidas,
funcionará.
Tip
|
Por defecto, el primer
comando |
Archivos de control de acceso
Casi todos los sistemas operativos
tienen un conjunto de ubicaciones
utilizados para almacenar controles de
acceso. En Linux, estos son típicamente
archivos de texto ubicados en el
directorio /etc
, que es
donde deben almacenarse los archivos de
configuración del sistema. Por defecto,
todos los usuarios del sistema pueden
leer este directorio, pero solo root
puede escribirlo.
Los archivos principales relacionados con cuentas de usuario, atributos y control de acceso son:
/etc/passwd
-
Este archivo almacena información básica sobre los usuarios en el sistema, incluyendo UID y GID, directorio de inicio, tipo de shell, etc. A pesar del nombre, aquí no se almacenan contraseñas.
/etc/group
-
Este archivo almacena información básica sobre todos los grupos de usuarios en el sistema, como el nombre del grupo, GID y sus miembros.
/etc/shadow
-
Aquí es donde se almacenan las contraseñas de los usuarios. Por seguridad son hash.
/etc/gshadow
-
Este archivo almacena información más detallada sobre los grupos, incluida una contraseña cifrada que permite a los usuarios convertirse temporalmente en un miembro del grupo. En una lista de usuarios puede convertirse en un miembro de inclusive una lista de administradores.
Warning
|
Estos archivos nunca deben
editarse directamente. |
Por defecto, cada usuario puede
ingresar a /etc
y leer los
archivos /etc/passwd
y /etc/group
.
También de manera predeterminada, ningún
usuario, excepto root
,
puede leer los archivos /etc/shadow
o /etc/gshadow
.
También hay archivos relacionados con
la escalada de privilegios básicos en
sistemas Linux, como en los comandos su
y sudo
. Por defecto, estos
solo son accesibles por el usuario root
.
/etc/sudoers
-
Este archivo controla quién puede y cómo usar el comando
sudo
. /etc/sudoers.d
-
Este directorio puede contener archivos que complementan la configuración del archivo
sudoers
.
Warning
|
Aunque |
/etc/passwd
El archivo /etc/passwd
se conoce comúnmente como el "archivo
de contraseña". Cada línea contiene
múltiples campos delimitados por dos
puntos (:
). A pesar del
nombre, actualmente el hash real de
contraseña no se almacena en este
archivo.
La sintaxis típica de una línea en este archivo es la siguiente:
USERNAME:PASSWORD:UID:GID:GECOS:HOMEDIR:SHELL
Donde:
USERNAME
-
El nombre de usuario conocido como login (nombre), como
root
,nobody
,emma
. PASSWORD
-
Ubicación heredada del hash de contraseña. Casi siempre
x
, lo que indica que la contraseña está almacenada en el archivo/etc/shadow
. UID
-
El ID del usuario (UID), como
0
,99
,1024
. GID
-
El ID del grupo (GID), como
0
,99
,1024
. GECOS
-
Una lista CSV de información del usuario que incluye nombre, ubicación, número de teléfono. Por ejemplo:
Emma Smith, 42 Douglas St, 555.555.5555
. HOMEDIR
-
Ruta del directorio de inicio del usuario, como
/root
,/home/emma
, etc. SHELL
-
El shell predeterminado para esta usuario, como
/bin/bash
,/sbin/nologin
,/bin/ksh
, etc.
Por ejemplo, la siguiente línea
describe al usuario emma
:
emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555:/home/emma:/bin/bash
Comprendiendo el campo GECOS
El campo GECOS contiene tres (3) o
más campos delimitados por una coma
(,
), también conocida
como una lista de valores
separados por comas (CSV).
Aunque no existe un estándar
obligatorio, los campos suelen estar
en el siguiente orden:
NAME,LOCATION,CONTACT
Donde:
NAME
-
Es el “Nombre completo” (“Full Name”) del usuario o el “Nombre del software” (“Software Name”) en el caso de una cuenta de servicio.
LOCATION
-
Suele ser la ubicación física del usuario dentro de un edificio, número de habitación, el departamento de contacto o persona en el caso de una cuenta de servicio.
CONTACT
-
Enumera información de contacto, como el número de teléfono del hogar o del trabajo.
Los campos adicionales pueden
incluir información de contacto
adicional, como un número de casa o
una dirección de correo electrónico.
Para cambiar la información en el
campo GECOS, use el comando chfn
y responda las preguntas, como se
verá en el siguiente ejemplo. Si no
se proporciona un nombre de usuario
después del nombre del comando,
cambiará la información para el
usuario actual:
$ chfn Changing the user information for emma Enter the new value, or press ENTER for the default Full Name: Emma Smith Room Number []: 42 Work Phone []: 555.555.5555 Home Phone []: 555.555.6666
/etc/group
El archivo /etc/group
contiene campos siempre delimitados
por dos puntos (:
) que
almacenan información básica sobre los
grupos en el sistema. A veces se le
llama “archivo de grupo”. La sintaxis
para cada línea es:
NAME:PASSWORD:GID:MEMBERS
Donde:
NAME
-
Es el nombre del grupo, como
root
,users
,emma
, etc. PASSWORD
-
Ubicación heredada de un hash de contraseña de un grupo opcional. Casi siempre
x
, lo que indica que la contraseña (si está definida) y se almacena en el archivo/etc/gshadow
. GID
-
El ID del grupo (GID), como
0
,99
,1024
. MEMBERS
-
Una lista de nombres de usuario separados por comas que son miembros del grupo, como
jsmith,emma
.
El siguiente ejemplo muestra una
línea que contiene información sobre
el grupo students
:
students:x:1023:jsmith,emma
No es necesario que el usuario aparezca en el campo de miembros cuando el grupo es el primario para un usuario. Si un usuario está en la lista, entonces es redundante, es decir, no hay cambio en la funcionalidad, listada o no.
Note
|
El hash de la contraseña se
grupos se almacena en el
archivo |
/etc/shadow
La siguiente tabla enumera los
atributos almacenados en el archivo /etc/shadow
,
comúnmente conocido como el “shadow
file”. El archivo contiene campos
siempre delimitados por dos puntos (:
).La
sintaxis básica para una línea en este
archivo es:
USERNAME:PASSWORD:LASTCHANGE:MINAGE:MAXAGE:WARN:INACTIVE:EXPDATE
Donde:
USERNAME
-
El nombre de usuario (igual que
/etc/passwd
), comoroot
,nobody
,emma
. PASSWORD
-
Un hash unidireccional de la contraseña, precedido por un “salt”. Por ejemplo:
!!
,!$1$01234567$ABC…
,$6$012345789ABCDEF$012…
. LASTCHANGE
-
El día que se hizo el último cambio de contaseña expresado en número de días desde el 1 de enero de 1970
MINAGE
-
Minimo de días antes que al usuario se le permite cambiar la contraseña..
MAXAGE
-
Máximo número de días que al usuario puede mantener la contraseña. Después de superar este límite está obligado a cambiarla.
WARN
-
Período de advertencia (en días) antes de que caduque la contraseña según
MAXAGE
INACTIVE
-
Antigüedad máxima (en días) de la contraseña después del vencimiento.
EXPDATE
-
Fecha de caducidad de la contraseña (en número de días desde el 1 de enero de 1970).
En el siguiente ejemplo, puede ver
una entrada de muestra del archivo /etc/shadow
.
Tenga en cuenta que algunos valores,
como INACTIVE
y EXPDATE
no están definidos.
emma:$6$nP532JDDogQYZF8I$bjFNh9eT1xpb9/n6pmjlIwgu7hGjH/eytSdttbmVv0MlyTMFgBIXESFNUmTo9EGxxH1OT1HGQzR0so4n1npbE0:18064:0:99999:7:::
La “época” de un sistema POSIX es la
medianoche (0000), hora universal
coordinada (UTC), el jueves 1 de enero
de 1970. La mayoría de las fechas y
horas POSIX están en segundos desde
“época” o en el caso del archivo /etc/shadow
,
en días desde la “época”.
Note
|
El archivo shadow está diseñado para que solo el superusuario pueda leerlo. El superusuario selecciona los servicios de autenticación del sistema que verifican el hash de contraseña unidireccional al iniciar sesión o al producirse otro tipo de autentificación (por ejemplo acceso con desde uncliente sftp). |
Aunque existen diferentes soluciones de autenticación, el método elemental de almacenamiento de contraseñas es la función hash unidireccional. Esto se hace para que la contraseña nunca se almacene en texto sin cifrar en un sistema, ya que la función de hash no es reversible. Puede convertir una contraseña en un hash, pero (idealmente) no es posible volver a convertir un hash en una contraseña.
Como máximo, se requiere un método de fuerza bruta para trocear todas las combinaciones de una contraseña, hasta que coincida. Para mitigar el problema de que un hash de contraseña sea descifrado en un sistema, los sistemas Linux usan un “salt” aleatoria en cada hash de contraseña para un usuario. Por lo tanto, el hash para una contraseña de usuario en un sistema Linux generalmente no será el mismo que en otro sistema Linux, incluso si la contraseña es la misma.
En el archivo /etc/shadow
,
la contraseña puede tomar varias
formas:
!!
-
Esto significa una cuenta “deshabilitada” (sin posible autenticación) y sin una contraseña hash almacenada.
!$1$01234567$ABC…
-
Una cuenta “deshabilitada” (debido al signo de exclamación inicial), con una función hash anterior, hash salt y cadena hash almacenada.
$1$0123456789ABC$012…
-
Una cuenta “habilitada”, con una función hash, hash salt y cadena de hash almacenados.
La función hash, hash salt y la
cadena hash están precedidas y
delimitadas por un símbolo de dólar ($
).
La longitud del hash salt debe ser de
entre ocho y dieciséis (8-16)
caracteres. Ejemplos de los tres más
comunes son los siguientes:
$1$01234567$ABC…
-
Una función hash de MD5 (
1
), con un ejemplo de longitud hash de ocho. $5$01234567ABCD$012…
-
Una función hash de SHA256 (
5
), con un ejemplo de longitud hash de doce. $6$01234567ABCD$012…
-
Una función hash de SHA512 (
6
), con un ejemplo de longitud hash de doce.
Note
|
La función hash MD5 se considera criptográficamente insegura con el nivel actual de ASIC (2010s y posteriores) e incluso frente al rendimiento de SIMD de computación general, por ejemplo, los Estándares Federales de Procesamiento de Información (FIPS) de USA no permiten el uso de MD5 para ninguna función criptográfica, solo aspectos muy limitados de la validación, pero no la integridad de las firmas digitales o propósitos similares. |
Ejercicios guiados
-
Considere la siguiente salida del comando
id
:$ id emma uid=1000(emma) gid=1000(emma) groups=1000(emma),4(adm),5(tty),10(uucp),20(dialout),27(sudo),46(plugdev)
¿En qué archivos se almacenan los siguientes atributos?
UID y GID
Grupos
-
Además, ¿en qué archivo se almacena la contraseña del usuario?
-
-
¿Cuál de los siguientes tipos de criptografía se usa de manera predeterminada para almacenar contraseñas localmente en un sistema Linux?
-
Asymmetric
-
One-way Hash
-
Symmetric
-
ROT13
-
-
Si una cuenta tiene un ID de usuario (UID) enumerada bajo 1000, ¿Qué tipo de cuenta es esta?
-
¿Cómo puede obtener una lista de los inicios de sesión activos en su sistema y también un recuento de ellos?
-
Usando el comando
grep
, obtuvimos el resultado siguiente con la información sobre el usuarioemma
.$ grep emma /etc/passwd emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555,:/home/emma:/bin/ksh
Complete los espacios en blanco del gráfico con la información apropiada usando la salida del comando anterior.
Username
Password
UID
Primary GID
GECOS
Home Directory
Shell
Ejercicios exploratorios
-
Compare los resultados de
last
conw
ywho
. ¿Qué detalles faltan a cada uno de los comandos ?
-
Ejecute los siguientes comandos:
who
yw -his
.-
¿Qué información se ha eliminado de la salida del comando
w
con las opciones “no header” (-h
) y “short” (-s
)?
-
¿Qué información se ha agregado en la salida del comando
w
con la opción “ip address” (-i
)?
-
-
¿Cúal archivo es el que almacena el hash de contraseña unidireccional de una cuenta de usuario?
-
¿Qué archivo contiene la lista de grupos de los que es miembro una cuenta de usuario? ¿Qué lógica podría usarse para compilar una lista de grupos de los que es miembro una cuenta de usuario?
-
Por defecto uno o más de los siguientes archivos no son legibles por usuarios normales y sin privilegios. ¿Cuáles son?
-
/etc/group
-
/etc/passwd
-
/etc/shadow
-
/etc/sudoers
-
-
¿Cómo puede cambiar el shell de inicio de sesión del usuario actual al Korn Shell (
/usr/bin/ksh
) en modo no interactivo?
-
¿Por qué el directorio de inicio del usuario
root
no está ubicado dentro del directorio/home
?
Resumen
En esta lección hemos descubierto las bases de datos de usuarios y grupos de Linux. Hemos aprendido las propiedades más importantes de los usuarios y grupos, incluidos sus nombres y sus ID numéricos. También hemos investigado cómo funciona el hashing de contraseñas en Linux y cómo se asignan los usuarios a los grupos.
Toda esta información se almacena en los siguientes cuatro archivos, que proporcionan los controles de acceso de seguridad local más básicos en un sistema Linux:
/etc/passwd
-
Todos los atributos POSIX de una cuenta de usuario local del sistema, que no sean hash de contraseña, Es legibles por todos.
/etc/group
-
Todos los atributos POSIX de la cuenta de grupo local del sistema. Es legibles por todos.
/etc/shadow
-
Todos los hash de contraseña de usuario local del sistema (e información de caducidad). Es ilegibles por cualquier (solo procesos seleccionados).
/etc/sudoers
-
Toda la información/asignación de privilegio local del sistema por el comando
sudo
.
Los siguientes comandos se discutieron en esta lección:
id
-
Enumera los ID de usuario y grupo reales (o efectivas)
last
-
Lista de usuarios que iniciaron sesión por última vez.
who
-
Lista de usuarios que actualmente están conectados.
w
-
Similar a
who
pero con contexto adicional. su
-
Cambie a otro usuario con un shell de inicio de sesión o ejecute comandos como ese usuario pasando la contraseña del mismo.
sudo
-
Cambia el usuario (o superusuario) si tiene los permisos. El usuario actual ingresa su propia contraseña (si es necesario) para aumentar el privilegio.
chsh
-
Cambiar el shell de un usuario.
chfn
-
Cambia la información del usuario en el campo GECOS.
Respuestas a los ejercicios guiados
-
Considere la siguiente salida del comando
id
:$ id emma uid=1000(emma) gid=1000(emma) groups=1000(emma),4(adm),5(tty),10(uucp),20(dialout),27(sudo),46(plugdev)
¿En qué archivos se almacenan los siguientes atributos?
UID y GID
/etc/passwd
Groups
/etc/group
-
Además, ¿en qué archivo se almacena la contraseña del usuario?
La contraseña de usuario hash se almacena en
/etc/shadow
.
-
-
¿Cuál de los siguientes tipos de criptografía se usa de manera predeterminada para almacenar contraseñas localmente en un sistema Linux?
Por defecto, se utiliza un hash unidireccional para almacenar contraseñas.
-
Si una cuenta tiene un ID de usuario (UID) enumerada bajo 1000. ¿Qué tipo de cuenta es esta?
Las cuentas con un UID inferior a 1000 generalmente son cuentas del sistema.
-
¿Cómo puede obtener una lista de los inicios de sesión activos en su sistema y también un recuento de ellos?
Use el comando
w
. Además de una lista de todos los inicios de sesión activos, también mostrará información como cuántos usuarios han iniciado sesión, junto con la carga del sistema y el tiempo de actividad. -
Usando el comando
grep
, obtuvimos el resultado siguiente con la información sobre el usuarioemma
.$ grep emma /etc/passwd emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555,:/home/emma:/bin/ksh
Complete los espacios en blanco del gráfico con la información apropiada usando la salida del comando anterior.
Username
emma
Password
x
- should always bex
for a valid, active user loginUID
1000
Primary GID
1000
GECOS
Emma Smith,42 Douglas St,555.555.5555
Home Directory
/home/emma
Shell
/bin/ksh
Respuestas a los ejercicios exploratorios
-
Compare los resultados de
last
conw
ywho
. ¿Qué detalles faltan a cada uno de los comandos ?Las herramientas
w
ywho
solo enumeran los usuarios actuales que han iniciado sesión en el sistema, mientras quelast
también enumera los usuarios que se han desconectado. El comandow
enumera la utilización del sistema, mientras quewho
no lo hace. -
Ejecute los siguientes comandos:
who
yw -his
.-
¿Qué información se ha eliminado de la salida del comando
w
con las opciones “no header” (-h
) y “short” (-s
)?El encabezado no se imprime, lo cual es útil para el análisis, el tiempo de inicio de sesión y la información de la CPU seleccionada no se enumere.
-
¿Qué información se ha agregado en la salida del comando
w
con la opción “ip address” (-i
)?Esto imprime la dirección IP, en lugar de intentar la resolución DNS, imprime el nombre de host. Esta opción para
w
coincide mejor con la salida predeterminada del comandolast
.¿Cúal archivo es el que almacena el hash de contraseña unidireccional de una cuenta de usuario?
El archivo
/etc/shadow
almacena el hash de contraseña unidireccional de una cuenta de usuario, ya que no es legible por una cuenta de usuario normal y sin privilegios a diferencia del archivo/etc/passwd
.
-
-
¿Qué archivo contiene la lista de grupos de los que es miembro una cuenta de usuario? ¿Qué lógica podría usarse para compilar una lista de grupos de los que es miembro una cuenta de usuario?
El archivo
/etc/group
tiene una lista CSV de nombres de usuario en el último campo, “members”, de cualquier línea para un grupo.Cualquier línea en el archivo
/etc/group
donde el usuario aparece en el campo final, “members”, significaría que el usuario es miembro de ese grupo, suponiendo que esté formateado correctamente (delimitado por CSV). Además, la membresía del grupo principal del usuario en el archivo/etc/passwd
también tendrá una entrada coincidente en el archivo/etc/group
tanto para el nombre del grupo como para el GID. -
Por defecto uno o más de los siguientes archivos no son legibles por usuarios normales y sin privilegios. ¿Cuáles son?
-
/etc/group
-
/etc/passwd
-
/etc/shadow
-
/etc/sudoers
Los archivos
/etc/shadow
y/etc/sudoers
no se pueden leer de forma predeterminada, excepto por los servicios seleccionados o el superusuario. Estas respuestas serán personalizadas en función de los sistemas y nombres de usuario utilizados en el laboratorio.
-
-
¿Cómo puede cambiar el shell de inicio de sesión del usuario actual al Korn Shell (
/usr/bin/ksh
) en modo no interactivo?$ chsh -s /usr/bin/ksh
-
¿Por qué el directorio de inicio del usuario
root
no está ubicado dentro del directorio/home
?Debido a que la cuenta
root
es necesaria para solucionar problemas y corregir errores, que pueden incluir problemas del sistema de archivos relacionados con el directorio/home
. En tales casos,root
debería ser completamente funcional incluso cuando el sistema de archivos/home
aún no esté disponible.