简而言之:如何使sudo每次都不刷新PATH?
我在服务器上部署了一些用Ruby on Rails编写的网站(Debian测试)。我使用Mongrel + Nginx来托管它们,但是当我需要重新启动Mongrel(例如进行一些更改后)时,会出现一个问题。
所有站点都在VCS中进行了检查(git,但这并不重要),并将所有者和组设置为我的用户,而Mongrel则在杂项用户的严格限制下运行,呵呵。因此,Mongrel必须在root(可以自动更改UID)或mongrel下启动。
为了管理杂种,我使用mongrel_cluster gem,因为它允许通过一个命令启动或停止任何数量的Mongrel服务器。但是它需要目录/var/lib/gems/1.8/bin位于PATH中:这不足以用绝对路径启动它。
修改root .bashrc中的PATH并没有改变,调整sudo的env_reset和env_keep也没有。
那么问题来了:如何将目录添加到PATH或将用户的PATH保留在sudo中?
更新:一些例子
$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/var/lib/gems/1.8/bin
$ sudo cat /etc/sudoers | egrep -v '^$|^#'
Defaults env_keep = "PATH"
root ALL=(ALL) ALL
%sudo ALL=NOPASSWD: ALL
$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
我也可以说,它在Debian稳定版(lenny)中也是如此。