
Mi jefe me ofreció como voluntario para ser el administrador de sistemas de nuestro servidor Redhat de producción. Me pidió que reforzara la seguridad para evitar percances como rm -f *
el ocurrido no hace mucho.
En este momento, tenemos 53 usuarios haciendo sudo en la máquina y es una pesadilla de auditoría. Me pregunto si es posible permitir el acceso de los usuarios sólo en días específicos de la semana.
Por ejemplo, ¿puedo permitir que el usuario 'Joe' inicie sesión SOLAMENTE los martes y jueves y 'Jane' solo los domingos? ¿Se puede etc/sudoers
personalizar para permitir esto?
¿Existe una manera mejor en lugar de usar sudoers?
Respuesta1
sudo
realiza su autenticación a través de PAM, como casi todo lo demás en una máquina Linux.
Entonces deberías poder usarlo pam_time.so
para hacer esto.
De forma predeterminada, al menos en Debian, ese módulo no está habilitado. Debes agregar una línea similar a esta:
account requisite pam_time.so
para /etc/pam.d/sudo
habilitar solo sudo o /etc/pam.d/common-account
(después del bloque pam-auth-update) para habilitar todos los programas del sistema.
Luego edite /etc/security/time.conf
para establecer sus restricciones. El nombre del servicio debe ser sudo
. Por ejemplo, para permitir que Fred use sudo
solo entre las 3:00 p. m. y las 5:00 p. m. el viernes:
sudo;*;fred;Fr1500-1700
(NOTA: no he probado esto).
editar:Para ser claros, estoy de acuerdo con la otra respuesta y los distintos comentaristas, parece que tienes demasiadas personas ejecutando demasiados comandos como root, y realmente necesitas solucionarlo. Y, por supuesto, si pueden convertirse en root, pueden editar la configuración de pam...
Respuesta2
Me preguntaría por qué 53 usuarios necesitan sudo para hacer su trabajo diario; para la mayoría de los usuarios (incluso los desarrolladores), sudo debería ser una rara excepción, no algo tan rutinario como para que alguien ejecute un sudo rm -rf *
comando casualmente.
¿Puede usar permisos de grupo (o incluso ACL más avanzadas) para brindarles a las personas acceso a los archivos que necesitan para realizar su trabajo, tal vez con algunos scripts o binarios con setuid o sudo para permitirles hacer cosas como reiniciar servicios? (tenga en cuenta que es difícil escribir un script setuid/sudo seguro, por lo que es más importante mantener a la gente honesta).
Incluso si puede restringir a las personas a un día a la semana de acceso a sudo, todavía son 53 personas con acceso a sudo en una semana, por lo que realmente no ayuda con su problema principal.
De hecho, me preguntaría si tantos usuarios necesitan acceso a un servidor de producción: ¿pueden enviar registros o cualquier dato/archivo que necesiten a una máquina que no sea de producción?
Respuesta3
La forma más sencilla sería utilizar el directorio sudoers.d (a través de includeir) para su configuración. Luego podría tener trabajos cron que podrían colocar las reglas para cada usuario en ese directorio durante los momentos que desee.
La directiva #includedir se puede usar en /etc/sudoers para crear un directorio sudoers.d en el que puede colocar las reglas de sudoers como parte de sus reglas. Por ejemplo, dado:
#includedir /etc/sudoers.d
sudo leerá cada archivo en /etc/sudoers.d, omitiendo los nombres de archivos que terminan en '~' o contienen un '.' carácter para evitar causar problemas con el administrador de paquetes o el editor de archivos temporales/de respaldo. Los archivos se analizan en orden léxico. Es decir, /etc/sudoers.d/01_first se analizará antes que /etc/sudoers.d/10_first. Tenga en cuenta que debido a que la clasificación es léxica, no numérica, /etc/sudoers.d/1_whoops se cargará después de /etc/sudoers.d/10_segundo. Se puede utilizar un número constante de ceros a la izquierda en los nombres de archivos para evitar este tipo de problemas.
Tenga en cuenta que, a diferencia de los archivos incluidos mediante #include, visudo no editará los archivos en un directorio #includedir a menos que uno de ellos contenga un error de sintaxis. Todavía es posible ejecutar visudo con el indicador -f para editar los archivos directamente.
/etc/sudoers.d/joe estaría presente cuando desee que Joe tenga acceso y simplemente podría eliminar el archivo para quitarle el acceso.
Respuesta4
Puede agregar un crontab para colocar a los usuarios en un grupo sudo y luego un segundo crontab para eliminar a ese usuario.