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-updatecomando y cuando lo ves /etc/pam.d/sudose ve así:
#%PAM-1.0
@include common-auth
@include common-account
@include common-session-noninteractive
y se /etc/pam.d/common-session-noninteractiveve así:
#
# /etc/pam.d/common-session-noninteractive - session-related modules
# common to all non-interactive services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define tasks to be performed
# at the start and end of all non-interactive sessions.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules. See
# pam-auth-update(8) for details.
# here are the per-package modules (the "Primary" block)
session [default=1] pam_permit.so
# here's the fallback if no module succeeds
session requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
session required pam_permit.so
# and here are more per-package modules (the "Additional" block)
session required pam_unix.so
# end of pam-auth-update config
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/sudoentre los dos @includes así ...
##### THIS DIDN'T WORK :( ######
@include common-auth
@include common-account
session [default=ignore] pam_succeed_if.so quiet_success service = sudo uid = 0 ruser = myappuser
@include common-session-noninteractive
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:
# Don't log "session opened" messages for myapp user
# See: https://wiki.ubuntu.com/PAMConfigFrameworkSpec
# https://manpages.debian.org/stretch/libpam-modules/pam_succeed_if.8.en.html
Name: myapp disable session logging
Default: yes
Priority: 300
Session-Type: Additional
Session:
[default=ignore] pam_succeed_if.so quiet_success service = sudo uid = 0 ruser = myappuser
Sessiony Session-Typecontrola qué archivos se editan y Prioritydefine en qué orden van. Después de agregar ese archivo y ejecutarlo pam-auth-update, se /etc/pam.d/common-session-noninteractiveve así (en la parte inferior :)
#... omitted
session required pam_permit.so
# and here are more per-package modules (the "Additional" block)
session [default=ignore] pam_succeed_if.so quiet_success service = sudo uid = 0 ruser = myappuser
session required pam_unix.so
# end of pam-auth-update config
... que es lo que queremos porque nuestra pam_succeed_iflínea necesita venir antes session required pam_unix.so. (Esa línea proviene /use/share/pam-configs/unixy tiene un resultado, Priority: 256así que termina en segundo lugar). Tenga en cuenta también que dejé el service = sudopredicado ya common-session-noninteractiveque también podría estar incluido en otras configuraciones sudo.
En mi caso, ya había empaquetado mi código como un instalador .deb, así que agregué el /usr/share/pam-configs/myapparchivo, agregué pam-auth-update --packagemi postinsty prermscripts y estoy listo para comenzar.
Consideración...
Si lees el artículo PAMConfigFrameworkSpec que he vinculado anteriormente , define una Session-Interactive-Onlyopción, pero no tiene una forma de especificar solo reglas no interactivas . También /etc/pam.d/common-sessionfue 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|closedlíneas que emite PAM, sudoregistra información adicional sobre el comando que se ejecuta. Se parece a esto:
[user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...
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:
myuser ALL=(ALL) NOPASSWD: /bin/ping
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_outputpero (probablemente) más importante, syslogy logfile. Me parece que en las versiones recientes de Debian, rsyslog o sudoiniciar sesión en stdouto stderrpor defecto. Entonces, para mí, esto se mostraba en el registro de journald para mi servicio, y no, por ejemplo, /var/log/auth.logdonde 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_myuserque se vea así:
Defaults:myuser !logfile, !syslog
myuser ALL=(ALL) NOPASSWD: /bin/ping
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.
session closed for user rooty, 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 ...