Estoy usando Zabbix para monitorear mi entorno y zabbix_agentd
ejecuta como usuario zabbix
un script personalizado cada 60 segundos; se utiliza sudo
para ejecutar este script comoroot
.
En /var/log/auth.log
veo cada 60 segundos:
Aug 11 17:40:32 my-server sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Aug 11 17:40:32 my-server sudo: pam_unix(sudo:session): session closed for user root
Quiero evitar que este mensaje inunde mi registro. Agregué la siguiente línea al /etc/pam.d/sudo
archivo, inmediatamente antes session required pam_unix.so
:
session [success=1 default=ignore] pam_succeed_if.so service in sudo quiet uid = 0
y el mensaje desapareció.
Pero el problema es que esta forma he suprimido todos los mensajes PAM cuando alguien ejecuta un script con sudo
tanroot
.
Quiero detener el mensaje solo para el usuario zabbix
(no todos los demás usuarios). sudo
sabe que el zabbix
usuario quiere ejecutar el script con root
privilegios y ¿hay alguna forma de decirle a PAM eso? ¿Cómo puedo decirle a PAM que no inicie sesión para un usuario específico cuando lo use sudo
?
Nota : Intenté filtrar los mensajes en syslog; aunque esto funciona, tiene el mismo problema que el anterior, a saber, que es demasiado indiscriminado, ya que el mensaje de registro no indica qué usuario se está convirtiendo en root.
fuente
session closed for user root
y, si lo filtro, de hecho, estoy filtrando todos los mensajes. Quiero para un usuario específico que no se menciona en el mensaje y no puedo filtrar por su nombre ...Respuestas:
Pareces bastante cercano con tu línea de conf PAM:
Mirando la página del manual para
pam_succeed_if
, creo que quieres probar que el usuario solicitante (ruser
)zabbix
.Entonces sugiero:
Eso suprimirá la próxima prueba cuando el usuario se
zabbix
conviertaroot
(pero no otras transiciones). He probado esto con un par de mis propios usuarios.Elimine la
uid = 0
prueba en lo anterior si desea guardar silencio sobrezabbix
convertirse en un usuario, en lugar de solo root.Eliminé la
service in sudo
prueba: es redundante dado que esta línea está en/etc/pam.d/sudo
.fuente
service in sudo
.[user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...
línea del registro, puede agregar esto a un sudoers.d / file:Defaults:[user] !logfile, !syslog
(reemplace[user]
donde corresponda)/etc/sudoers.d/
: prefiero usar el nombre del usuario, grupo o aplicación a la que se aplica. Ver sudo.ws/man/1.8.15/sudoers.man.html:
allí. ¿Y lologfiles
explícito o algo que debería ser reemplazado?Basado en la respuesta de Toby, encontré una manera de configurar esto de una manera ligeramente diferente en Debian / Ubuntu. Para el contexto, ver:
Entonces Debian / Ubuntu tiene este
pam-auth-update
comando y cuando lo ves/etc/pam.d/sudo
se ve así:y se
/etc/pam.d/common-session-noninteractive
ve así:Así que claro, podría editar cualquiera de los archivos anteriores, pero claramente hay algo de "mayor potencia" en el trabajo aquí. ¿Cómo hacer que mis cambios funcionen bien con otros paquetes que quieran agregar reglas de pam? Para colmo, parecía que no podía simplemente agregar una línea
/etc/pam.d/sudo
entre los dos@include
s así ...Después de leer los enlaces anteriores, así como otros ejemplos (ver
/usr/share/pam-configs/unix
), se me ocurrió esto, en/usr/share/pam-configs/myapp
:Session
ySession-Type
controla qué archivos se editan yPriority
define en qué orden van. Después de agregar ese archivo y ejecutarlopam-auth-update
, se/etc/pam.d/common-session-noninteractive
ve así (en la parte inferior :)... que es lo que queremos porque nuestra
pam_succeed_if
línea necesita venir antessession required pam_unix.so
. (Esa línea proviene/use/share/pam-configs/unix
y tiene un resultado,Priority: 256
así que termina en segundo lugar). Tenga en cuenta también que dejé elservice = sudo
predicado yacommon-session-noninteractive
que también podría estar incluido en otras configuracionessudo
.En mi caso, ya había empaquetado mi código como un instalador .deb, así que agregué el
/usr/share/pam-configs/myapp
archivo, agreguépam-auth-update --package
mipostinst
yprerm
scripts y estoy listo para comenzar.Consideración...
Si lees el artículo PAMConfigFrameworkSpec que he vinculado anteriormente , define una
Session-Interactive-Only
opción, pero no tiene una forma de especificar solo reglas no interactivas . También/etc/pam.d/common-session
fue actualizado . No creo que haya una forma de evitar esto. Si está de acuerdo con que las sesiones interactivas no se registren para ese usuario (es una cuenta de servicio, ¿verdad?), Entonces debería estar listo.Bonificación: cómo eliminar también la salida del registro de sudo
Además de las
session openened|closed
líneas que emite PAM,sudo
registra información adicional sobre el comando que se ejecuta. Se parece a esto:Si también desea eliminar eso, abra este enlace y luego continúe a continuación ...
Entonces ... probablemente esté familiarizado con la
/etc/sudoers.d/___
configuración típica que podría hacer algo como esto para una cuenta de servicio que necesita privs de superusuario para algunas acciones:eso podría entrar
/etc/sudoers.d/10_myuser
. Bueno, entre otras cosas también puedes especificarDefaults
. Tenga en cuenta específicamente esta sintaxis'Defaults' ':' User_List
Ahora, mira la sección OPCIONES DE SUDOERS . Los bits interesantes incluyen
log_input
,log_output
pero (probablemente) más importante,syslog
ylogfile
. Me parece que en las versiones recientes de Debian, rsyslog osudo
iniciar sesión enstdout
ostderr
por defecto. Entonces, para mí, esto se mostraba en el registro de journald para mi servicio, y no, por ejemplo,/var/log/auth.log
donde no se mezclaría con los registros de mi aplicación. Para eliminar el registro de sudo, agregué lo siguiente para/etc/sudoers.d/10_myuser
que se vea así:YMMV, si cree que deshabilitar el registro crea problemas con las auditorías de seguridad, también puede intentar resolverlo a través de los filtros rsyslog.
fuente
success=1
, (lo que omite la siguiente cláusula), y (2) Porque, como especificóservice = sudo
, cualquier trabajo CRON en ejecución da como resultadorequirement "service = sudo" not met by user "root"
. (Y posiblemente otros efectos secundarios). Sin embargo, ¡tus cosas de bonificación funcionaron muy bien! Gracias.postinst
y tuprerm
?success=1
- Prefiero no saltarme porpam_unix
completo. Solo quiero dejar de registrar la salida que[default=ignore]
parece lograr muy bien sin omitir pam_unix.cron
jobs yservice = sudo
: ¿Es posible que tus trabajos cron se estén ejecutando como un usuario no privado, pero no estás llamandosudo
como parte de los trabajos cron?Después de bastante pruebas e investigaciones atemorizantes, he encontrado una solución que funciona para Debian Stretch (en Raspberry). Seguramente hay más de una forma de lograr lo que OP solicita. Pero la documentación de PAM es abrumadora, por lo que la mayoría de las cosas son realmente TL; DR.
/etc/rsyslog.d/anyname.conf
mediante el uso de::msg, contains, "session opened for user root by pi" stop
/etc/pam.d/sudo
/usr/share/pam-configs/
/etc/sudoers.d/020_pi
Te mostraré cómo hacer (2) y (4).
Para deshacerse de "sesión abierta / cerrada":
Queremos deshacernos del siguiente
/var/log/auth.log
spam:Hacer esto:
Lo que es de importancia crucial aquí es que
success=1
, si tiene éxito , se saltea la siguiente cláusula 1 (o en la jerga PAM "saltar sobre el siguiente módulo en la pila").De
man pam.conf
:A continuación, reinicie y deje que se ejecute unas horas (para verificar trabajos cron, por ejemplo) para comprobar que esto funciona. Luego, asegúrese de reinstalar los permisos del archivo, de lo contrario, tendrá un agujero de seguridad enorme en su sistema. (
sudo chmod 644 /etc/pam.d/sudo
)Para deshacerse de los repetidos mensajes de "TTY PWD COMMAND":
También queremos deshacernos de mensajes como este:
En mi caso, esto fue generado por un script IDS que ejecutaba arp-scan cada pocos minutos. Para evitar que aparezca en los registros, cree el siguiente archivo:
(Aquí
xxx
está el nombre de su máquina ypi
el nombre de usuario).fuente
sudo su -
entonces no tiene que establecer permisos peligrosos y arriesgarse a olvidar cambiar de nuevoConseguirás:
con tu respuesta
funciona pero aún obtendrás un:
en tus troncos.
fuente