¿Sudoers por un día por semana?

10

Mi jefe me ofreció ser el administrador del sistema para nuestro servidor redhat de producción. Me pidió que reforzara la seguridad para evitar contratiempos como rm -f *ese que ocurrieron hace poco.

En este momento, tenemos 53 usuarios entrando en la máquina y es una pesadilla de auditoría. Me pregunto si es posible permitir el acceso del usuario solo en días específicos de la semana.

Por ejemplo, ¿puedo permitir que el usuario 'Joe' inicie sesión SOLO los martes y jueves y 'Jane' solo los domingos? ¿Se etc/sudoerspuede personalizar para permitir esto?

¿Hay una mejor manera en lugar de usar sudoers?

Chris
fuente
10
Yo recomendaría NO leer la página del manual. Ver xkcd # 1343
user60684
3
No, le estoy diciendo que no lea el manual porque es imposible leer en mi humilde opinión. El OP probablemente encontraría una respuesta en la página del manual si fuera más fácil de leer.
user60684
10
Puede hacer esto, pero tenga en cuenta que los usuarios solo pueden devolverse el acceso a sudo todo el tiempo en cualquier día que tengan root.
Nick Matteo
2
@ Mark0978 si supieras el nombre de la empresa, probablemente morirías de risa. Es una desgracia que esté permitido ... en un servidor de producción.
Chris
3
Esto parece un poco tonto. Simplemente significa que Bill tendrá que esperar a que se ejecute su horario del miércoles por la mañana rm -rf /.
Michael Hampton

Respuestas:

21

sudo hace su autenticación a través de PAM, como casi todo lo demás en una caja de Linux.

Entonces deberías poder usar pam_time.sopara hacer esto.

Por defecto en Debian al menos, ese módulo no está habilitado. Debe agregar una línea que se vea así:

account    requisite  pam_time.so

ya sea /etc/pam.d/sudopara habilitar solo sudo o para /etc/pam.d/common-account(después del bloque pam-auth-update) para habilitar todos los programas en el sistema.

Luego edite /etc/security/time.confpara establecer sus restricciones. El nombre del servicio debe ser sudo. Por ejemplo, para permitir que Fred use sudosolo entre las 3 p.m. y las 5 p.m. del viernes:

sudo;*;fred;Fr1500-1700

(NOTA: no he probado esto).

editar: Para ser claros, estoy de acuerdo con la otra respuesta y los diversos comentaristas, parece que hay demasiadas personas ejecutando demasiados comandos como root, y realmente necesita corregir eso. Y, por supuesto, si pueden convertirse en root, pueden editar la configuración de pam ...

derobert
fuente
PAM parece complejo de implementar, pero también permite un control más estricto sobre quién hace qué y cuándo. Aceptado y votado. Gracias.
Chris
2
No creo que alentarlo sea la respuesta correcta, IMAO, la respuesta correcta a esta pregunta es "CORRE POR LAS COLINAS !!!! 1! 1 !! 1! 1"
o0 '.
¿Esto realmente funciona? Puedo controlar varios mecanismos de inicio de sesión como "login", "ssh", "gdm", "su" usando pam_time.so, pero no funciona para sudo. Quiero evitar que alguien se vuelva root por cualquier mecanismo normal fuera del horario de oficina. (Me doy cuenta de que no es a prueba de balas, alguien podría preparar un setuid shell o puerta trasera de antemano, pero no espero que eso suceda en esta situación.)
Sam Watkins
20

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 una cosa tan rutinaria que alguien ejecute un sudo rm -rf *comando casualmente .

¿Puede usar permisos de grupo (o incluso ACL más avanzadas) para dar a las personas acceso a los archivos que necesitan para realizar su trabajo, tal vez con algunos scripts o binarios setuid o sudo'ed para que puedan hacer cosas como reiniciar servicios? (tenga en cuenta que es difícil escribir un script setuid / sudo seguro, por lo que es más honesto mantener a las personas honestas).

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 central.

Para el caso, 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 es de producción?

Johnny
fuente
¿O puede publicar algún tipo de acceso a los archivos de registro que puedan necesitar, un tipo de configuración de chroot jailed sftp.
Boatcoder
@Johnny, la mayoría del trabajo realizado en este host es crear / editar y ejecutar scripts de shell. No se debe permitir a los usuarios vi/cp/mv/rm. Solo cdy more. Nada más.
Chris
@Johnny Si configuro una ACL en un directorio, ¿los archivos dentro de ese directorio heredan los atributos de la ACL por defecto?
Chris
@ Chris Sí, si configura la ACL predeterminada para el directorio.
Michael Hampton
Esto debería ser un comentario, no una respuesta. Independientemente de si el escenario del OP es razonable, otras personas tienen una necesidad similar de bloquear el "sudo" para algunos usuarios en ciertos momentos.
Sam Watkins
7

La forma más sencilla sería usar suders.d (a través de inludedir) para su configuración. Luego, podría tener trabajos cron que podrían colocar las reglas para cada usuario en ese directorio para las veces que lo desee.

La directiva #includedir se puede usar en / etc / sudoers para crear un directorio sudo.d en el que pueda 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 archivo 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 ordenado. Es decir, /etc/sudoers.d/01_first se analizará antes de /etc/sudoers.d/10_second. 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_second. Se puede usar un número constante de ceros a la izquierda en los nombres de archivo para evitar tales problemas.

Tenga en cuenta que, a diferencia de los archivos incluidos a través de #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 puede eliminar el archivo para quitarle el acceso.

jamespfinn
fuente
1
Tuve un problema con mis archivos de sudoers específicos de usuario: 'sudoers.user1', etc. Usted comenta sobre '~' y '.' Los personajes resolvieron mi problema. ¡Estoy muy contento de que hayas leído el manual! Gracias.
Han
0

Puede agregar un crontab para colocar a los usuarios en un grupo sudo, y luego un segundo crontab para eliminar a ese usuario.

PolarisUser
fuente