Também tive esse problema algumas vezes, com comandos básicos como cd. Usando o dzdo cdretorno "comando não encontrado". Claro que mais tarde percebeu que cding em um diretório que não tenho permissões, não vai ajudar muito, então eu nem precisa de um shell de root ou necessidade de dzdo ls, dzdo mv, etc. o conteúdo de fora que dir.
Curinga
2
O problema sudo cdé que cdé um comando interno, não um programa. Se você deseja acessar um diretório ao qual não tem acesso e (por exemplo) renomear um arquivo lá, você pode (por exemplo) sudo mv dir/oldfile dir/newfileousudo sh -c "cd dir; mv oldfile newfile" .
G-Man Diz 'Reinstate Monica'
Respostas:
13
Quando você sudoobtém um pré-configurado $PATH, que é (supostamente) algo parecido com o caminho padrão do usuário root . Seu programa não está nessa lista de diretórios identificados por $PATH.
O sudo tenta ser seguro ao executar comandos externos.
Existem duas maneiras distintas de lidar com variáveis de ambiente. Por padrão, a
opção env_resetsudoers está ativada. Este comando faz com que sejam executados com um ambiente mínimo que contém TERM,
PATH, HOME, SHELL, LOGNAME, USERe USERNAME, além de variáveis do processo de chamada permitida pelos env_checke env_keepsudoers opções. Existe efetivamente uma lista de permissões para variáveis de ambiente.
Se você não pode configurar sudopara preservar o seu $PATH, a solução alternativa usual é especificar o nome do caminho completo do programa. Isso pode não funcionar bem com scripts que chamam outros executáveis no diretório (não acessado).
Você deve especificar o caminho completo. Também é mais seguro; Se você não especificar o caminho, é possível que um invasor crie outro programa que será executado com permissões de root.
Além disso, você precisa inserir uma linha /etc/sudoerspara permitir isso. man sudoerspara a sintaxe, é demais colocar aqui.
cd
. Usando odzdo cd
retorno "comando não encontrado". Claro que mais tarde percebeu quecd
ing em um diretório que não tenho permissões, não vai ajudar muito, então eu nem precisa de um shell de root ou necessidade dedzdo ls
,dzdo mv
, etc. o conteúdo de fora que dir.sudo cd
é quecd
é um comando interno, não um programa. Se você deseja acessar um diretório ao qual não tem acesso e (por exemplo) renomear um arquivo lá, você pode (por exemplo)sudo mv dir/oldfile dir/newfile
ousudo sh -c "cd dir; mv oldfile newfile"
.Respostas:
Quando você
sudo
obtém um pré-configurado$PATH
, que é (supostamente) algo parecido com o caminho padrão do usuário root . Seu programa não está nessa lista de diretórios identificados por$PATH
.Veja por exemplo
sudo
preserve $ PATH?PATH
)Se você não pode configurar
sudo
para preservar o seu$PATH
, a solução alternativa usual é especificar o nome do caminho completo do programa. Isso pode não funcionar bem com scripts que chamam outros executáveis no diretório (não acessado).fonte
Você deve especificar o caminho completo. Também é mais seguro; Se você não especificar o caminho, é possível que um invasor crie outro programa que será executado com permissões de root.
Além disso, você precisa inserir uma linha
/etc/sudoers
para permitir isso.man sudoers
para a sintaxe, é demais colocar aqui.fonte