Como posso dar um login muito simplificado para ver os logs?

4

Eu tenho vários arquivos de log em pastas em um sistema RHEL 5:

/var/log/syslog-ng/A/
/var/log/syslog-ng/B/
/var/log/syslog-ng/C/

Gostaria de poder conceder a certos usuários os direitos de ver / alterar (mas não modificar / excluir) todos os arquivos dentro das pastas B e C (e subdiretórios), mas não exibir o conteúdo da pasta A nem a pasta /var/log/syslog-ng em si.

O que eu posso imaginar é um shell reduzido, com os únicos comandos sendo tail , cd , grep e vi , com cd apenas navegando para B e C pastas.

Um único usuário / senha compartilhado entre as pessoas que usariam essa informação é bom.

Como você recomendaria isso? É mesmo possível?

(atualmente conseguimos isso com um script bash disponibilizado através do Apache HTTPD, com a configuração do Apache exigindo uma senha se o caminho que está sendo navegado passa acima das pastas B ou C. O script é desajeitado e hacky para dizer o mínimo, e não fornece nenhuma forma de atualização ao vivo além de uma meta-atualização na página HTML gerada - fazer uso de ssh e tail seria uma experiência de usuário muito melhor e menos propensa a erros)

    
por Rich 15.06.2011 / 15:21

2 respostas

1

O shell bash entra em um modo restrito (quando chamado rbash ) que impede que os usuários - entre outras coisas - alterem PATH ou alterando o diretório atual com cd ; acoplando isso com o restrição de controle de acesso fornecida por grupos do UNIX, você pode restringir usuários visualizem apenas arquivos em um determinado diretório.

Eu implementaria assim:

  • Crie grupos A , B , etc. - cada grupo pode ler (mas não escrever ) o diretório correspondente e os arquivos de log:

    $ ls -lF /var/log/syslog-ng
    drwxr-x--- root A  ...  A/
    drwxr-x--- root B  ...  B/
    [...]
    
    $ ls -l /var/log/syslog-ng/A/
    -rwxr----- root A  ...  logfile.log
    -rwxr----- root A  ...  logfile.log.1
    [...]
    
  • Modifique /etc/group e adicione usuários a esses grupos de acordo com o registros que você quer que eles leiam:

    $ tail /etc/group
    [...]
    A: foo
    B: bar
    
  • Crie um diretório para hospedar os comandos aos quais você deseja dar acesso os visualizadores de log; vamos supor que seja /usr/local/restricted/bin . Copie ou associe os comandos relevantes a este diretório.

  • Modifique /etc/profile para que você configure o PATH correto para o usuários restritos: o PATH restrito deve incluir apenas /usr/local/restricted/bin (ou qualquer outro diretório que hospede comandos restritos "seguros").

  • Modifique /etc/passwd e verifique se os usuários recebem o login shell rbash e o diretório /var/log/syslog-ng/XXX relevante como casa. Eles podem agora entrar, mas são presos no diretório home e só pode usar comandos no PATH restrito.

Nota: É fácil contornar o shell do modo restrito se você fornecer acesso a comandos que permitem aos usuários exec um comando arbitrário, por exemplo, PERL ou quase qualquer editor.

    
por 15.06.2011 / 17:26
0

Você pode exportar /var/log/syslog-ng/B e /var/log/syslog-ng/C por meio de um protocolo de rede, como NFS ou Samba.

Você pode criar um usuário com um shell somente do scp, como scponly ou rssh . Defina o diretório inicial desse usuário como /home/log-viewers-BC . Use bindfs para criar uma exibição de /var/log/syslog-ng/B como /home/log-viewers-BC/B e uma exibição de /var/log/syslog-ng/C as /home/log-viewers-BC/C .

Mas uma abordagem .htaccess também é uma boa escolha, então investigue em um conjunto melhor de scripts cgi para atualizações ao vivo.

    
por 15.06.2011 / 19:12