Como adicionar novos elementos ao PATH para daemons (ou outras práticas recomendadas)?

3

Eu quero adicionar alguns scripts para trabalho administrativo personalizado em um servidor Linux (Ubuntu 12.04). Em última análise, esses scripts são scripts de retorno de chamada de pelo menos um daemon (no meu caso, o PostgreSQL, mas isso não importa). Para que o daemon encontre meu script, devo fornecer o caminho completo; Eu usei /opt/<package>/bin de acordo com as FHS .

Quando eu adiciono esse caminho ao PATH em /etc/environment , o usuário pode chamar o script sem fornecer o caminho completo, mas o daemon não pode; apenas diz "não encontrado".

Então, minha pergunta é basicamente dupla:

  1. Como adiciono caminhos ao PATH para daemons?
  2. É uma boa ideia, afinal? Ou eu deveria sempre usar nomes de caminho completos?
por musiKk 07.04.2014 / 17:36

2 respostas

3

When I add that path to PATH in /etc/environment, the user can call the script without providing the full path but the daemon can not; it just says "not found".

De acordo com esta fonte , que é a documentação do IBM AIX (não consegui encontrar mais nada), mas é presumivelmente verdadeira em geral: 1

The first file that the operating system uses at login time is the /etc/environment file. The /etc/environment file contains variables specifying the basic environment for all processes.

Note que não é originado em nenhum sistema em .profile , então isso é codificado em algum lugar. No entanto, se for aplicado "no momento do login", não será aplicado a um daemon, que é iniciado pelo init e nunca efetua login (embora "para todos os processos" contradiga isso, talvez tenha sido apenas uma má escolha de palavras). / p>

De acordo com este superusuário Q & A , /etc/environment faz parte do PAM , que suporta a premissa "no login" e novamente significa que não será usado por daemons gerados pelo init. Existem muitas outras referências para isso também, mas parece que não há documentação do PAM.

should I rather always use full path names?

Este é o processo mais comum e geralmente recomendado - é possível que os daemons iniciem sem $ PATH. Assim, você pode definir isso em um script de inicialização ou, como você diz, usar nomes de caminho completos conforme apropriado.

1. "/ etc / environment" não aparece de forma alguma no que parecem ser as especificações POSIX relevantes [1] [2] .

    
por 07.04.2014 / 17:54
1

Isso é muito dependente da distribuição. / etc / environment pertence ao PAM no Linux (como já foi apontado). No entanto, o / etc / environment é para logins, não para daemons. Para serviços e daemons, geralmente há alguns scripts de configuração que são originados (geralmente por algum script rc), por exemplo, eles são encontrados em /etc/conf.d/ com o Gentoo Linux. Mas, novamente, isso também é muito dependente da distribuição. O Systemd para iniciar serviços é outra história.

Melhor chamar programas pelo nome absoluto - essa é também a melhor prática de segurança, pois evita qualquer ambigüidade sobre qual programa deve ser executado.

    
por 07.04.2014 / 21:21