Git
sudoers nopasswd 切換使用者並執行節點不工作
我試圖通過將以下行添加到我的 /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