背景:
我有一个每天都新部署的应用程序 - 创建一个VM,然后该系统的root用户创建一个“systemuser”,然后安装该应用程序。
正在运行:
它的设置方式,我必须安装Ruby on Rails并安装乘客。为此,运行服务的用户具有sudo权限,但目的是仅允许安装期间所需的命令。出于安全性和可维护性的原因,我们无法将sudo密码放在脚本中。
我的/ etc / sudoers包括:
systemuser ALL = NOPASSWD: /usr/bin/env, /bin/bash, /usr/local/rvm/rubies/ruby-1.8.7-p358/bin/gem, /bin/cp, /bin/ln, /bin/mv, /bin/rm, /etc/init.d/httpd *
问题:
直到最近,这种方法的变体才起作用。但是最近在某处(?)发生了某些变化,如果没有密码提示,rvmsudo命令就不再执行了。
$ rvmsudo passenger-install-apache2-module
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for systemuser:
问题:
在/ etc / sudoers中安装rvm,ruby,bundler / gem,然后在apache上安装passenger2的最小命令集是什么?
是的,我已阅读https://rvm.io/integration/passenger/
上的“文档”欢迎创意解决方案!我意识到有人可能会说这看起来像一个非常hacky的系统,我同意你的看法。但目前我很难在不了解这个乘客安装脚本运行的命令的情况下对其进行改进。
从前面删除“env”和“bash”并添加“rvm”会更进一步:
systemuser ALL = NOPASSWD: /usr/local/rvm/bin/rvmsudo, /usr/local/rvm/gems/ruby-1.8.7-p358/bin/passenger-install-apache2-module, /bin/cp, /bin/ln, /bin/mv, /bin/rm, /etc/init.d/httpd *
运行这个:
$ rvmsudo passenger-install-apache2-module
[sudo] password for systemuser:
感谢您的关注!
答案 0 :(得分:0)
/usr/bin/env
是允许运行任何命令的路由器,/bin/bash
也是如此,您必须添加which passenger-install-apache2-module
而不是它们。