Git

sudoers nopasswd 切換使用者並執行節點不工作

  • March 17, 2013

我試圖通過將以下行添加到我的 /etc/sudoers 文件的底部來防止在以 www 使用者身份執行 node 的命令上出現密碼提示:

gituser ALL=(ALL) NOPASSWD: /usr/bin/sudo -u web-user NODE_ENV=production /path/to/node app.js

我還嘗試將命令放入 shell 腳本並執行它,但也沒有任何樂趣:

gituser ALL=(root) NOPASSWD: /usr/local/sbin/startnode

有人對我做錯了什麼有任何想法嗎?

最終,我將把它作為一個新貴服務執行,所以命令將是“sudo service runnode stop/start”並從 git 鉤子觸發,但我想原理是一樣的。

僅供參考,sudoers 文件的全部內容:

Defaults        env_reset
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Defaults
root    ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo ALL=(ALL) ALL

gituser ALL=(ALL) NOPASSWD: /usr/bin/sudo -u web-user NODE_ENV=production /path/to/node app.js
gituser ALL=(root) NOPASSWD: /usr/local/sbin/startnode

謝謝大家的回答。通過執行以下操作,我設法在這篇文章的幫助下最終使其工作:

1. 使用單獨的腳本

將此行添加到 sudoers 文件(使用 visudo)。

gituser ALL=(web-user) NOPASSWD: /usr/local/sbin/startnode

文件 /usr/local/sbin/startnode 的內容更改為以下內容:

#!/bin/bash

cd /var/www/api.vitdsunshine.com/sun-express

########## BEFORE
# sudo -u web-user NODE_ENV=production /path/to/node app.js

########## AFTER
NODE_ENV=production /path/to/node app.js

這現在可以工作了:

$ sudo -u web-user startnode

2.使用完整的命令

將此行添加到 sudoers 文件(使用 visudo)。

gituser ALL=(web-user) NOPASSWD: /path/to/node

嘗試將環境變數設置為命令的一部分會導致它失敗。

$ sudo -u web-user NODE_ENV=production /path/to/node app.js
sudo: sorry, you are not allowed to set the following environment variables: NODE_ENV

解決方案:您必須在網路使用者的 .bashrc 文件或 /etc/environment 中設置此環境變數。

$ sudo -u web-user /path/to/node app.js
env production
Express server listening on port 9000

引用自:https://serverfault.com/questions/488488