Come fermare i messaggi sudo PAM in auth.log per un utente specifico?


16

Sto usando Zabbix per monitorare il mio ambiente ed zabbix_agentdesegue come utente zabbixuno script personalizzato ogni 60 secondi; utilizza sudoper eseguire questo script come root.

In /var/log/auth.logvedo ogni 60 secondi:

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

Voglio impedire a questo messaggio di inondare il mio registro. Ho aggiunto la seguente riga al /etc/pam.d/sudofile, immediatamente prima session required pam_unix.so:

session [success=1 default=ignore] pam_succeed_if.so service in sudo quiet uid = 0

e il messaggio è scomparso.

Ma il problema è che in questo modo ho soppresso ogni messaggio PAM quando qualcuno sta eseguendo uno script con sudoas root.

Voglio interrompere il messaggio solo per l'utente zabbix(non tutti gli altri utenti). sudosa che l' zabbixutente vuole eseguire lo script con rootprivilegi e c'è un modo per dirlo a PAM? Come posso dire a PAM di non accedere per un utente specifico durante l'utilizzo sudo?

Nota : ho provato a filtrare i messaggi in syslog; sebbene funzioni, presenta lo stesso problema di cui sopra, ovvero che è troppo indiscriminato, poiché il messaggio di registro non indica quale utente sta diventando root.


Supporta il filtraggio e con il filtraggio funziona. Ci ho provato ma non mi piace, perché il filtro non è un modo universale. Un giorno alcuni personaggi nel messaggio cambieranno o qualcosa cambierà e il mio filtro fallirà. Sto cercando una soluzione con parametro di configurazione, direttiva o qualcosa di simile per essere sicuro che questo verrà arrestato in tutti i casi. E il messaggio dice session closed for user roote se lo filtro infatti sto filtrando tutti i messaggi. Voglio un utente specifico che non è menzionato nel messaggio e non posso filtrare in base al nome ...
inivanoff1

Risposte:


11

Sembri abbastanza vicino con la tua linea di configurazione PAM:

session [success=1 default=ignore] pam_succeed_if.so service in sudo quiet uid = 0

Guardando la pagina di manuale per pam_succeed_if, penso che tu voglia verificare che l'utente richiedente ( ruser) sia zabbix.

Quindi suggerisco:

session [success=1 default=ignore] pam_succeed_if.so quiet uid = 0 ruser = zabbix

Ciò sopprimerà il test successivo quando l'utente zabbixdiventa root(ma non altre transizioni). Ho provato questo con un paio di miei utenti.

Rimuovi il uid = 0test sopra riportato se vuoi stare zitto su come zabbixdiventare qualsiasi utente, piuttosto che semplicemente root.

Ho rimosso il service in sudotest: è ridondante dato che questa linea è presente /etc/pam.d/sudo.


1
Grazie! Questo è quello che sto cercando. Perfetto! E grazie per il suggerimento da rimuovere service in sudo.
inivanoff1,

