sudo -u nome_do_usuário -s “cmd arg” retorna o comando não encontrado

8

Eu costumava executar o comando:

sudo -u elasticsearch -s "ulimit -Hn"

e ele estava retornando o valor de ulimit -Hn como visto pelo usuário elasticsearch até que eu tentei no Ubuntu 11.10. Lá ele retorna:

/bin/bash: ulimit -Hn: command not found

Eu tentei alguns comandos diferentes, e quando eu uso um argumento eu sempre recebo "comando não encontrado":

$ sudo -u elasticsearch -s "ls all.sh"
/bin/bash: ls all.sh: command not found

Alguma idéia de como eu posso executar um comando que requer argumentos através de sudo ?

    
por Joaquin Cuenca Abela 10.11.2011 / 12:46

1 resposta

15

Você precisa remover as aspas duplas. Ele está tentando executar um comando chamado "ulimit -Hn" como um único comando, espaços e tudo. -s precisa ser a última opção sudo na linha de comando sudo , e todos os argumentos a seguir são passados para $SHELL -c para execução.

sudo -u elasticsearch -s ulimit -Hn

Eu acho que a maneira como o -s é processado mudou, já que a maneira atual permite que você passe argumentos com espaços para $SHELL , escapando-os na linha de comando:

$ touch '/tmp/foo bar'
$ sudo -s rm '/tmp/foo bar'

O método antigo de manipulação de argumentos dividiria esse argumento '/tmp/foo bar' em dois, quebrando o comando.

    
por 10.11.2011 / 13:21

Tags