Shebangs não gosta de sudo no OSX

0

Usar o sudo no shebang parece completamente quebrado. O código a seguir:

#!/usr/bin/sudo /bin/bash
echo "this should work"

funciona bem no Ubuntu, mas no OSX me dá:

sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 
'nosuid' option set or an NFS file system without root privileges?

Alguma idéia de como fazer isso funcionar?

Nota: o sudo funciona bem: senão

/usr/bin/sudo echo "This works"
Password:
This works
    
por user208769 21.12.2013 / 12:46

2 respostas

3

Parece que quando o kernel do OS X inicia um interpretador através de uma linha shebang, ele não verifica o bit setuid no executável do interpretador. Provavelmente deve ser considerado um bug, embora seja possível que seja considerado uma medida de segurança ... mas, se for o caso, não é muito útil, porque há uma solução bastante simples:

#!/usr/bin/env /usr/bin/sudo /bin/bash
echo "running as $USER"

... isso faz o kernel passar o script para / usr / bin / env (sem verificar setuid, mas não importa aqui), que passa para / usr / bin / sudo (através do lançamento normal processo, que faz obedecer o sinalizador setuid), que muda para root e passa o script para / bin / bash.

(BTW, #!/usr/bin/env /usr/bin/sudo /usr/bin/ruby também funciona.)

    
por 22.12.2013 / 01:01
0

Encontrei uma solução alternativa, embora eu adoraria saber se há uma maneira melhor de fazer isso.

O uso original foi para um script ruby - descobri que o ruby permite que você faça o seguinte:

#!/bin/bash
echo "sudo-running ${BASH_SOURCE[0]}"
sudo ruby "${BASH_SOURCE[0]}"
exit $?

#!ruby
puts "It works! File is #{__FILE__}"

Claro, isso só funciona em ruby:)

    
por 21.12.2013 / 13:27