Eu preciso de wget
algo (resulta em um arquivo compactado no cwd), então eu tenho que extraí-lo, fazer algumas coisas de copiar / mover / modificar e talvez finalmente executar um script (do arquivo baixado).
Agora, todas essas tarefas, direta ( wget
extrair etc.) ou indiretamente (executar o script), resultam na criação de arquivos e diretórios (todos no diretório de trabalho atual). Eu faço todas essas coisas como root
(não há como fazê-lo com o usuário final desejado).
O problema é: tudo o que é criado no processo pertence à raiz ou ao usuário sudo. Quando termino (e às vezes no meio do caminho), tenho que emitir uma série de comandos chmod
e chown
para corrigir as coisas.
Agora seria bom se, de alguma forma, pudesse dizer ao sistema que "A partir de agora, todos os arquivos ou diretórios que você criar quando eu emitir comandos como root, você criará com tal e qual propriedade e permissões".
chown
arquivar para um usuário diferente, e definir um padrão como esse tem o potencial de erros do usuário, dando a outros usuários permissões sem que oroot
usuário perceba.Existe outra maneira, bastante elegante, eu acho. Usando a instalação (1)
Por exemplo, o zabbix-agentd precisa de uma subpasta dentro de / var / run, mas distribuições recentes estão usando tmpfs para / var / run, para que o diretório não sobreviva à reinicialização. Eu o resolvi criando um arquivo / etc / sysconfig / zabbix-agentd contendo:
fonte
-m 0700
por exemplo. A respostainstall
cria o diretório e altera o proprietário / grupo. Portanto, há pouco tempo em que o diretório não possui o proprietário / grupo especificado. Em alguns contextos, isso pode importar.Em sistemas tipo Unix, os arquivos e diretórios criados recentemente são de propriedade do proprietário do processo que os criou. Normalmente, os utilitários padrão não têm opção para alterar o proprietário dos arquivos criados.
Variáveis com UID e GID do usuário original
Se você executar alguns comandos repetidamente, poderá usar as variáveis
$SUDO_UID
e$SUDO_GID
se referir ao usuário que chamousudo
:Obtendo a lista de arquivos e diretórios criados automaticamente
Se você deseja obter a lista de arquivos e diretórios criados (e possivelmente modificados) automaticamente, é possível executar seus comandos sob
strace
vigilância, com base noptrace()
syscall:ou você pode usar, por exemplo, o Installwatch, que é baseado no
LD_PRELOAD
mecanismo.Ideias para trabalhos futuros
Com base nos métodos mencionados acima, é possível criar uma ferramenta que altere automaticamente o proprietário e possivelmente acesse os direitos dos arquivos criados / modificados. O uso pode ser tão simples quanto:
fonte