Libro: Sudo Mastery 2nd Edition

By luissalgado April 24, 2023, 9:14 p.m. Libro servidores

Capitulo 0: Introducción

he's not root, he's a very naughty boy

Como en la vida y en los sistemas, hay permisos para cada usuario, en ocasiones estos estan definidos por el grupo al que pertenecen, permisos como lectura, escritura y ejecucion son los mas comunes.

En los sistemas basados en UNIX existe el usuario root y este es especial, por que tiene el control total y protege al host, UNIX restringe algunos programas que solo root puede correr, tambien es el unico que puede configurar la red, archivos de sistemas, reiniciar programas que controlan los puertos de la red y agregar usuarios.

De una forma que el usuario root tenga acceso a todo es que los sistemas UNIX no encuentra la diferencia entre acceso para cambiar el kernel y acceso para instalar y actualizar aplicaciones en /opt

¿Que es Sudo?

Sudo es un programa que permite la escala de privilegios de usuarios, el sistema crea una lista de comandos que cada usuario puede ejecutar. Si el usuario quiere ejecutar algo que requiere al usuario root, este le pregunto a Sudo para ejecutar la accion por el, entonces este lo hara como root.

Root delega privilegios al sudo, cada ejecucion requiere autenticacion esto dependera de la configuracion del sistema.

Algo mal con Sudo

Si sudo es genial, entonces por que no lo usan todos?

Agrega un capa de administracion y abstracion, que requiere tiempo, energia y atencion, entonces debemos aprender todo lo relacion con esto.

¿Por que deberias leer este libro?

Cuando trabajar con sistemas basados en UNIX vas a necesitar asignar ciertos privilegios a los usuarios para proteger al sistema, como administrador de aplicaciones esto es muy importantes y cuando mas se trabaja en equipos de trabajos grandes.

Capitulo 1: Lo esencial de Sudo

"Root? You were lucky to have root! We used to live as operator."

¿Quieres correr un comando con Sudo?

Solo necesitas correr Sudo seguido del comando

╰─$ sudo <comando>

Cuando hacemos uso de Sudo en una nueva sesion nos pedira la contraseña.

Caracteristicas de tu Sudo

Para ver la versión, podemos hacerlo con el siguiente tomando

╰─$ sudo -V
Sudo versión 1.8.31
versión del complemento de políticas de sudoers 1.8.31
versión de gramática del archivo Sudoers 46
Sudoers I/O plugin version 1.8.31

Correr comandos con otro usuario

╰─$ sudo -u <usuario> <comando>

Ejemplo:

╰─$ sudo -u postgres psql

Correr comando con otro grupo

╰─$ sudo -g <grupo> <comando>

Ejemplo:

╰─$ sudo -g operator pickycommand

Capitulo 2: Administrar Sudoers

Now fix your sudoers, or I shall taunt you a second time.

Sudoers es el nucleo de la getioon de sudo

Las configuraciones de Sudoers la podemos encontrar en /etc/sudoers

Creando un Sudoers

Podemos crear mas sudoers, a continuacion se muestra como crear uno con privilegios ALL

sudo visudo

Debemos guarda y salir del archivo, al hacer esto se instalara un nueva regla/politica

Capitulo 3: Listas y alias

Come and see the violence inherent in the sysadmin!

Escribir una politica de Sudoers es simple, tu escribes quien puede ejecutar que en que maquina. Hay una forma de hacerlo mas sencillo?

Wildcards

Es un simbolo que puede coincidir con mas de un caracter, puedes hacerlas coincidir con un host, ruta de sistemas y argumentos en linea de comandos, esto se base en expreciones regulares esto dependera de tu sistema operativo.

Hacer coincidir numeros y caracteres especiales

Para esto usaremos el simbolo ?, un ejemplo, supongamos que queremos aplicar una regla a una lista de servidores DNS que tienes y estos usan el siguiente formato para los hostnames dns1,dns2.....dns9, para eso podemos agregar lo siguiente en nuestro archivio.

<user>      dns?=ALL

Al parecer funciona, pero supongamos que tenemos un dnsQ, dns- esto igual hara que coincida, por lo cual podemos ser un poco mas especificos

<user>      dns[0-9]=ALL

Tambien con caracteres

<user>      dns[a-zA-z][0-9]=ALL

Coincidir directorios

Podemos escribir reglas para directorios terminando con slash /

<user>      www1=/bin/, /sbin/, /usr/bin/, /usr/sbin/

Para este caso mi usuario podra correr programas en estos directorios, esto no cuenta para los subdirectorios que estos tengan.

Coincidir todo

Para esto usamos el * que nos servira para coincidir archivos, en este caso todo lo que inice con a

<user>      www1=/opt/bin/a*

Alias

Un alias de sudoers, hace referencia a un racimo de usuarios, sirve mas para los casos de correr comandos o lista de comandos.

Alias para backup y restore de un sistema UNIX

Cmnd_Alias  BACKUP=/sbin/dump, /sbin/restore, /usr/bin/mt

Capitulo 4: Opciones y por defecto

Your sysadmin was a hamster and your Internet Service Provider smells of elderberries!

Default

Ejemplo de un default

Defaults  editor=/bin/ed:/usr/local/bin/emacs

Tipo de opciones

Estos pueden ser boleanos, enteros, texto o listas

Opciones boleanas

Este es un ejemplo para cuando un usuario pone una contraseña incorrecta

