Qual é a maneira mais segura de permitir que um usuário leia acesso a um arquivo de log?

21

Meu aplicativo requer acesso de leitura /var/log/messages, que pertence ao usuário e ao grupo root. Qual é o nível mínimo de exposição necessário /var/log/messagespara que meu aplicativo possa lê-lo?

Atualmente, meu plano é alterar a propriedade do grupo /var/log/messagespara um novo grupo e adicionar root e meu usuário do aplicativo, mas isso também daria privilégios de gravação ao aplicativo /var/log/messages.

SO: Centos 5.5

gAMBOOKa
fonte

Respostas:

7

Não há necessidade de adicionar raiz ao grupo, pois ele terá acesso através dos privilégios do usuário, basta fornecer ao grupo a leitura de qualquer grupo que você decidir. Lembre-se de fazer as alterações com o logrotate também ou as alterações do grupo serão apagadas todas as noites.

Rfelsburg
fonte
Onde estão localizados os scripts de logrotate?
precisa saber é o seguinte
1
/etc/logrotate.d/ é a pasta dos scripts de rotação de caixa quebrados. / var / log / messages está em /etc/logrotate.d/syslog. Você precisaria mover / var / log / messages para seu próprio arquivo dentro de /etc/logrotate.conf e, em seguida, usar algo como 'create 0640 root new_group' diga para criar o arquivo corretamente.
Rfelsburg
Você precisaria mover / var / log / messages para seu próprio arquivo dentro de /etc/logrotate.d/
Massimo
17

Apenas para expandir um pouco as respostas acima, aqui está um caso de uso no mundo real. Eu executo o aplicativo de análise de log corporativo Splunk em uma caixa Redhat. Ele é executado no usuário e no grupo splunk. Isso impede que o splunk acesse os logs em / var / log, pois eles são acessíveis apenas pelo root (ou por um administrador do sudo)

Para permitir o acesso somente leitura para splunk, usei algumas ACLs e modifiquei o logrotate para persistir.

Você pode definir manualmente a ACL com

sudo setfacl -m g:splunk:rx /var/log/messages

Isso não persistirá, pois o logrotate não reaplicará a configuração da ACL; portanto, para uma solução mais permanente, adicionei uma regra ao logrotate para redefinir a ACL. Eu adicionei o arquivo ..

/etc/logrotate.d/Splunk_ACLs

com

{
    postrotate
        /usr/bin/setfacl -m g:splunk:rx /var/log/cron
        /usr/bin/setfacl -m g:splunk:rx /var/log/maillog
        /usr/bin/setfacl -m g:splunk:rx /var/log/messages
        /usr/bin/setfacl -m g:splunk:rx /var/log/secure
        /usr/bin/setfacl -m g:splunk:rx /var/log/spooler
    endscript
}

Verifique o status da ACL de um arquivo com

$ getfacl /var/log/messages

Para obter mais informações sobre ACLs, consulte https://help.ubuntu.com/community/FilePermissionsACLs http://bencane.com/2012/05/27/acl-using-access-control-lists-on-linux/

nick fox
fonte
também postou a Splunk responde answers.splunk.com/answers/4253/...
Nick Fox
1
Observe que o splunk não requer permissão de execução nos arquivos de log, basta ler.
rojs
@nickfox Esse é todo o conteúdo /etc/logrotate.d/Splunk_ACLsque você postou lá? Você realmente não precisa especificar nenhum caminho para o logrotate processar o bit pós-rotação?
Dale Anderson
hmmm Não pense assim. Eu não queria modificar as configurações existentes de rotação de log para logs do sistema e também não queria substituí-las pelas minhas. Dessa forma, a modificação personalizada para splunk existe independentemente. Permitir que você implante com um pacote ou fantoche etc. é para isso que servem os diretórios /app.d/. É claro que eu poderia estar errado, foi mais de um ano desde que eu fiz isso
Nick Fox
1
Apenas uma observação sugerindo que se você usar a opção X (como em maiúsculas X, em vez de x), ela adicionará execute apenas se o arquivo for um diretório ou já tiver permissão de execução para algum usuário
steoleary
5

Seu plano é aceitável e no esquema de permissões Unix "tradicional" é o melhor caminho a percorrer.
Outra opção é fazer com que o syslog desvie as mensagens de interesse para outro arquivo (o que evita dar ao usuário do aplicativo acesso a qualquer coisa sensível que possa estar presente /var/log/messages).

Se você não deseja vincular-se ao esquema de permissões tradicional de Usuário / Grupo / Outro, também pode usar ACLs POSIX (outros, possivelmente melhores instruções / informações disponíveis no Google) para fornecer ao usuário do aplicativo acesso somente leitura a /var/log/messages- isso é um pouco mais refinado e não corre o risco de colocar acidentalmente alguém no grupo do aplicativo e dar acesso a coisas que eles não deveriam poder ver.

voretaq7
fonte
2

Yip, eu costumava setfaclfazer isso para dar acesso ao mail.logarquivo para um cliente, você também não precisará inserir um comando no logrotate.confarquivo para redefinir a ACL após a rotação dos logs, por exemplo:

postrotate
         /usr/bin/setfacl -m o::r /var/log/mail.log  
endscript

Note: Acabei de configurar isso e ainda não testei, mas, embora ele publique aqui, não consigo ver por que não funcionaria, alguém me corrija se eu estiver errado.

Matt
fonte
0

Você pode usar a ACL para isso. Ele permite definir regras de acesso adicionais específicas para usuários e arquivos específicos.

landonz
fonte
-1

Depois de configurar sua ACL, como as outras pessoas disseram, em vez de colocar todas as suas regras de ACL na configuração pós-rotação, você pode trocar o logrotate para usar copytruncate em vez de criar um novo arquivo de log cada vez

Skullone
fonte