que permissão para gravar o arquivo PID em / var / run

51

Ubuntu

touch: não é possível tocar em `/var/run/test.pid ': permissão negada

Estou iniciando start-stop-daemon e gostaria de escrever o arquivo PID em / var / run start-stop-daemon é executado como meu usuário-programa

A configuração / var / run é raiz raiz drwxr-xr-x 9

Eu gosto de evitar colocar meu-programa-usuário no grupo raiz.

s5804
fonte

Respostas:

71

Por padrão, você só pode gravar em / var / run como um usuário com um ID de usuário efetivo de 0 (ou seja, como root). Isso ocorre por boas razões; portanto, faça o que fizer, não altere as permissões de / var / run ... Em vez disso, como root, crie um diretório em / var / run:

# mkdir /var/run/mydaemon

Em seguida, altere sua propriedade para o usuário / grupo sob o qual você deseja executar seu processo:

# chown myuser:myuser /var/run/mydaemon

Agora especifique para usar / var / run / mydaemon em vez de / var / run.

Você sempre pode testar isso executando um teste como o usuário em questão.

Stephen Nelson-Smith
fonte
5
Isso funcionou bem para mim, mas quando reiniciei o servidor, o /var/run/mydaemondiretório desapareceu.
Myborobudur
17
Esta não é uma resposta completa, / var / run é tmpfs por padrão no Ubuntu. Cada vez que o servidor é iniciado, o comando mkdir e chown precisa ser executado novamente.
Tim
11
@ Tim e que tal editar a resposta e completá-la?
Kaiser #
Se você estiver lidando com o daemon, uma solução limpa seria adicionar o caminho / var / run / mydaemon ao arquivo da unidade systemd, conforme descrito aqui . Uma solução hacky mais fácil seria adicionar os comandos mkdir e chown para o script init.d (se existir)
odedfos
11
Uma resposta melhor e abrangente está aqui: superuser.com/a/1127720/71795, uma resposta errada que parece muito elegante está aqui: stackoverflow.com/a/5174433 . Resumo: use /tmpou ~.
Tim
13
mkdir /var/run/mydaemon
chown myuser:myuser /var/run/mydaemon

isso não funcionará, pois será perdido na próxima reinicialização ( /var/runé um tmpfs no Ubuntu).

A única solução viável é executar mkdir e chmod como parte dos scripts de inicialização.

Vladimir Nicolici
fonte
3

Você pode tentar isso. Crie um diretório / var / run / test / e altere a permissão desse diretório para o mesmo usuário que o seu programa é executado. msgstr "chown / var / run / test /". Agora, no seu aplicativo, altere o local do arquivo PID para /var/run/test/test.pid. Isso deve fazer as coisas funcionarem para você.

brincalhão
fonte
2

Que tal usar o bit "pegajoso" em / var / run?

chmod + t / var / executar?

Provavelmente atrapalhe alguns outros aplicativos, mas parece que seria outra solução.

No entanto, continuarei criando uma pasta / var / run separada por enquanto.

user68971
fonte
1

As entradas no /etc/permissionssão permanentes. Faça uma entrada lá para tornar permanente a propriedade e as permissões de um diretório.

user432133
fonte
-6

Para evitar colocar o usuário do programa no grupo raiz, permita que outros acessem a gravação:

# chmod 757
Ivan Chuchman
fonte
3
Nunca faça um chmod 757 em / var / run! Isto causaria um problema de segurança grave
michel
11
Esta é uma péssima ideia. Causaria um problema de segurança potencialmente enorme
Tom O'Connor
Mesmo se ignorarmos o problema de segurança, chmod 757também funcionará apenas até a próxima reinicialização. Desculpe por criar uma nova resposta, mas parece não haver maneira de responder ao outro comentário.
Vladimir Nicolici
@michel, o autor nunca disse para fazer um chmodon /var/run. O autor pode ter feito isso para o subdiretório do aplicativo. Não tenho certeza do que se trata.
Acumenos