Defaults    insults

Opciones Enteros

En este caso hacemos que tenga 5 intentos

Defaults    insults, passwd_tries=5

Opciones con texto

Este caso cambiaremos el mensaje de una contraseña incorrecta

Defaults    !insults, badpass_message="Wrong password. Your incompetence has been logged!"

Capitulo 5: Shell escape, edicion y politicas

All right, but apart from the patches, the package installations, the hardware management, the storage expansion, the upgrades, the backups, the log analysis, and the resource allocation, what has the sysadmin ever done for us?"

Podemos usar less para ver cualquier archivo en cualquier host

sudo less /var/log/secure

Despues ingresar

!visudo

Esto nos abrira el editor de politicas.

Configurando Sudoedit

<usuario>   www* = sudoedit /etc/httpd.conf

Usando Sudoedit

$ sudoedit httpd.conf

Capitulo 7: Configurando sudo

"My sudo is full of eels"

Configuraciones default de Sudo

╰─$ sudo -V
Sudo versión 1.8.31
versión del complemento de políticas de sudoers 1.8.31
versión de gramática del archivo Sudoers 46
Sudoers I/O plugin version 1.8.31

sudo.conf

Lo podemos encontrar en

/usr/local/etc/

Pero necesitamos entrar como sudo para poder verlo

Sudo Core Dumps

Sin embargo, si Sudo falla cuando intenta ejecutarlo, es posible que necesite volcados de núcleo para resolver el problema. Habilite los volcados de núcleo configurando disable_coredump en falso

Set disable_coredump false

Plugins

Un complemento de sudo, ya sea el motor de políticas o el sistema de entrada/salida, que altera el comportamiento de sudo de manera fundamental. El motor de políticas que lee sudoers es un complemento. Si desea utilizar un sistema de entrada o registro alternativo, utilice un complemento de I/O.

Plugin Path

Los complementos de Sudo se implementan como bibliotecas compartidas. El parámetro plugin_dir le dice a Sudo dónde buscar bibliotecas de complementos.

Sudo utiliza por defecto

/usr/local/libexec/sudo

Como directorio de complementos, pero las distribuciones de Linux tienden a guardarlo en otro lugar

Capitulo 8: Ambientes

"What is the chair-speed velocity of an unladen sysadmin?" "Linux or BSD?" "I don't know that - AAAAAABH!

El entorno de shell de un usuario puede no ser propicio para una buena gestión del sistema

Las variables de entorno existen para alterar el comportamiento del software.

Sudo-specific Environment Variables

Antes de limpiar su entorno, Sudo inyecta sus propias variables en el entorno de cada comando que ejecuta: SUDO_COMMAND, SUDO_USER, SUDO_UID y SUDO_GID.

La variable SUDO_COMMAND contiene el comando exacto que ejecutó a través de sudo para iniciar esta sesión.

Execution Environment

Sudo no solo ejecuta un comando privilegiado para usted. Activa una instancia de un shell, ejecuta el comando, sale del shell y devuelve el comando a su shell original. Esta es la razón por la que comandos como sudo cd /opt/secret/ no funcionan como cabría esperar.

¿Quieres ver lo que hay en el directorio secreto? Prueba sudo ls /opt/secret/.

¿Quiere ejecutar una serie más complicada de comandos de shell? Inicie explícitamente una instancia de shel y escriba sus comandos como una cadena entre comillas

sudo sh -c "cd /opt/secret ; du -dl | sort -rnk 1"

Capitulo 9: Deteccion de intrusos

"Good morning. I am a hacker. Er, please don't panic, just hand over /usr/bin/passwd"

Uno de los problemas mencionados en el capítulo anterior es el de un intruso que interfiere con PATH. Sanitizing PATH ayuda,. pero, ¿y si nuestro mal actor reemplaza el actual /usr/bin/passwd con su propia versión traicionera? Sudo puede verificar el resumen criptográfico (o checksum o bash) de un comando antes de ejecutarlo, evitando este tipo de ataques

Algoritmo de resumen

Sudo admite varias variantes de resúmenes SHA: SHA-224, SHA-256, SHA-384 y SHA-512. Los números más altos significan que el resumen es más difícil de aplicar ingeniería inversa, pero crear y validar el resumen requiere más poder de cómputo. Sin embargo, la mayoría de los sistemas tienen más potencia de procesador de la que saben qué hacer, así que uso SHA-512. Todos los resúmenes SHA-512 tienen 128 caracteres.

Capitulo 10: Distribucion de polizas

"You browse at your peril, for I have two servers here. I know one of them isn't running any more, but hte other one is, so that's one of you DDOS's for sure... or just about for sure anyway. It certainly wouldn't be worth your while risking it because. I'm a very good sysadmin"

En una sola máquina, cualquier configuración sudo no trivial es un montón de problemas. Sin embargo, si ejecuta cientos o miles de servidores, Sudo hace que los privilegios de los usuarios sean mucho más manejables. No es fácil ni simple, pero sí manejable. La mejor manera de tener una política coherente en su red es escribir una única política de sudoers y replicarla en todas las máquinas de la red.

La mayoría de los sitios grandes utilizan herramientas de administración de configuración para distribuir archivos entre las granjas de servidores. Si aún no está allí, considere herramientas como rsync. Este es un problema de larga data; en 1986, DSB incluyó a rdist exactamente con este propósito.