Gestión de usuarios y grupos, permisos y atributos de archivos y habilitación del acceso sudo en cuentas - Parte 8


En agosto pasado, la Fundación Linux inició la certificación LFCS (Linux Foundation Certified Sysadmin), un nuevo programa cuyo propósito es permitir que las personas en todas partes y en cualquier lugar tomen un examen para obtener la certificación en soporte operativo básico a intermedio para sistemas Linux, que incluye soporte de sistemas y servicios en ejecución, junto con monitoreo y análisis generales, además de toma de decisiones inteligente para poder decidir cuándo es necesario escalar problemas a equipos de soporte de nivel superior.

Eche un vistazo rápido al siguiente video que describe una introducción al Programa de Certificación de la Fundación Linux.

Este artículo es la Parte 8 de una serie larga de 10 tutoriales, aquí en esta sección, lo guiaremos sobre cómo administrar los permisos de usuarios y grupos en el sistema Linux, que son necesarios para el examen de certificación LFCS.

Dado que Linux es un sistema operativo multiusuario (en el sentido de que permite que varios usuarios en diferentes computadoras o terminales accedan a un solo sistema), necesitará saber cómo realizar una administración de usuarios efectiva: cómo agregar, editar, suspender o eliminar cuentas de usuario, además de otorgarles los permisos necesarios para realizar las tareas asignadas.

Agregar cuentas de usuario

Para agregar una nueva cuenta de usuario, puede ejecutar cualquiera de los dos comandos siguientes como root.

# adduser [new_account]
# useradd [new_account]

Cuando se agrega una nueva cuenta de usuario al sistema, se realizan las siguientes operaciones.

1. Se crea su directorio personal (/home/username por defecto).

2. Los siguientes archivos ocultos se copian en el directorio de inicio del usuario y se utilizarán para proporcionar variables de entorno para su sesión de usuario.

.bash_logout
.bash_profile
.bashrc

3. Se crea una cola de correo para el usuario en/var/spool/mail/ nombre de usuario .

4. Se crea un grupo y se le da el mismo nombre que la nueva cuenta de usuario.

La información completa de la cuenta se almacena en el archivo /etc/passwd . Este archivo contiene un registro por cuenta de usuario del sistema y tiene el siguiente formato (los campos están delimitados por dos puntos).

[username]:[x]:[UID]:[GID]:[Comment]:[Home directory]:[Default shell]

  1. Los campos [nombre de usuario] y [Comentario] se explican por sí mismos.
  2. La x en el segundo campo indica que la cuenta está protegida por una contraseña oculta (en /etc/shadow ), que es necesaria para iniciar sesión como [nombre de usuario] .
  3. Los campos [UID] y [GID] son números enteros que representan la identificación de usuario y la identificación de grupo principal al que [nombre de usuario] pertenece, respectivamente.
  4. El [directorio de inicio] indica la ruta absoluta al directorio de inicio de [nombre de usuario] , y
  5. El [shell predeterminado] es el shell que estará disponible para este usuario cuando inicie sesión en el sistema.

La información del grupo se almacena en el archivo /etc/group . Cada registro tiene el siguiente formato.

[Group name]:[Group password]:[GID]:[Group members]

  1. [Nombre del grupo] es el nombre del grupo.
  2. Una x en [Contraseña de grupo] indica que no se están utilizando contraseñas de grupo.
  3. [GID] : igual que en/etc/passwd.
  4. [Miembros del grupo] : una lista separada por comas de los usuarios que son miembros de [Nombre del grupo] .

Después de agregar una cuenta, puede editar la siguiente información (para nombrar algunos campos) usando el comando usermod , cuya sintaxis básica de usermod es la siguiente.

# usermod [options] [username]

Utilice la marca –expiredate seguida de una fecha en formato AAAA-MM-DD .

# usermod --expiredate 2014-10-30 tecmint

Utilice las opciones combinadas -aG o –anexar –grupos , seguidas de una lista de grupos separados por comas.

# usermod --append --groups root,users tecmint

Utilice las opciones -d o –home , seguidas de la ruta absoluta al nuevo directorio de inicio.

# usermod --home /tmp tecmint

Utilice –shell , seguido de la ruta al nuevo shell.

# usermod --shell /bin/sh tecmint
# groups tecmint
# id tecmint

Ahora, ejecutemos todos los comandos anteriores de una vez.

# usermod --expiredate 2014-10-30 --append --groups root,users --home /tmp --shell /bin/sh tecmint

En el ejemplo anterior, configuraremos la fecha de vencimiento de la cuenta de usuario de tecmint al 30 de octubre de 2014. También agregaremos la cuenta al grupo raíz y de usuarios. Finalmente, configuraremos sh como su shell predeterminado y cambiaremos la ubicación del directorio de inicio a/tmp:

