Adicionado diretório bin ao meu caminho, não pode executar comandos nele com 'comando sudo'

7

Eu fiz um diretório bin na minha pasta pessoal onde coloco todos os meus scripts. Então no meu .bashrc eu adicionei o seguinte:

export PATH=$PATH:/home/myusername/bin

Para poder acessar os arquivos que coloquei lá de qualquer lugar. Mas alguns dos scripts precisam ser executados como root. Então eu pensei, eu poderia ligar simbolicamente o meu .bashrc como root, (como em /root/.bashrc aponta para /home/myusername/.bashrc, não sei se isso é inteligente) então quando eu preciso executar um script como root Eu apenas posso fazer:

sudo program_that_requires_root

Mas então eu recebo um:

sudo: program_that_requires_root: command not found

Se eu fizer login como root e executar o programa, ele funcionará bem. Então, qual é a maneira correta de realizar o que eu quero?

    
por Carlito 18.10.2012 / 18:58

3 respostas

4

Você precisa garantir que essas duas linhas estejam presentes no arquivo sudoers.

Defaults        env_reset
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:$

Veja estes URLs para mais detalhes:

por 19.10.2012 / 14:35
1

sudo redefine a variável de ambiente PATH para um padrão interno ou fornecido pelo administrador, na maioria das configurações. Então você não poderá digitar apenas sudo myscript .

Você pode escrever uma função de wrapper:

sudo () {
  local cmd
  case $1 in
    -*) :;; # there are options, change nothing
    */*) :;; # explicit path, change nothing
    *) # a command name, look it up in our $PATH
      cmd=$(type -p -- "$1")
      if [[ -n $cmd ]]; then shift; set -- "$c" "$@"; fi;;
  esac
  command sudo "$@"
}

(Isso é para o bash; altere type -P para type -p no ksh ou zsh.)

    
por 19.10.2012 / 03:26
0

Por padrão, o sudo redefine o ambiente. Você já tentou adicionar o caminho para .bashrc do root? Ou invoque sudo com -E (que só funciona se setenv em sudoers estiver configurado, ou o respectivo comando tiver o conjunto de tags SETENV).

    
por 18.10.2012 / 21:25