
Gostaria de conceder grep
acesso de usuário específico (regular) aos meus maillogs ( /var/log/maillog*
).
Não estou preparado para alterar as permissões de log, pois elas devem permanecer root
apenas -, então acho que a solução preferida seria via sudoers
.
Além disso: quero conceder o mínimo possível de outras permissões; de preferência, o usuário apenas terá acesso ao maillog (e aos arquivos girados).
Por exemplo:
username ALL= NOPASSWD: /bin/grep
Permite que o usuário grep
acesse basicamente qualquer arquivo do sistema, algo que eu gostaria de evitar.
Qual é a melhor solução aqui?
Para sua informação: não precisa ser grep
por si só: o usuário só precisa de acesso de leitura aos maillogs e provavelmente só usará grep
para acessá-los.
Responder1
Você poderia usar uma acl no(s) arquivo(s) para conceder permissão de leitura ao usuário
setfacl -m user:grepuser:r /var/log/maillog*
Esta é a vantagem de permitir ao usuário utilizar qualquer ferramenta que desejar.
Isso também é seguro para logrotate para maillog*
Responder2
A menos que você saiba quais strings específicas os usuários pesquisarão e os arquivos específicos que eles verificarão, sudo
não é uma boa solução para isso. Se você criar uma regra como esta:
blizz ALL=root NOPASSWD: /bin/grep * /var/log/maillog*
O usuário poderá executar comandos como este:
grep root /etc/shadow /var/log/maillog
grep = /root/my.cnf /var/log/maillog
Eles poderão ler qualquer arquivo no sistema. Você pode encontrar mais informações sobre esse problema aqui:
http://blog.csnc.ch/2012/10/dangerous-sudoers-entries-part-4-wildcards/
Se você souber quais strings e arquivos o usuário verificará, poderá definir regras separadas para cada cenário. Por exemplo:
Cmnd_Alias MAILLOGA = /bin/grep 'Connection refused' /var/log/maillog
Cmnd_Alias MAILLOGB = /bin/grep 'Connection refused' /var/log/maillog.1
Cmnd_Alias MAILLOGC = /bin/grep 'imap-login' /var/log/maillog
Cmnd_Alias MAILLOGD = /bin/grep 'imap-login' /var/log/maillog.1
blizz ALL=root NOPASSWD: MAILLOGA, MAILLOGB, MAILLOGC, MAILLOGD
No entanto, isso pode ser complicado e resultar em uma configuração sudo excessivamente grande.
Alternativamente, em vez de grep
você conceder a eles acesso aos arquivos por meio do more
comando, eles poderiam pesquisar os arquivos interativamente:
Cmnd_Alias MAILLOG = /bin/more /var/log/mailllog
Cmnd_Alias MAILLOG1 = /bin/more /var/log/mailllog.1
Cmnd_Alias MAILLOG2 = /bin/more /var/log/mailllog.2
Cmnd_Alias MAILLOG3 = /bin/more /var/log/mailllog.3
blizz ALL=root NOPASSWD: MAILLOGA, MAILLOGB, MAILLOGC, MAILLOGD
No entanto, isso não permite ao usuário manter um histórico de suas pesquisas (por exemplo, .bash_history
) ou criar seus próprios scripts ou aliases para pesquisas. Além disso, se você tiver rotação de logs, eles não poderão analisar os logs compactados.
Observação:Nãoconceda acesso sudo ao less
comando. Um usuário pode sair do processo, por exemplo, a execução !/bin/bash
lhe less
daria acesso root ao sistema.
Outra opção é ter regras para eles nos cat
arquivos, para que possam canalizá-los grep
como acharem melhor. Por exemplo:
sudo cat /var/log/maillog | grep "anything can go here"
No final, a solução mais simples e provavelmente a melhor é conceder-lhes acesso de leitura aos logs, alterando as permissões nos arquivos de log. Você poderia fazer algo assim:
groupadd logcheck
chgrp logcheck /var/log/maillog*
chmod g+r /var/log/maillog*
useradd -G logcheck blizz
E então eles podem usar qualquer ferramenta que desejarem para analisar os arquivos (por exemplo grep
, zgrep
, less
, , more
, view
, etc).
Responder3
Isso deve funcionar conforme o esperado emsudoersarquivo:
%users ALL= /bin/cat /var/log/mail.log
%users ALL= /bin/cat /var/log/mail.err
(caminhos de log do Ubuntu, altere se necessário)
Usando uma ferramenta genérica somente de saída comogatoé simples e seguro. Você não terá que permitir e limitar opções específicas como acontece comgrepdiretamente em sudoers. Também permitirá a filtragem dos logs com qualquergrep-ou-nãoferramenta, ou seja.estranho,sed.
Não tenho certeza comosudoestá configurado no CentOS, mas se ele solicitar uma senha deligandousuário (não dealvousuário), eu evitaria usarSEM SENHA. Isto pode ser uma vantagem de segurança se qualquer parte hostil obtiver acesso à conta do usuário, sem saber a senha do usuário.