Leer también :

  1. 15 ejemplos de comandos useradd en Linux
  2. 15 ejemplos de comandos de usermod en Linux

Para las cuentas existentes, también podemos hacer lo siguiente.

Utilice la opción -L (L mayúscula) o la opción –bloquear para bloquear la contraseña de un usuario.

# usermod --lock tecmint

Utilice la opción –u o –unlock para desbloquear la contraseña de un usuario que se bloqueó anteriormente.

# usermod --unlock tecmint

Ejecute la siguiente serie de comandos para lograr el objetivo.

# groupadd common_group # Add a new group
# chown :common_group common.txt # Change the group owner of common.txt to common_group
# usermod -aG common_group user1 # Add user1 to common_group
# usermod -aG common_group user2 # Add user2 to common_group
# usermod -aG common_group user3 # Add user3 to common_group

Puede eliminar un grupo con el siguiente comando.

# groupdel [group_name]

Si hay archivos propiedad de nombre_grupo , no se eliminarán, pero el propietario del grupo se establecerá en el GID del grupo que se eliminó.

Permisos de archivos de Linux

Además de los permisos básicos de lectura, escritura y ejecución que discutimos en Herramientas de archivo y configuración de atributos de archivo - Parte 3 de esta serie, existen otras configuraciones de permisos menos utilizadas (pero no menos importantes), a veces denominadas " especiales permisos ”.

Al igual que los permisos básicos discutidos anteriormente, se establecen mediante un archivo octal o mediante una letra (notación simbólica) que indica el tipo de permiso.

Puede eliminar una cuenta (junto con su directorio de inicio, si es propiedad del usuario, y todos los archivos que residen en ella, y también la cola de correo) usando el comando userdel con el –remove opción.

# userdel --remove [username]

Cada vez que se agrega una nueva cuenta de usuario al sistema, se crea un grupo con el mismo nombre con el nombre de usuario como único miembro. Se pueden agregar otros usuarios al grupo más tarde. Uno de los propósitos de los grupos es implementar un control de acceso simple a archivos y otros recursos del sistema estableciendo los permisos correctos en esos recursos.

Por ejemplo, suponga que tiene los siguientes usuarios.

  1. usuario1 (grupo principal: usuario1)
  2. usuario2 (grupo principal: usuario2)
  3. usuario3 (grupo principal: usuario3)

Todos ellos necesitan acceso de lectura y escritura a un archivo llamado common.txt ubicado en algún lugar de su sistema local, o tal vez en un recurso compartido de red que usuario1 ha creado. Puede tener la tentación de hacer algo como,

# chmod 660 common.txt
OR
# chmod u=rw,g=rw,o= common.txt [notice the space between the last equal sign and the file name]

Sin embargo, esto solo proporcionará acceso de lectura y escritura al propietario del archivo y a aquellos usuarios que son miembros del grupo propietario del archivo ( usuario1 en este caso). Nuevamente, puede tener la tentación de agregar usuario2 y usuario3 al grupo usuario1 , pero eso también les dará acceso al resto de los archivos que posee. por usuario usuario1 y grupo usuario1 .

Aquí es donde los grupos son útiles y esto es lo que debe hacer en un caso como este.

Cuando se aplica el permiso setuid a un archivo ejecutable, un usuario que ejecuta el programa hereda los privilegios efectivos del propietario del programa. Dado que este enfoque puede plantear razonablemente problemas de seguridad, la cantidad de archivos con permiso setuid debe mantenerse al mínimo. Es probable que encuentre programas con este conjunto de permisos cuando un usuario del sistema necesite acceder a un archivo propiedad de root.

En resumen, no se trata solo de que el usuario pueda ejecutar el archivo binario, sino también de que puede hacerlo con los privilegios de root. Por ejemplo, verifiquemos los permisos de /bin/passwd . Este binario se utiliza para cambiar la contraseña de una cuenta y modifica el archivo /etc/shadow . El superusuario puede cambiar la contraseña de cualquier persona, pero todos los demás usuarios solo deberían poder cambiar la suya propia.

Por lo tanto, cualquier usuario debe tener permiso para ejecutar /bin/passwd , pero solo el root podrá especificar una cuenta. Otros usuarios solo pueden cambiar sus contraseñas correspondientes.

Cuando se establece el bit setgid , el GID efectivo del usuario real se convierte en el del propietario del grupo. Por lo tanto, cualquier usuario puede acceder a un archivo con los privilegios otorgados al propietario del grupo de dicho archivo. Además, cuando el bit setgid se establece en un directorio, los archivos recién creados heredan el mismo grupo que el directorio, y los subdirectorios recién creados también heredarán el bit setgid del directorio principal. Lo más probable es que utilice este enfoque siempre que los miembros de un determinado grupo necesiten acceder a todos los archivos de un directorio, independientemente del grupo principal del propietario del archivo.

