Script customizado executado com sudo - comando não encontrado

1

Problema:

Executando um script como sudo retorna

sudo: mount-remove-hiberfile: command not found

Info:

  • Pasta de scripts: '/ scripts' (todos os meus scripts personalizados são mantidos aqui)

  • Meu usuário: 'cybex'

cybex @ cybex-W55xEU: ~ $ echo $ PATH // e 'sudo echo $ PATH' retornam o mesmo caminho

/home/cybex/.rbenv/plugins/ruby-build/bin:/home/cybex/.rbenv/shims:/home/cybex/.rbenv/bin:/home/cybex/.rbenv/plugins/ruby-build/bin:/home/cybex/.rbenv/shims:/home/cybex/.rbenv/bin:/home/cybex/bin:/scripts:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/scripts:/snap/bin

raiz @ cybex-W55xEU: / home / cybex # echo $ PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/scripts

O script 'mount-remove-hiberfile' não pode ser executado como um usuário normal, portanto, eu precisaria executar sudo mount-remove-hiberfile .

Por que o sudo não detecta esse script?

nota: encontrei algumas perguntas sobre isso, mas nenhuma que respondeu à minha pergunta

UPDATE

ls -l /scripts/
total 20
-rwxr-xr-x 1 root root   95 Apr 26 22:45 apt-manage
-rwxr-xr-x 1 root root   40 Apr 26 22:45 apt-update
-rwxr-xr-x 1 root root  769 Apr 28 20:47 create-desktop-file
-rwxr-xr-x 1 root root  370 May 16 22:45 extractgst.sh
-rwxr-xr-x 1 root root 1085 May 16 21:25 mount-remove-hiberfile

UPDATE (inclua um colar que inclua o comando, o erro e o diretório)

cybex@cybex-W55xEU:~$ pwd
/home/cybex
cybex@cybex-W55xEU:~$ ls -l /scripts/
total 52
-rwxr-xr-x 1 root root   95 Apr 26 22:45 apt-manage
-rwxr-xr-x 1 root root 2283 May 21 16:59 backup
-rwxr-xr-x 1 root root  109 May 21 16:59 check-port
-rwxr-xr-x 1 root root 2185 May 21 16:59 connected
-rwxr-xr-x 1 root root  769 Apr 28 20:47 create-desktop-file
-rwxr-xr-x 1 root root  164 May 21 16:59 download
-rwxr-xr-x 1 root root  370 May 16 22:45 extractgst.sh
-rwxr-xr-x 1 root root 5142 May 21 16:59 firewall
-rwxr-xr-x 1 root root 3881 May 21 16:59 firewall.save
-rwxr-xr-x 1 root root 1085 May 16 21:25 mount-remove-hiberfile
-rwxr-xr-x 1 root root   80 May 21 16:59 portquiz
-rwxr-xr-x 1 root root   84 May 21 16:59 space-used
drwxr-xr-x 1 root root    0 May 21 17:00 tmp
cybex@cybex-W55xEU:~$ sudo mount-remove-hiberfile 
sudo: mount-remove-hiberfile: command not found
    
por Cybex 21.05.2016 / 11:49

2 respostas

3

A configuração do sudo por padrão irá redefinir o caminho, independentemente de como o sudo é chamado. Aqui estão duas maneiras comuns de contornar isso, a primeira é a mudança permanente, a segunda é um argumento de linha de comando para o sudo (que você pode adicionar como um alias).

permanente & mudança global

Em /etc/sudoers , você precisa modificar duas configurações:

sudo visudo

No arquivo sudo há por padrão uma configuração chamada Default env_reset , que limpa as configurações ambientais do shell de chamadas do sudo, mesmo que o sudo seja chamado com -E (keep environment).

No arquivo, procure uma configuração chamada env_keep . Isso determina quais variáveis ambientais podem ser passadas para o ambiente raiz que é criado com o sudo. Normalmente, há uma série de instruções env_keep="xxx" e env_keep +="xxx" no arquivo sudoers padrão. Por padrão, o PATH não é um dos envs permitidos para passar.

Adicione o PATH a uma dessas entradas ou comente a linha env_reset. Se você não tiver entradas env_keep, procure por Defaults env_reset e adicione uma nova entrada env_keep = "PATH" depois dela.

Em segundo lugar, mesmo se você permitir que a variável PATH passe para o sudo env, o caminho é limitado em sudoers pela configuração Defaults secure_path='...' Você pode comentar essa configuração ou adicionar o caminho em que seu script está na entrada .

Depois disso, o sudo manterá a variável PATH e executará seu script.

solução de linha de comando

Para evitar a modificação do arquivo sudoers, você pode chamar o sudo com esta sintaxe:

sudo env "PATH=$PATH" <script name>
    
por 22.05.2016 / 03:03
3

O sudo não usa, por padrão, o seu caminho e não executa o bashrc ou equivalente do root. Veja link para uma descrição completa.

    
por 22.05.2016 / 01:23