Como tornar um script acessível ao usuário root?

1

Um usuário comum pode executar esse script, mas o root não consegue encontrá-lo.

Eu tenho um script simples que salvei em ~/bin . Eu atualizei o arquivo .profile para incluir essa pasta no PATH. Eu posso entrar no terminal, estar trabalhando em qualquer diretório, digitar o nome do script e rodar bem. Mas se nesse terminal eu mudar para root, o script não pode ser encontrado. Presumo que exista algum arquivo em algum lugar que precise de uma nova atualização do $ PATH, mas não sei qual.

    
por dhp904 30.09.2016 / 23:48

4 respostas

6

Se você estiver usando sudo , o que provavelmente é o caso, há uma política de segurança que modifica a variável de ambiente $ PATH para um caminho seguro (definido no arquivo / etc / sudoers ). O diretório ~ / bin não está incluído no conjunto padrão secure_path no arquivo sudoers , portanto a execução de sudo script não funcionaria, mas sudo ~/bin/script seria.

Você pode colocar o script em uma das pastas definidas no arquivo de configuração sudoers (por exemplo, / usr / local / bin secure_path também pode ser alterado no arquivo de configuração, embora não seja recomendado.

    
por IanC 01.10.2016 / 00:02
2

Para impedir temporariamente que sudo redefina seu caminho para secure_path , para um único comando, sem modificar nenhuma configuração global, você pode fazer:

sudo env PATH=$PATH command

Em que command é o nome do executável que você deseja executar, que está no seu PATH .

Você pode criar um alias para isso e adicionar ao seu próprio (não root) ~/.bashrc ... algo como

alias sudo2='sudo env PATH=$PATH'

Em seguida, você pode usar sudo2 command para executar um arquivo executável com sudo usando seu próprio PATH.

    
por Zanna 01.10.2016 / 00:10
0

Por que o script falha quando executado pelo root?

Você precisa verificar o caminho do usuário efetivo ... neste caso, root .

Execute isto:

(As duas primeiras linhas são os prompts mais os comandos. A última linha é a saída do comando.)

$ sudo su -
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

Recomendações para onde colocar seu script para ser executado por outras pessoas:

Crie um subdiretório abaixo de /opt para o seu projeto e coloque ali os scripts exec do seu projeto. Este é um lugar que sobreviverá a uma nova instalação do sistema operacional na mesma partição (menos a formatação, é claro).

A área de raiz dos seus scripts pode estar em:

/opt/myprojectname/myscriptfiles/

Agora você pode vincular seus scripts /usr/local/bin/ com

$ sudo ln -s /opt/myprojectname/myscriptfile/myscript.sh /usr/local/bin/myscript.sh'

Você não precisará alterar a variável root $ PATH, porque, como você pode ver no teste acima, ela já está lá.

Portanto, em vez de alterar o caminho da raiz, você pode alterar seu caminho para pesquisar o /opt/myprojectname/myscriptname

Como alternativa, você pode vincular seu ~/bin/myscript.sh a /usr/local/bin/myscript.sh .

    
por L. D. James 01.10.2016 / 00:01
0

Como outros já disseram, o ambiente privilegiado não é o mesmo que o do usuário e por boas razões. Existem basicamente duas soluções: (i) chamar seus scripts com o caminho deles, ou (ii) colocar seus scripts na raiz e movê-los para a hierarquia de arquivos (digamos, / usr / custom / bin mas o que funciona) e atualizar PATH do usuário, ao invés de tentar fazer o contrário.

    
por n.caillou 01.10.2016 / 09:10