以 www-data 形式启动守护进程

以 www-data 形式启动守护进程

有没有一个好的方法可以以普通用户身份启动守护进程?

我想在我的家庭服务器上放置一个小脚本来启动和停止 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文件中。

ProFTPd 用户指令文档

对于 MySQL,输入:

user = someusername

/etc/mysql/my.cnf

mysqld 用户选项文档


对于密码位,我假设您正在尝试输入您的sudo密码?

这绝不是一个好办法。

一个更好的方法是将如下行添加到/etc/sudoersvia 中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

相关内容