2012-12-17 67 views
0

背景:sudoers文件的rvmsudo乘客安裝-Apache2的模塊

我有一個是每天新鮮部署的應用程序 - 虛擬機被創建,然後根爲系統創建一個「systemuser」,這然後安裝該應用程序。

它的運行:

  • 的CentOS 6
  • RVM
  • 的Ruby 1.8.7 on Rails的
  • 乘客

它的設置方式,我必須有紅寶石的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,紅寶石,打捆/寶石,然後在Apache passenger2的命令?

是的,我讀過的 「文檔」 歡迎https://rvm.io/integration/passenger/

創意的解決方案!我意識到有人可能會說這看起來像一個非常冒險的系統,我同意你的看法。但目前,我很難在不理解該乘客安裝腳本正在運行的命令的情況下對其進行改進。

去除前面的 「ENV」 和 「慶典」,並加入 「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

/usr/bin/env是一個允許運行任何命令的路由器,對於/bin/bash也是如此,您將不得不添加which passenger-install-apache2-module而不是它們。

+0

真棒。根據您的建議,我已將此行更改爲: 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 * ...但我仍然看到相同的結果。有可能是一個sudo緩存或什麼?我有點迷失在sudo上。 – MonkeyWidget

+0

你仍然有危險的命令,試試:'systemuser ALL = NOPASSWD:passenger-install-apache2-module,/ etc/init。d/httpd *' – mpapis

+0

我會的,謝謝。有關爲什麼它仍然要求乘客安裝apache2模塊的密碼,即使它在NOPASSWORD行中的任何想法? – MonkeyWidget