Como parar as mensagens sudo do PAM no auth.log para um usuário específico?

11

Estou usando o Zabbix para monitorar meu ambiente e zabbix_agentd é executado como usuário zabbix um script personalizado a cada 60 segundos; ele usa sudo para executar este script como root .

Em /var/log/auth.log , vejo 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

Eu quero parar esta mensagem de inundar meu log. Eu adicionei a seguinte linha ao arquivo /etc/pam.d/sudo , imediatamente antes de session required pam_unix.so :

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

e a mensagem desapareceu.

Mas o problema é que dessa forma eu suprimi cada mensagem do PAM quando alguém está executando um script com sudo as root .

Eu quero parar a mensagem apenas para o usuário zabbix (não para todos os outros usuários). sudo sabe que zabbix user deseja executar o script com root privileges e existe alguma maneira de informar ao PAM isso? Como posso dizer ao PAM para não fazer login para um usuário específico quando usar sudo ?

Nota : tentei filtrar as mensagens no syslog; embora isso funcione, ele tem o mesmo problema que o acima, ou seja, que é muito indiscriminado, já que a mensagem de log não indica qual usuário está se tornando root.

    
por inivanoff1 20.08.2015 / 10:54

4 respostas

9

Você parece bem perto da sua linha de conf de PAM:

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

Olhando a página de manual para pam_succeed_if , acho que você quer testar se o usuário solicitante ( ruser ) é zabbix .

Então eu sugiro:

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

Isso suprimirá o próximo teste quando o usuário zabbix se tornar root (mas nenhuma outra transição). Eu testei isso com um par de meus próprios usuários.

Remova o teste uid = 0 acima se você quiser ficar quieto sobre zabbix se tornar qualquer usuário, em vez de apenas root.

Eu removi o teste service in sudo : ele é redundante, pois essa linha está em /etc/pam.d/sudo .

    
por 20.08.2015 / 17:02
1

Com base na resposta de Toby, encontrei uma maneira de configurar isso de uma maneira um pouco diferente no Debian / Ubuntu. Para o contexto, veja:

Então o Debian / Ubuntu tem esse comando pam-auth-update e quando você olha para /etc/pam.d/sudo ele se parece com isto:

#%PAM-1.0

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

e /etc/pam.d/common-session-noninteractive são assim:

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

Então, eu poderia editar qualquer um dos arquivos acima, mas claramente há algum "maior poder" no trabalho aqui. Como fazer com que minhas alterações sejam compatíveis com outros pacotes que podem querer adicionar regras de pam? Como se não bastasse, parece que não pude simplesmente adicionar uma linha em /etc/pam.d/sudo entre os dois @include s assim.

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

