我有一个这样的场景,我想使用 capistrano 部署我的 ruby on Rails 应用程序:
- Web 应用程序位于瘦集群上,配置文件存储在/etc/thin 下。/etc/init.d/thin 中还有一个初始化脚本,因此每当我的服务器需要重新启动时它就会自动启动
- nginx 也以相同的方式执行(作为 init 脚本守护进程)
- 为了确保万一有人入侵了我的网络服务器,我不希望他们做一些太可怕的事情,因此不允许网络用户使用 sudo。
- Thin 和 nginx 都以 Web 用户身份运行以强制执行此类安全性
现在,当我需要进行部署时,我需要将文件安装在/home/webuser/railsapps/helloworld 下,并且之后我需要 cap 脚本重新启动我的 Thin。我想保留 Web 用户拥有的所有文件,因此 cap 脚本主要用户以 Web 用户身份运行。现在,当我想重新启动瘦守护程序时,问题就出现了,因为 web 用户无法使用 sudo。
我在想是否可以调用两个单独的 session - webuser 进行文件部署,然后调用一个特殊的 sudoer 来重新启动守护进程。谁能给我一个关于此的示例脚本?
最佳答案
这可能不是您想要的,但您实际上可以在 sudoers 文件中执行类似的操作:
someuser ALL=NOPASSWD: /etc/init.d/apache2
让某个用户运行/etc/init.d/apache2
如果您尝试做其他事情:
$ sudo ls
[sudo] password for someuser:
Sorry, user someuser is not allowed to execute '/bin/ls' as root on ...
关于ruby-on-rails - Capistrano + Thin + nginx 不允许用户使用 sudo howto?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/156941/