【问题标题】:.sh script that executes command as "real" root.sh 脚本以“真实”root 身份执行命令
【发布时间】:2020-09-11 17:58:46
【问题描述】:

我想编写一个 .sh 脚本,向我的 ejabberd 帐户发送消息。 (脚本被 apache2 标准用户“www-data”“调用”)。

脚本应该执行以下命令:ejabberdctl send_message chat admin@my-domain user@my-domain "title" "my message"

但是,如果没有“成为”root 用户,我将无法运行任何 ejabberdctl 命令。所以sudo ejabberdctl 不起作用(在终端或任何 .sh 脚本中)。我只能在 sudo -s 后面跟着 ejabberdctl my-command,这在 .sh-scripts 中不起作用(或者我错了吗?)。

(我在本教程的帮助下在 ubuntu 20.04 上安装了 ejabberd 20.07:Install Ejabberd...

有没有办法以“真正的根”身份在 .sh 脚本中运行命令,或者创建一个根会话并在那里运行命令(就像我手动使用 sudo -s ... 一样)?

我的问题有什么解决方案,还是我应该以“正常方式”安装 ejabberd?

【问题讨论】:

    标签: sh root sudo ejabberd


    【解决方案1】:

    当从源代码编译和安装 ejabberd 时,可以使用类似的东西来准备它

    ./configure -–enable-group=ejagroup 
    

    然后,您可以简单地创建系统组ejagroup,并将www-data 用户添加到该ejagroup。 见https://docs.ejabberd.im/admin/installation/#options

    在您使用 ProcessOne 的 Debian 软件包的情况下,我看到教程提到您创建了一个名为 ejabberd 的系统帐户。也许您可以从该帐户运行 ejabberdctl,不需要root

    【讨论】:

    • 如果我尝试sudo runuser -l ejabberd -c '/path/to/my_script.sh',我仍然会收到错误:ejabberdctl: command not found。我认为这与bashrc 文件有关。
    【解决方案2】:

    我仍然不知道为什么我只能以 root 的身份“登录”时运行 ejabberdctlsudo ejabberdctl 仍然无法工作)

    我的 .bashrc 文件有误吗? (最后一行:PATH=$PATH:/opt/ejabberd-20.07/bin/

    无论如何,至少我可以与任何用户一起运行sudo /opt/ejabberd-20.07/bin/ejabberdctl my_command,就像他们在这里所做的那样:Ejabberd sbin/ejabberdctl start (No such file or directory)

    有没有其他人在sudo: any_command: not found 上遇到过这种奇怪的行为?

    如果您对我的问题有更“优雅”的解决方案,请告诉我。

    【讨论】:

      最近更新 更多