Estou usando o Zabbix para monitorar meu ambiente e zabbix_agentd
executa 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 a 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
Quero impedir que esta mensagem inunde meu log. Adicionei a seguinte linha ao /etc/pam.d/sudo
arquivo, imediatamente antes 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 todas as mensagens do PAM quando alguém está executando um script com sudo
as root
.
Quero parar a mensagem apenas para o usuário zabbix
(nem todos os outros usuários). sudo
sabe que o zabbix
usuário deseja executar o script com root
privilégios e existe alguma maneira de informar isso ao PAM? Como posso dizer ao PAM para não registrar um usuário específico ao usar sudo
?
Nota : Tentei filtrar as mensagens no syslog; embora isso funcione, ele tem o mesmo problema que o acima, ou seja, é indiscriminado demais, pois a mensagem de log não indica qual usuário está se tornando raiz.
fonte
session closed for user root
e se eu filtrar de fato, estou filtrando todas as mensagens. Quero para um usuário específico que não é mencionado na mensagem e eu não posso filtrar por seu nome ...Respostas:
Você parece bem próximo da sua linha de conf PAM:
Olhando para a página de manual
pam_succeed_if
, acho que você deseja testar se o usuário solicitante (ruser
) ézabbix
.Então eu sugiro:
Isso suprimirá o próximo teste quando o usuário
zabbix
se tornarroot
(mas nenhuma outra transição). Eu testei isso com um par de meus próprios usuários.Remova o
uid = 0
teste acima, se você quiser sezabbix
tornar um usuário silencioso , em vez de apenas fazer root.Eu removi o
service in sudo
teste: é redundante, pois essa linha está inserida/etc/pam.d/sudo
.fonte
service in sudo
.[user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...
linha do log, bem como, você pode adicionar este a um sudoers.d / arquivo:Defaults:[user] !logfile, !syslog
(substitua[user]
quando necessário)/etc/sudoers.d/
- eu prefiro usar o nome do usuário, grupo ou aplicativo ao qual isso se aplica. Veja sudo.ws/man/1.8.15/sudoers.man.html:
lá dentro. E ologfiles
explícito ou algo que deve ser substituído?Baseado na resposta de Toby, eu encontrei uma maneira de configurar isso de uma maneira um pouco diferente no Debian / Ubuntu. Para o contexto, consulte:
Portanto, o Debian / Ubuntu tem este
pam-auth-update
comando e, quando você olha/etc/pam.d/sudo
, fica assim:e
/etc/pam.d/common-session-noninteractive
fica assim:Então, com certeza, eu poderia editar qualquer um dos arquivos acima, mas claramente há um "poder superior" em ação aqui. Como fazer minhas alterações funcionarem bem com outros pacotes que podem querer adicionar regras do pam? Ainda por cima, parecia que eu não poderia simplesmente adicionar uma linha
/etc/pam.d/sudo
entre os dois@include
segundos assim.Depois de ler os links acima, bem como outros exemplos (consulte
/usr/share/pam-configs/unix
), vim com isso, em/usr/share/pam-configs/myapp
:Session
eSession-Type
controlar quais arquivos são editados ePriority
define em que ordem eles entram. Depois de adicionar esse arquivo e executá-lopam-auth-update
,/etc/pam.d/common-session-noninteractive
fica assim (na parte inferior :)... o que queremos, porque nossa
pam_succeed_if
linha precisa vir antessession required pam_unix.so
. (Essa linha vem/use/share/pam-configs/unix
e tem um,Priority: 256
então termina em segundo.) Observe também que deixei oservice = sudo
predicado, poiscommon-session-noninteractive
também pode ser incluído em outras configuraçõessudo
.No meu caso, eu já tinha embalado meu código como um instalador .deb então eu adicionei o
/usr/share/pam-configs/myapp
arquivo, e acrescentoupam-auth-update --package
aos meuspostinst
eprerm
roteiros e eu sou bom para ir!Embargo...
Se você ler o artigo PAMConfigFrameworkSpec vinculado acima , ele definirá uma
Session-Interactive-Only
opção, mas não poderá especificar apenas regras não interativas . Então também/etc/pam.d/common-session
foi atualizado . Eu não acho que há uma maneira de contornar isso. Se você concorda que as sessões interativas não estão sendo registradas para esse usuário (é uma conta de serviço, certo?), Você deve estar pronto!Bônus: como remover também a saída do log do sudo
Além das
session openened|closed
linhas que o PAM emite,sudo
registra informações adicionais sobre o comando executado. Se parece com isso:Se você também deseja remover isso, abra este link e continue abaixo ...
Então ... você provavelmente conhece a
/etc/sudoers.d/___
configuração típica, que pode fazer algo assim para uma conta de serviço que precisa de privilégios de superusuário para algumas ações:que pode entrar
/etc/sudoers.d/10_myuser
. Bem, entre outras coisas, você também pode especificarDefaults
. Observe especificamente esta sintaxe'Defaults' ':' User_List
Agora, veja a seção SUDOERS OPTIONS . Bits interessantes incluem
log_input
,log_output
mas (provavelmente) mais importante,syslog
elogfile
. Parece-me que nas versões recentes do Debian, rsyslog ousudo
log parastdout
oustderr
por padrão. Então, para mim, isso estava aparecendo no log de diário do meu serviço, e não por exemplo,/var/log/auth.log
onde não seria misturado nos logs de aplicativos. Para remover o registro do sudo, adicionei o seguinte ao seguinte/etc/sudoers.d/10_myuser
:YMMV, se você sentir que desabilitar o log cria problemas com as auditorias de segurança, você também pode tentar resolver isso por meio de filtros rsyslog.
fonte
success=1
(que ignora a próxima cláusula) e (2) porque como você especificouservice = sudo
, qualquer trabalho CRON em execução resulta emrequirement "service = sudo" not met by user "root"
. (E possivelmente outros efeitos colaterais.) No entanto, seu material de bônus funcionou muito bem! Obrigado.postinst
eprerm
?success=1
- Prefiro não pularpam_unix
completamente. Eu só quero parar de registrar a saída que[default=ignore]
parece conseguir muito bem sem pular o pam_unix.cron
jobs eservice = sudo
: É possível que seus jobs cron estejam sendo executados como um usuário privado, mas você não está chamandosudo
como parte dos jobs cron?Após alguns testes e pesquisas assustadores, eu encontrei uma solução funcional para o Debian Stretch (no 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; DR.
/etc/rsyslog.d/anyname.conf
usando::msg, contains, "session opened for user root by pi" stop
/etc/pam.d/sudo
/usr/share/pam-configs/
/etc/sudoers.d/020_pi
Eu vou te mostrar como fazer (2) e (4).
Para se livrar da "sessão abrir / fechar":
Queremos nos livrar do seguinte
/var/log/auth.log
spam:Faça isso:
O que é de importância crucial aqui é que isso
success=1
significa pular a próxima cláusula 1 (ou no jargão do PAM "pule o próximo módulo na pilha"), se for bem-sucedida.De
man pam.conf
:Em seguida, reinicie e deixe executar algumas horas (para verificar tarefas cron, por exemplo) para testar se isso funciona. Em seguida, certifique-se de reinstalar as permissões de arquivo, caso contrário, haverá uma brecha de segurança no sistema. (
sudo chmod 644 /etc/pam.d/sudo
)Para se livrar das mensagens repetidas "TTY PWD COMMAND":
Também queremos nos livrar de mensagens como esta:
No meu caso, isso foi gerado por um script IDS que executava o arp-scan a cada poucos minutos. Para impedir que ele apareça nos logs, crie o seguinte arquivo:
(Aqui
xxx
está o nome da sua máquina epi
é o nome de usuário.)fonte
sudo su -
você não precisa definir permissões perigosas e corre o risco de esquecer de mudar de volta.Você vai ter:
com sua resposta.
funciona, mas você ainda terá um:
nos seus logs.
fonte