use*_*769 1 linux sudo osx-mavericks shebang macos
在 shebang 中使用 sudo 似乎完全被破坏了。下面的代码:
#!/usr/bin/sudo /bin/bash
echo "this should work"
Run Code Online (Sandbox Code Playgroud)
在 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?
Run Code Online (Sandbox Code Playgroud)
有什么想法如何让它发挥作用吗?
注意: sudo 工作得很好,否则:
/usr/bin/sudo echo "This works"
Password:
This works
Run Code Online (Sandbox Code Playgroud)
看来,当 OS X 内核通过 shebang 行启动解释器时,它不会检查解释器可执行文件上的 setuid 位。可能应该被视为一个错误,尽管它可能被视为一种安全措施......但如果是这样,它就不是一个非常有用的错误,因为有一个相当简单的解决方法:
#!/usr/bin/env /usr/bin/sudo /bin/bash
echo "running as $USER"
Run Code Online (Sandbox Code Playgroud)
...这使得内核将脚本传递到 /usr/bin/env (不检查 setuid,但这在这里并不重要),后者将其传递到 /usr/bin/sudo (通过正常的启动过程,这确实遵守 setuid 标志),它切换到 root 并将脚本传递到 /bin/bash。
(顺便说一句,#!/usr/bin/env /usr/bin/sudo /usr/bin/ruby
也有效。)
归档时间: |
|
查看次数: |
1299 次 |
最近记录: |