Onde os programas userspace devem salvar seus logs?

18

Estou escrevendo um script que quero executar sem privilégios. Eu quero os erros que o script encontra para ser logado em algum arquivo de log. Eu não tenho privilégios para escrever um em /var/log . E eu não quero ter um no meu diretório pessoal.

Existe um local onde scripts de espaço de usuário podem registrar informações de tempo de execução? Qual é a melhor prática para ter minhas informações de log de script em /var/log sem criar possíveis problemas de segurança? Estou hesitante em definir uid / gid no script.

    
por Lord Loh. 19.02.2013 / 22:59

4 respostas

5

Você não pode gravar em / var / log como um usuário normal, mas o daemon syslog fará isso por você, se você perguntar. Se você quiser registrar as mensagens nos registros padrão do sistema (por exemplo, /var/log/syslog ), o utilitário 4.4BSD logger poderá estar disponível em seu sistema. Ele é instalado por padrão no Debian e está no pacote bsdutils nos derivados do Debian.

Você obterá a vantagem de qualquer ferramenta de rotação, manutenção e monitoramento de log preexistente, com a desvantagem de precisar de privilégios para ler os logs do sistema e de ter as mensagens do script misturadas com mensagens de outros programas.

$ logger Hello
$ echo Goodbye | logger
$ sudo tail -2 /var/log/syslog
Feb 19 21:16:15 debian-host jander: Hello
Feb 19 21:16:21 debian-host logger: Goodbye

Existem várias opções de configuração disponíveis; você pode ler mais em man logger .

    
por 20.02.2013 / 03:27
9

Se você, como usuário comum, decidir executar um programa, o local natural de seus registros estará em seu diretório pessoal. Seu diretório pessoal destina-se a armazenar todos os seus arquivos, sejam eles registros de um programa que você executa ou qualquer outra coisa.

Se o programa for executado como parte do sistema, sendo executado como um usuário do sistema normalmente dedicado, o local natural dos logs será em /var/log . Crie um subdiretório /var/log/myapp e conceda as permissões apropriadas para que seu aplicativo possa gravar lá.

Se relevante e seu sistema operacional permitir, marque o arquivo de registro como somente anexado. Apenas root pode fazer isso. Isso tem a vantagem de que, se seu aplicativo for comprometido, ele não poderá apagar os logs anteriores, o que pode ser muito útil para análise forense do comprometimento. Você precisará da intervenção do root para rotacionar o log: chown para que o arquivo de log não possa mais ser aberto pelo aplicativo, rename do arquivo de log, criar um novo arquivo somente de anexação com propriedade apropriada e notificar o aplicativo para abrir o novo arquivo vazio.

Você pode fazer qualquer registro de aplicativo nos registros do sistema chamando logger(1) ou < href="http://pubs.opengroup.org/onlinepubs/009695399/functions/syslog.html"> syslog(3) .

    
por 20.02.2013 / 23:02
4

Geralmente, para um daemon, o arquivo de log é criado por root , em seguida, as permissões são alteradas para que o usuário não privilegiado possa gravar nele. O logrotate é então configurado para preservar as permissões durante a rotação.

Se for um comando, não um daemon, registre em /tmp (preferencialmente usando mktemp ) e informe o usuário via STDOUT para onde o log foi.

    
por 19.02.2013 / 23:53
2

Estou com a impressão de que os programas do espaço do usuário devem descartar logs por padrão. Já vi vários programas despejando logs onde quer que eles estejam, e nunca é particularmente bem-vindo em meus sistemas; tendendo a construir em algum local que nunca é notado, a menos que seja enorme.

Eu preferiria que se houvesse um lugar definido para eles, estou brincando no meu sistema tentando encontrar um lugar estável para eles.

Minha primeira ideia foi usar /var/run/user/$UID/log , mas descobri que no meu sistema, isso é uma montagem TMPFS, não grande o suficiente, ou muito boa para uso com logs.

Crie um lugar para eles

Como eu não entendo bem o / var / run / user para integrar com ele, eu escolhi emulá-lo manualmente, para o usuário 1000.

# mkdir /var/log/user
# install -d /var/log/user/1000 --owner 1000 -g 1000 -m 0700

Eu recomendaria que se atenha ao FHS / var / log spc para a estrutura dentro desta pasta, mas a forma livre de especificação, então não há muito a cumprir.

Configuração do Logrotate

Não há rotação de log existente neste diretório fornecido pelo seu sistema, eu recomendo criar um para o seu sistema:

# /etc/logrotate.d/userlogs

/var/log/user/*/log/*.log 
/var/log/user/*/log/**/*.log
{
        daily
        missingok
        rotate 7
        compress
        notifempty
        nocreate
}

Abaixo está minha postagem anterior / var / run / user / 1000 / log, não posso recomendá-la, a menos que você realmente saiba o que está fazendo (E se você fizer isso, diga-me como fazer também!)

talvez da seguinte forma, mas eu inventei isso porque fazia sentido para mim.

/var/run/user/1000/log/<app>.log
/var/run/user/1000/log/<app>/<context>.log

Integre com / var / log / user / 1000:

# Integrate with above /var/run/user, probably a bad idea:
# ln -s /var/log/user/1000/ /var/run/user/1000/log

    
por 18.01.2017 / 21:01