有没有一个好的方法可以以普通用户身份启动守护进程?
我想在我的家庭服务器上放置一个小脚本来启动和停止 proftpd、mysql 和 samba 等服务。我试过这样做,但没有成功。
sudo -u root -S /etc/init.d/proftpd start < /home/name/password
答案1
我假设你试图让www-data
用户能够启动和停止某些守护进程,但你不想更改守护进程运行的用户。你可以轻松地使用须藤。首先,运行visudo
以安全编辑/etc/sudoers
。现在,定义一个命令别名,列出您希望用户www-data
能够控制的守护进程的所有初始化脚本。别名的名称是任意的。我不知道 Debian 上的初始化脚本的确切名称。总的来说,该行将看起来像
Cmnd_Alias WEBDAEMONS /etc/init.d/proftpd, /etc/init.d/mysql, /etc/init.d/samba
sudoers
接下来,授权 www-data 用户在安装此文件的任何服务器上以 root 身份运行这些命令,无需密码。看起来应该是这样的
www-data ALL = (root) NOPASSWD: WEBDAEMONS
最后,保存文件并退出 visudo。此时,您应该能够以用户身份登录www-data
并使用 sudo 运行您在命令别名中输入的命令,而无需输入密码。您可以使用以下命令进行测试:
billy@example:~$ sudo -i -u www-data bash
[sudo] password for billy:
www-data@example:~$ sudo /etc/init.d/proftpd restart
Restarting proftpd
www-data@example:~$ exit
答案2
尝试以下方法:
start-stop-daemon --start --chuid www-data
完整详细信息请参阅man start-stop-daemon(8)
。
请注意,对于 ProFTPd,您只需输入:
User www-data
在你的proftpd.conf
文件中。
对于 MySQL,输入:
user = someusername
在/etc/mysql/my.cnf
。
对于密码位,我假设您正在尝试输入您的sudo
密码?
这绝不是一个好办法。
一个更好的方法是将如下行添加到/etc/sudoers
via 中visudo
:
MYDAEMONS = /home/user/bin/startproftpd, /home/user/bin/startmysql
youruser ALL = (root) NOPASSWD: MYDAEMONS
但我觉得我们还是遗漏了一些东西。为什么需要这个脚本?只是为了更改守护进程运行的用户吗?
答案3
如果您的守护进程与 start-stop-daemon 不能很好地配合,您可以随时使用 sudo -u www-data /path/to/command