# chmod g+s [filename]

Para configurar setgid en forma octal, anteponga el número 2 a los permisos básicos actuales (o deseados).

# chmod 2755 [directory]

Cuando el " bit pegajoso " se establece en los archivos, Linux simplemente lo ignora, mientras que para los directorios tiene el efecto de evitar que los usuarios eliminen o incluso cambien el nombre de los archivos que contiene, a menos que el usuario sea el propietario del directorio, el archivo, o es root.

# chmod o+t [directory]

Para configurar el bit adhesivo en forma octal, anteponga el número 1 a los permisos básicos actuales (o deseados).

# chmod 1755 [directory]

Sin el bit pegajoso, cualquiera que pueda escribir en el directorio puede eliminar o cambiar el nombre de los archivos. Por esa razón, el bit pegajoso se encuentra comúnmente en directorios, como /tmp , que se pueden escribir en todo el mundo.

Atributos especiales de archivos de Linux

Hay otros atributos que permiten límites adicionales a las operaciones permitidas en los archivos. Por ejemplo, evite que se cambie el nombre del archivo, se mueva, se elimine o incluso se modifique. Se configuran con el comando chattr y se pueden ver con la herramienta lsattr, de la siguiente manera.

# chattr +i file1
# chattr +a file2

Después de ejecutar esos dos comandos, archivo1 será inmutable (lo que significa que no se puede mover, renombrar, modificar o eliminar) mientras que archivo2 entrará en el modo de solo agregar (solo se puede abrir en modo adjuntar para escribir).

Accediendo a la cuenta raíz y usando sudo

Una de las formas en que los usuarios pueden acceder a la cuenta raíz es escribiendo.

$ su

y luego ingresando la contraseña de root.

Si la autenticación tiene éxito, iniciará sesión como root con el directorio de trabajo actual igual que antes. Si desea que se le coloque en el directorio de inicio de root, ejecute.

$ su -

y luego ingrese la contraseña de root.

El procedimiento anterior requiere que un usuario normal conozca la contraseña de root, lo que representa un grave riesgo de seguridad. Por esa razón, el administrador del sistema puede configurar el comando sudo para permitir que un usuario común ejecute comandos como un usuario diferente (generalmente el superusuario) de una manera muy controlada y limitada. Por lo tanto, se pueden establecer restricciones en un usuario para permitirle ejecutar uno o más comandos privilegiados específicos y ningún otro.

Leer también : Diferencia entre su y sudo User

Para autenticarse usando sudo , el usuario usa su propia contraseña. Después de ingresar el comando, se nos pedirá nuestra contraseña (no la del superusuario) y si la autenticación tiene éxito (y si el usuario tiene privilegios para ejecutar el comando), se ejecuta el comando especificado.

Para otorgar acceso a sudo, el administrador del sistema debe editar el archivo /etc/sudoers . Se recomienda que este archivo se edite usando el comando visudo en lugar de abrirlo directamente con un editor de texto.

# visudo

Esto abre el archivo /etc/sudoers usando vim (puede seguir las instrucciones dadas en Instalar y usar vim como editor - Parte 2 de esta serie para editar el archivo).

Estas son las líneas más relevantes.

Defaults    secure_path="/usr/sbin:/usr/bin:/sbin"
root        ALL=(ALL) ALL
tecmint     ALL=/bin/yum update
gacanepa    ALL=NOPASSWD:/bin/updatedb
%admin      ALL=(ALL) ALL

Echemos un vistazo más de cerca.

Defaults    secure_path="/usr/sbin:/usr/bin:/sbin:/usr/local/bin"

Esta línea le permite especificar los directorios que se usarán para sudo , y se usa para evitar el uso de directorios específicos del usuario, que pueden dañar el sistema.

Las siguientes líneas se utilizan para especificar permisos.

root        ALL=(ALL) ALL

  1. La primera palabra clave TODOS indica que esta regla se aplica a todos los hosts.
  2. El segundo TODOS indica que el usuario de la primera columna puede ejecutar comandos con los privilegios de cualquier usuario.
  3. El tercer TODOS significa que se puede ejecutar cualquier comando.

tecmint     ALL=/bin/yum update

Si no se especifica ningún usuario después del signo u003d , sudo asume el usuario root. En este caso, el usuario tecmint podrá ejecutar yum update como root.

gacanepa    ALL=NOPASSWD:/bin/updatedb

La directiva NOPASSWD permite al usuario gacanepa ejecutar /bin/updatedb sin necesidad de ingresar su contraseña.

%admin      ALL=(ALL) ALL

