Перейти к содержимому

Shebangs не любят sudo в OSX

0

Использование sudo в Шебанге кажется совершенно бесполезным. Следующий код:

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

отлично работает на Ubuntu, но на OSX дает мне:

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? 

Есть идеи, как заставить это работать?

Примечание: sudo работает просто отлично:

/usr/bin/sudo echo "This works" Password: This works 
878 просмотров
user208769 спросил 12 лет назад
U 201

2 ответа

3

It appears that when the OS X kernel launches an interpreter via a shebang line, it doesn't check for the setuid bit on the interpreter executable. Probably should be considered a bug, although it's possible it's considered a security measure... but if so it's not a very useful one, because there's a fairly simple workaround:

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

...this makes the kernel pass the script to /usr/bin/env (without checking for setuid, but it doesn't matter here), which passes it to /usr/bin/sudo (via the normal launch process, which does obey the setuid flag), which switches to root and passes the script to /bin/bash.

(BTW, #!/usr/bin/env /usr/bin/sudo /usr/bin/ruby works as well.)

Ха - отличный ответ! Я думал, что Шебанг потерпит неудачу с таким количеством параметров в "env". В OSX sudo и ruby могут быть написаны без / usr / bin, хотя по какой-то причине, странным образом, Ubuntu нуждается в / usr / bin на ruby. Это оставляет меня с проблемой, так как мой ruby ​​находится в ~ / .rbenv / stubs / ruby - может быть, я должен сделать ссылку и сделать это! Спасибо, ты дал мне гораздо ближе к хорошему решению!

user208769 · 12 лет назад · 0
Gordon Davisson ответил 12 лет назад
G 25 325
0

Я нашел обходной путь, хотя я хотел бы знать, есть ли лучший способ сделать это.

Первоначальное использование было для сценария ruby ​​- я обнаружил, что ruby ​​позволяет вам делать следующее:

#!/bin/bash echo "sudo-running $" sudo ruby "$" exit $?  #!ruby puts "It works! File is #" 

Конечно, это работает только в ruby ​​:)

user208769 ответил 12 лет назад
U 201