Script personalizado executado com sudo – comando não encontrado

Script personalizado executado com sudo – comando não encontrado

Problema:

Executando um script conforme o sudo retorna

sudo: mount-remove-hiberfile: command not found

Informações:

  • 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

root@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 o 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

ATUALIZAR

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 (inclui uma pasta que inclui 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

Responder1

A configuração do sudo por padrão 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).

mudança permanente e global

Você /etc/sudoersprecisa modificar duas configurações:

sudo visudo

No arquivo sudoers, por padrão, há uma configuração chamada Default env_resetque limpa as configurações ambientais do shell dos chamadores do sudo, mesmo que o sudo seja chamado com -E (manter ambiente).

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

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

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

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

solução alternativa de linha de comando

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

sudo env "PATH=$PATH" <script name>

Responder2

sudo não usa, por padrão, seu caminho e não executa o bashrc do root ou equivalente. Verhttps://askubuntu.com/q/128413para obter uma descrição completa.

informação relacionada