Estou escrevendo um script que quero executar sem privilégios. Quero que os erros encontrados pelo script sejam registrados em algum arquivo de log. Eu não tenho privilégios para escrever um /var/log
. E eu não quero ter um no meu diretório pessoal.
Existe um local em que os scripts do espaço do usuário possam registrar informações de tempo de execução? Qual é a melhor prática para ter meu script registrar informações /var/log
sem criar possíveis problemas de segurança? Hesito em definir uid / gid no script.
fonte
syslog
é uma rotina de biblioteca C, e C ++ pode chamar qualquer C usandoextern "C"
. Outros idiomas geralmente fornecem uma ligação genérica a qualquer coisa C ou uma ligação a coisas específicas, mas isso depende do idioma.Se você, como usuário comum, decidir executar um programa, o local natural para seus logs estará no diretório inicial. Seu diretório pessoal é para você armazenar todos os seus arquivos, sejam eles logs de um programa que você executa ou qualquer outra coisa.
Se o programa é executado como parte do sistema, funcionando como um usuário do sistema normalmente dedicado, então o lugar natural para seus logs está em
/var/log
. Crie um subdiretório/var/log/myapp
e conceda permissões apropriadas para que seu aplicativo possa gravar nele.Se relevante e o seu sistema operacional permitir, marque o arquivo de log como somente anexado. Somente o root pode fazer isso. Isso tem a vantagem de que, se seu aplicativo estiver comprometido, ele não poderá apagar logs anteriores, o que pode ser muito útil para análises forenses do comprometimento. Você precisará da intervenção do root para girar o log:
chown
para que o arquivo de log não possa mais ser aberto pelo aplicativorename
, crie um novo arquivo somente de acréscimo com a propriedade apropriada e notifique o aplicativo para abrir o novo arquivo vazio .Você pode fazer qualquer log de aplicativo nos logs do sistema chamando
logger(1)
ousyslog(3)
.fonte
Geralmente para um daemon, o arquivo de log é criado
root
e as permissões são alteradas para que o usuário não privilegiado possa gravá-lo.logrotate
é então configurado para preservar as permissões durante a rotação.Se for um comando, não um daemon, faça o logon
/tmp
(de preferência usandomktemp
) e informe o usuário porSTDOUT
onde o log foi.fonte
&
para evitar atrasar o prompt, mas iniciar o dropbox grava no console. Atualmente, estou redirecionando sua saída para/dev/null
, mas gostaria de ter uma maneira de depurar se o dropbox falhar ao iniciar.daemonize
.chmod
. Normalmente0644
ou0664
e a propriedade do usuário / grupo também é alterada para a do daemon que se espera que esteja gravando nele.Estou convencido de que os programas do espaço do usuário devem descartar logs por padrão. Eu já vi vários programas despejarem logs onde quer que fossem, e isso nunca é particularmente bem-vindo nos meus sistemas; tendendo a se acumular em um local que nunca é percebido, a menos / até que fique 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 idéia foi usar
/var/run/user/$UID/log
, mas achei que no meu sistema, isso é uma montagem TMPFS, não grande o suficiente ou realmente boa para uso com logs.Crie um lugar para eles
Como não entendo / var / run / user o suficiente para integrar com ele, optei por emular manualmente, para o usuário 1000.
Eu recomendaria aderir ao FHS / var / log spc para a estrutura nesta pasta, mas o formato livre de especificações para que não haja muito a cumprir.
Logrotate Config
Não existe rotação de log neste diretório fornecida pelo seu sistema, eu recomendo criar uma para o seu sistema:
Abaixo está o meu post / var / run / user / 1000 / log anterior, não posso recomendá-lo, a menos que você realmente saiba o que está fazendo (e, se souber, me diga como também!)
talvez da seguinte maneira, mas acabei de inventar isso, porque fazia sentido para mim.Integre com / var / log / user / 1000:
fonte