Depois de ler os links acima, bem como outros exemplos (veja /usr/share/pam-configs/unix ), eu criei isto, em /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 e Session-Type controlam quais arquivos são editados e Priority define em que ordem eles entram. Depois de adicionar esse arquivo e executar pam-auth-update , /etc/pam.d/common-session-noninteractive se parece com isso (na 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

... é isso que queremos porque nossa linha pam_succeed_if precisa vir antes de session required pam_unix.so . (Essa linha vem de /use/share/pam-configs/unix e tem um Priority: 256 , então acaba em segundo.) Observe também que deixei o predicado service = sudo , pois common-session-noninteractive também pode ser incluído em outras configurações além de sudo .

No meu caso, eu já tinha empacotado meu código como um instalador .deb, então adicionei o arquivo /usr/share/pam-configs/myapp , e adicionei pam-auth-update --package aos meus scripts postinst e prerm e estou pronto!

Advertência ...

Se você ler o artigo PAMConfigFrameworkSpec que eu associei acima , ele define uma opção Session-Interactive-Only , mas não tem uma maneira de especificar apenas regras não interativas . Por isso, /etc/pam.d/common-session foi também atualizado . Eu não acho que há uma maneira de contornar isso. Se você está bem com sessões interativas não sendo registradas para esse usuário (é uma conta de serviço, certo?), Então você deve estar tudo pronto!

Bônus: como remover também a saída do sudo log

Além das linhas session openened|closed que o PAM emite, sudo registra informações adicionais sobre o comando executado. Parece assim:

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

Se você também quiser removê-lo, abra este link e continue abaixo ...

Então ... você provavelmente está familiarizado com a típica /etc/sudoers.d/___ setup, que pode fazer algo assim para uma conta de serviço que precisa de superusuários privs para algumas ações:

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

que pode ir em /etc/sudoers.d/10_myuser . Bem, entre outras coisas, você também pode especificar Defaults . Observe especificamente essa sintaxe 'Defaults' ':' User_List

Agora, veja a seção SUDOERS OPTIONS . Bits interessantes incluem log_input , log_output mas (provavelmente) mais importante, syslog e logfile . Parece-me que em versões recentes do Debian, o rsyslog ou sudo log para stdout ou stderr por padrão. Então, para mim, isso estava aparecendo no registro do diário para o meu serviço e não, por exemplo, /var/log/auth.log onde não seria misturado nos logs do meu aplicativo. Para remover o log do sudo, adicionei o seguinte a /etc/sudoers.d/10_myuser , de modo que pareça:

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

YMMV, se você sentir que desabilitar o registro cria problemas com auditorias de segurança, você também pode tentar resolver isso por meio de filtros rsyslog.

    
por 11.05.2018 / 15:58
1

Depois de testes e pesquisas assustadores, encontrei uma solução funcional para o Debian Stretch (em Raspberry). Certamente, há mais de uma maneira de realizar o que o OP pede. Mas a documentação do PAM é impressionante, então a maioria das coisas é realmente TL;

  1. Você pode adicionar um filtro de string personalizado para rsyslog em: /etc/rsyslog.d/anyname.conf usando: :msg, contains, "session opened for user root by pi" stop
  2. Você pode editar diretamente o /etc/pam.d/sudo
  3. Você pode fazer isso da maneira certa criando um arquivo de configuração personalizado do PAM em: /usr/share/pam-configs/
  4. Você pode fazer algumas criando um arquivo sudoers personalizado em: /etc/sudoers.d/020_pi

Eu vou te mostrar como fazer (2) e (4).

WARNING

Do not edit any files in /etc/pam.d/ without first changing their world write permissions. If you do not, and make a mistake, you can get locked out of any future use of sudo/su! So make sure you have tested the new settings before you change it back. (Default is 644)

Para se livrar de "sessão abrir / fechar":

Queremos nos livrar dos seguintes /var/log/auth.log spam:

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

Faça isso:

# 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

O que é de importância crucial aqui, é que success=1 , significa ignorar a próxima cláusula 1 (ou na linguagem PAM "saltar sobre o próximo módulo na pilha"), se bem-sucedida.

De man pam.conf :

ignore - when used with a stack of modules, the module's return status will not contribute to the return code the application obtains.

done - equivalent to ok with the side effect of terminating the module stack and PAM immediately returning to the application.

N - equivalent to ok with the side effect of jumping over the next N modules in the stack.

Em seguida, reinicialize e deixe-o rodar algumas horas (para verificar as tarefas do cron, por exemplo) para testar se isso funciona. Em seguida, certifique-se de restabelecer as permissões do arquivo, caso contrário, você terá uma falha de segurança no seu sistema. ( sudo chmod 644 /etc/pam.d/sudo )

Para se livrar de mensagens repetidas de "TTY PWD COMMAND":

Também queremos nos livrar de mensagens como esta:

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

No meu caso, isso foi gerado por um script IDS que estava executando arp-scan a cada poucos minutos. Para removê-lo de aparecer nos logs, crie o seguinte arquivo:

# 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

(Aqui xxx é o nome da sua máquina e pi é o nome de usuário.)

    
por 12.05.2018 / 10:20
-1

Você receberá:

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

com sua resposta.

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

funciona, mas você ainda terá um:

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

nos seus registros.

    
por 23.03.2016 / 10:35