1
Se si desidera rimuovere anche la [user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...riga dal registro, è possibile aggiungerla a un file sudoers.d /: Defaults:[user] !logfile, !syslog(sostituire [user]ove appropriato)
thom_nic

@thom_nic Qual è il percorso di quel file?
not2qubit

Qualsiasi file in /etc/sudoers.d/- Preferisco usare il nome dell'utente, del gruppo o dell'applicazione a cui questo si applica. Vedi sudo.ws/man/1.8.15/sudoers.man.html
thom_nic

@thom_nic Potresti postare questo come risposta un po 'più estesa? Non vedo il formato che proponi sopra. Inoltre, non penso che ci sia :dentro. E sono logfilesespliciti o qualcosa che dovrebbe essere sostituito?
not2qubit,

3

Sulla base della risposta di Toby, ho trovato un modo per configurarlo in modo leggermente diverso su Debian / Ubuntu. Per il contesto, vedere:

Quindi Debian / Ubuntu ha questo pam-auth-updatecomando e quando lo guardi /etc/pam.d/sudoappare così:

#%PAM-1.0

@include common-auth
@include common-account
@include common-session-noninteractive

e si /etc/pam.d/common-session-noninteractivepresenta così:

#
# /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

Quindi certo, potrei modificare uno dei file sopra ma chiaramente c'è qualcosa di "più potente" al lavoro qui. Come far funzionare bene le mie modifiche con altri pacchetti che potrebbero voler aggiungere regole pam? Per finire, sembrava che non potessi semplicemente aggiungere una linea /etc/pam.d/sudotra le due @includes in questo modo ..

##### 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

Dopo aver letto i link sopra e altri esempi (vedi /usr/share/pam-configs/unix), ho trovato questo, in /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

Sessione Session-Typecontrolla quali file vengono modificati e Prioritydefinisce in quale ordine vanno. Dopo aver aggiunto quel file ed eseguito pam-auth-update, /etc/pam.d/common-session-noninteractiveappare così (in fondo :)

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

... che è quello che vogliamo perché la nostra pam_succeed_iflinea deve venire prima session required pam_unix.so. (Quella linea viene da /use/share/pam-configs/unixe ha un Priority: 256quindi finisce secondo.) Nota anche che ho lasciato il service = sudopredicato poiché common-session-noninteractivepotrebbe anche essere incluso in altre configurazioni oltre sudo.

Nel mio caso, avevo già impacchettato il mio codice come programma di installazione .deb, quindi ho aggiunto il /usr/share/pam-configs/myappfile, aggiunto pam-auth-update --packageal mio postinste agli prermscript e sono a posto!

Avvertimento...

Se leggi l' articolo PAMConfigFrameworkSpec che ho collegato sopra , definisce Session-Interactive-Onlyun'opzione, ma non ha un modo per specificare solo regole non interattive . Quindi è /etc/pam.d/common-sessionstato anche aggiornato . Non penso che ci sia un modo per aggirare questo. Se sei d'accordo con le sessioni interattive non registrate per quell'utente (è un account di servizio, giusto?) Allora dovresti essere pronto!

Bonus: come rimuovere anche l'output del registro sudo

Oltre alle session openened|closedrighe emesse da PAM, sudoregistra ulteriori informazioni sul comando eseguito. Sembra così:

[user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...

Se vuoi anche rimuoverlo, apri questo link quindi continua sotto ...

Quindi ... probabilmente hai familiarità con la /etc/sudoers.d/___configurazione tipica che potrebbe fare qualcosa del genere per un account di servizio che necessita di privilegi di superutente per alcune azioni:

myuser ALL=(ALL) NOPASSWD: /bin/ping

che potrebbe entrare /etc/sudoers.d/10_myuser. Bene, tra l'altro puoi anche specificareDefaults . Nota in particolare questa sintassi'Defaults' ':' User_List

Ora, guarda la sezione OPZIONI SUDOERS . Bit interessanti includono log_input, log_outputma (probabilmente) ancora più importante, sysloge logfile. Mi sembra che nelle ultime versioni di Debian, sia rsyslog o sudoaccedi stdouto stderrdi default. Quindi per me questo è stato mostrato nel registro dei giornali per il mio servizio, e non ad esempio /var/log/auth.logdove non si sarebbe mescolato nei miei registri delle applicazioni. Per rimuovere la registrazione sudo, ho aggiunto quanto segue in /etc/sudoers.d/10_myusermodo che assomigli a:

Defaults:myuser !logfile, !syslog
myuser ALL=(ALL) NOPASSWD: /bin/ping

YMMV, se ritieni che disabilitare la registrazione crei problemi con i controlli di sicurezza, potresti anche provare a risolverlo tramite i filtri rsyslog.


Il modo in cui hai implementato la "sessione aperta / chiusa" non ha funzionato per me. Ci sono due ragioni: (1) Non hai specificato di usare success=1, (che salta la clausola successiva), e (2) Perché come specificato service = sudo, qualsiasi lavoro CRON in esecuzione, risulta requirement "service = sudo" not met by user "root". (E possibilmente altri effetti collaterali.) Tuttavia, la tua roba Bonus ha funzionato alla grande! Grazie.
not2qubit

Come sono i tuoi script postinste prerm?
not2qubit

@ not2qubit re: success=1- Preferirei non saltare del pam_unixtutto. Voglio solo smettere di registrare l'output che [default=ignore]sembra ottenere bene senza saltare pam_unix.
thom_nic

re: cronjobs e service = sudo: è possibile che i tuoi lavori cron siano in esecuzione come utente non privato, ma non stai chiamando sudocome parte dei lavori cron?
thom_nic

2

Dopo parecchi test e ricerche spaventose, ho trovato una soluzione funzionante per Debian Stretch (su Raspberry). Esistono sicuramente più modi per realizzare ciò che l'OP chiede. Ma la documentazione PAM è travolgente, quindi la maggior parte delle cose è davvero TL; DR.

  1. È possibile aggiungere un filtro stringa personalizzato per rsyslog in: /etc/rsyslog.d/anyname.confutilizzando:
    :msg, contains, "session opened for user root by pi" stop
  2. Puoi modificare direttamente /etc/pam.d/sudo
  3. Puoi farlo nel modo giusto creando un file di configurazione PAM personalizzato in: /usr/share/pam-configs/
  4. Puoi fare alcuni creando un file sudoers personalizzato in:/etc/sudoers.d/020_pi

Ti mostrerò come fare (2) e (4).

AVVERTIMENTO

Non modificare alcun file /etc/pam.d/senza prima aver cambiato le autorizzazioni di scrittura del mondo. Se non lo fai e commetti un errore, puoi rimanere bloccato da qualsiasi uso futuro di sudo / su ! Quindi assicurati di aver testato le nuove impostazioni prima di modificarle nuovamente. (L'impostazione predefinita è 644 )


Per sbarazzarsi di "sessione apri / chiudi":

Vogliamo sbarazzarci del seguente /var/log/auth.logspam:

May 10 11:28:03 xxx sudo[26437]: pam_unix(sudo:session): session opened for user root by (uid=0)
May 10 11:28:07 xxx sudo[26437]: pam_unix(sudo:session): session closed for user root

Fai questo:

# sudo chmod 666 /etc/pam.d/sudo
# sudo cat /etc/pam.d/sudo

#%PAM-1.0

@include common-auth
@include common-account
session [success=1 default=ignore] pam_succeed_if.so quiet_success uid = 0 ruser = pi
@include common-session-noninteractive

Ciò che è di cruciale importanza qui, è quello success=1, significa saltare la prossima clausola 1 (o nel linguaggio PAM "saltare sul modulo successivo nello stack"), se ha successo.

Da man pam.conf:

ignora : se utilizzato con una pila di moduli, lo stato di ritorno del modulo non contribuisce al codice di ritorno ottenuto dall'applicazione.

fatto - equivale a ok con l'effetto collaterale di terminare lo stack del modulo e PAM che ritorna immediatamente all'applicazione.

N - equivalente a ok con l'effetto collaterale di saltare i successivi N moduli nello stack.

Quindi, riavviare e lasciarlo funzionare alcune ore (ad esempio per controllare i lavori cron) per verificare che funzioni. Quindi assicurati di reinstallare i permessi dei file, altrimenti avrai un buco di sicurezza nel tuo sistema. ( sudo chmod 644 /etc/pam.d/sudo)


Per sbarazzarsi dei messaggi "TTY PWD COMMAND" ripetuti:

Vogliamo anche sbarazzarci di messaggi come questo:

May 11 18:23:20 xxx sudo:       pi : TTY=unknown ; PWD=... ; USER=root ; COMMAND=/usr/bin/arp-scan -q -l

Nel mio caso, questo è stato generato da uno script IDS che eseguiva arp-scan ogni pochi minuti. Per rimuoverlo dalla visualizzazione nei registri, creare il seguente file:

# sudo nano /etc/sudoers.d/020_pi
# sudo cat /etc/sudoers.d/020_pi

Defaults:pi     !logfile, !syslog
pi xxx = (root) NOPASSWD: /usr/bin/arp-scan

(Ecco xxxil nome della tua macchina ed piè il nome utente.)


1
> Non modificare alcun file in /etc/pam.d/ senza prima cambiare i loro permessi di scrittura del mondo .... Consiglio vivamente di eseguire un'altra sessione terminale come root, ad es. sudo su - Quindi non devi impostare permessi pericolosi e rischiare di dimenticare di cambiare indietro.
thom_nic

@thom_nic Hai provato questo? La mia ipotesi è che se si blocca accidentalmente l'uso di sudo / su in PAM, quindi, qualunque cosa tu faccia, produrrà un errore, anche in una shell di root. In caso contrario, probabilmente PAM non funziona come dovrebbe.
not2qubit

-2

Otterrete:

pam_succeed_if(sudo:session): unknown attribute "ruser"

con la tua risposta.

#%PAM-1.0

@include common-auth
@include common-account
@include common-session-noninteractive
session     [success=1 default=ignore] pam_succeed_if.so service in zabbix quiet use_uid
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid

funziona ma otterrai comunque un:

pam_unix(sudo:session): session opened for user root by (uid=0)

nei tuoi registri.


1
Specifica: 1. quale file stai modificando, 2. chi è "tu" e cosa risolve.
not2qubit
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.