Basierend auf Tobys Antwort habe ich einen Weg gefunden, dies unter Debian / Ubuntu etwas anders zu konfigurieren. Zum Kontext siehe:
Also haben Debian / Ubuntu diesen pam-auth-update
Befehl und wenn Sie sich das ansehen /etc/pam.d/sudo
, sieht es so aus:
#%PAM-1.0
@include common-auth
@include common-account
@include common-session-noninteractive
und /etc/pam.d/common-session-noninteractive
sieht so aus:
#
# /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
So sicher, ich könnte beide der oben genannten Dateien bearbeiten, aber hier ist eindeutig eine "höhere Leistung" am Werk. Wie kann ich erreichen, dass meine Änderungen gut mit anderen Paketen zusammenspielen, die möglicherweise Pam-Regeln hinzufügen möchten? Um das Ganze abzurunden, schien es, als könnte ich nicht einfach eine Zeile /etc/pam.d/sudo
zwischen den beiden so @include
einfügen.
##### 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
Nachdem ich die obigen Links sowie andere Beispiele gelesen hatte (siehe /usr/share/pam-configs/unix
), kam ich auf Folgendes /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
Session
und Session-Type
Kontrolle , welche Dateien bearbeitet und Priority
definiert , was sie gehen zu bestellen. Nach Zugabe dieser Datei und läuft pam-auth-update
, /etc/pam.d/common-session-noninteractive
sieht wie folgt aus (unten :)
#... 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
... was wir wollen, weil unsere pam_succeed_if
Linie vorher kommen muss session required pam_unix.so
. (Diese Zeile kommt von /use/share/pam-configs/unix
und hat ein, Priority: 256
so dass sie an zweiter Stelle endet.) Beachten Sie auch, dass ich das service = sudo
Prädikat verlassen habe, da es common-session-noninteractive
möglicherweise auch in anderen Konfigurationen enthalten ist sudo
.
In meinem Fall hatte ich meinen Code bereits als .deb-Installationsprogramm gepackt, also fügte ich die /usr/share/pam-configs/myapp
Datei hinzu und fügte pam-auth-update --package
meinen postinst
und prerm
Skripten hinzu , und es kann losgehen!
Vorbehalt...
Wenn Sie den PAMConfigFrameworkSpec-Artikel lesen, den ich oben verlinkt habe , definiert er eine Session-Interactive-Only
Option, bietet jedoch keine Möglichkeit, nur nicht interaktive Regeln anzugeben . So /etc/pam.d/common-session
wurde auch aktualisiert . Ich glaube nicht, dass es einen Ausweg gibt. Wenn Sie damit einverstanden sind, dass interaktive Sitzungen für diesen Benutzer nicht protokolliert werden (es handelt sich um ein Dienstkonto, richtig?), Sollten Sie bereit sein!
Bonus: So entfernen Sie auch die Sudo-Log-Ausgabe
Zusätzlich zu den von session openened|closed
PAM ausgegebenen Zeilen werden sudo
zusätzliche Informationen zu dem ausgeführten Befehl protokolliert. Es sieht aus wie das:
[user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...
Wenn Sie das auch entfernen möchten, öffnen Sie diesen Link und fahren Sie unten fort ...
Also ... Sie sind wahrscheinlich mit typischen /etc/sudoers.d/___
Setups vertraut, die für ein Dienstkonto, für das Superuser-Berechtigungen für einige Aktionen erforderlich sind, so etwas tun könnten:
myuser ALL=(ALL) NOPASSWD: /bin/ping
das könnte reingehen /etc/sudoers.d/10_myuser
. Nun, unter anderem können Sie auch angebenDefaults
. Beachten Sie speziell diese Syntax'Defaults' ':' User_List
Schauen Sie sich jetzt den Abschnitt SUDOERS OPTIONS an . Interessante Bits sind log_input
, log_output
aber (wahrscheinlich) noch wichtiger, syslog
und logfile
. Es scheint mir, dass in neueren Versionen von Debian entweder rsyslog oder logge dich sudo
bei stdout
oder stderr
standardmäßig ein. Für mich tauchte dies also im Journald-Protokoll für meinen Dienst auf und nicht z. B. dort, /var/log/auth.log
wo es nicht in meine Anwendungsprotokolle eingemischt wurde. Um die Sudo-Protokollierung zu entfernen, habe ich Folgendes hinzugefügt, /etc/sudoers.d/10_myuser
damit es so aussieht:
Defaults:myuser !logfile, !syslog
myuser ALL=(ALL) NOPASSWD: /bin/ping
YMMV: Wenn Sie der Meinung sind, dass das Deaktivieren der Protokollierung Probleme mit Sicherheitsüberprüfungen hervorruft, versuchen Sie möglicherweise auch, diese Probleme mithilfe von rsyslog-Filtern zu lösen.
session closed for user root
und wenn ich es tatsächlich filtere, filtere ich alle Nachrichten. Ich möchte für einen bestimmten Benutzer, der nicht in der Nachricht erwähnt wird, und ich kann nicht nach seinem Namen filtern ...