El signo % indica que esta línea se aplica a un grupo llamado " admin ". El significado del resto de la línea es idéntico al de un usuario habitual. Esto significa que los miembros del grupo " admin " pueden ejecutar todos los comandos como cualquier usuario en todos los hosts.

Para ver qué privilegios le otorga sudo, use la opción " -l " para listarlos.

PAM (módulos de autenticación conectables)

Los módulos de autenticación conectables (PAM) ofrecen la flexibilidad de establecer un esquema de autenticación específico por aplicación y/o servicio mediante módulos. Esta herramienta presente en todas las distribuciones modernas de Linux superó el problema que a menudo enfrentaban los desarrolladores en los primeros días de Linux, cuando cada programa que requería autenticación tenía que compilarse especialmente para saber cómo obtener la información necesaria.

Por ejemplo, con PAM, no importa si su contraseña está almacenada en/etc/shadow o en un servidor separado dentro de su red.

Por ejemplo, cuando el programa de inicio de sesión necesita autenticar a un usuario, PAM proporciona dinámicamente la biblioteca que contiene las funciones para el esquema de autenticación correcto. Por lo tanto, cambiar el esquema de autenticación para la aplicación de inicio de sesión (o cualquier otro programa que use PAM) es fácil ya que solo implica editar un archivo de configuración (muy probablemente, un archivo con el nombre de la aplicación, ubicado dentro de /etc/pam.d , y menos probable en /etc/pam.conf ).

Los archivos dentro de /etc/pam.d indican qué aplicaciones utilizan PAM de forma nativa. Además, podemos saber si una determinada aplicación utiliza PAM comprobando si la biblioteca PAM (libpam) se ha vinculado a ella:

# ldd $(which login) | grep libpam # login uses PAM
# ldd $(which top) | grep libpam # top does not use PAM

En la imagen de arriba podemos ver que libpam se ha vinculado con la aplicación de inicio de sesión. Esto tiene sentido ya que esta aplicación está involucrada en el funcionamiento de la autenticación del usuario del sistema, mientras que la parte superior no.

Examinemos el archivo de configuración de PAM en busca de passwd; sí, la conocida utilidad para cambiar las contraseñas de los usuarios. Se encuentra en /etc/pam.d/passwd:

# cat /etc/passwd

La primera columna indica el tipo de autenticación que se utilizará con el module-path (tercera columna). Cuando aparece un guión antes del tipo, PAM no registrará en el registro del sistema si el módulo no se puede cargar porque no se pudo encontrar en el sistema.

Están disponibles los siguientes tipos de autenticación:

  1. cuenta : este tipo de módulo verifica si el usuario o servicio ha proporcionado credenciales válidas para autenticarse.
  2. auth : este tipo de módulo verifica que el usuario es quien dice ser y otorga los privilegios necesarios.
  3. contraseña : este tipo de módulo permite al usuario o servicio actualizar su contraseña.
  4. sesión : este tipo de módulo indica qué se debe hacer antes y/o después de que la autenticación sea exitosa.

La segunda columna (llamada control ) indica lo que debería suceder si falla la autenticación con este módulo:

  1. requisito : si la autenticación a través de este módulo falla, la autenticación general se denegará de inmediato.
  2. required es similar a requisite, aunque se llamará a todos los demás módulos enumerados para este servicio antes de denegar la autenticación.
  3. suficiente : si la autenticación a través de este módulo falla, PAM aún otorgará autenticación incluso si una marca previa como requerida falla.
  4. opcional : si la autenticación a través de este módulo falla o tiene éxito, no sucede nada a menos que este sea el único módulo de su tipo definido para este servicio.
  5. incluir significa que las líneas del tipo dado deben leerse desde otro archivo.
  6. subck es similar a includes, pero las fallas o los éxitos de autenticación no causan la salida del módulo completo, sino solo de la subcategoría.

La cuarta columna, si existe, muestra los argumentos que se pasarán al módulo.

Las primeras tres líneas en /etc/pam.d/passwd (que se muestran arriba), cargan el módulo de autenticación del sistema para verificar que el usuario haya proporcionado credenciales válidas (cuenta). Si es así, le permite cambiar el token de autenticación (contraseña) dando permiso para usar passwd (auth).

Por ejemplo, si agrega

remember=2

a la siguiente línea

password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok

en /etc/pam.d/system-auth:

password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=2

las dos últimas contraseñas hash de cada usuario se guardan en/etc/security/opasswd para que no se puedan reutilizar:

Resumen

Las habilidades efectivas de administración de archivos y usuarios son herramientas esenciales para cualquier administrador de sistemas. En este artículo hemos cubierto los conceptos básicos y esperamos que pueda usarlo como un buen punto de partida para seguir construyendo. No dude en dejar sus comentarios o preguntas a continuación y le responderemos rápidamente.