TL, DR: nenhuma de suas sugestões é boa. Em vez disso, ao executar como raiz, armazene os arquivos de estado em /var
(algo como /var/lib/suman
).
A raiz já tem permissão
O Root tem permissão para acessar todos os arquivos no sistema. Portanto, não altere as permissões do diretório: não faria diferença alguma para o root, mas permitiria que todos lessem e escrevessem nesse diretório. Apesar da crença popular, é extremamente raro que chmod 777
faça qualquer coisa útil.
O Root tem a permissão para acessar todos os arquivos no sistema, e normalmente isso é suficiente. Existem algumas exceções que têm a ver com certos tipos de sistema de arquivos que lidam com usuários de maneira diferente dos sistemas de arquivos “normais”. Os dois principais casos são:
- O NFS: root em um cliente geralmente é mapeado para um usuário diferente no servidor, geralmente
nobody
. Isso significa que quando o root abre um arquivo, ele é feito com as permissões denobody
. - FUSE (que inclui o ecryptfs, que é comumente usado para criptografar diretórios home): a menos que configurado de outra forma (com a opção
allow_other
, que somente o root pode usar), os sistemas de arquivos FUSE estão disponíveis apenas para o usuário que os montou. / li>
Nesses casos, há arquivos que o root não pode acessar diretamente, apesar de ter uma permissão aparente. O Root ainda pode efetivamente acessar os arquivos alternando para a conta que possui os arquivos - são limitações de implementação, não restrições de segurança - mas é um pouco inconveniente.
Mas o root deve usar essa permissão cuidadosamente
Se você tiver um programa que é comumente chamado como root, mas com HOME
configurado para o diretório inicial de outro usuário, tente evitar a criação de arquivos no diretório inicial do usuário que o usuário não pode acessar.
Se /home/oleg/.suman
já existir e pertencer a oleg, não importa se você gravar arquivos lá, porque o proprietário de um diretório sempre pode apagar arquivos nesse diretório (o que é preciso é permissão de gravação e o proprietário sempre pode conceder-se permissão). Quando oleg executa o mesmo programa, ele substituirá os arquivos de propriedade da raiz se esses arquivos precisarem ser sobrescritos. Não crie subdiretórios, no entanto: oleg não poderá acessá-los ou removê-los, mesmo que estejam vazios.
O problema é se você executar o programa pela primeira vez como root e criar /home/oleg/.suman
. Em poucas palavras, não faça isso - a questão é como evitá-lo.
As soluções
Se você executar sudo -H
, a variável de ambiente HOME
será definida como o diretório inicial do root e, portanto, o programa não estará acessando /home/oleg
.
Mas, às vezes, faz sentido executar um programa como root (porque ele precisa de permissões de root), mas com o diretório home definido como seu (para ler seus arquivos de configuração). Isso, claro, só se aplica em casos em que não há problema em um programa executando como root ler esse arquivo de configuração - as personalizações da interface do usuário são boas, mas o arquivo de configuração não deve conter coisas como código executável (por exemplo, nenhum shell escapa durante o pré-processamento). Se for esse o caso, o programa deve ler arquivos de $HOME
, mas não escrever.
Se o programa precisar armazenar alguns arquivos de estado, quando estiver sendo executado como root, ele deverá armazená-los em um diretório do sistema (em /var
), não no diretório inicial do usuário.