【问题标题】:how to access to a server as root user with sudo in php如何在 php 中使用 sudo 以 root 用户身份访问服务器
【发布时间】:2017-03-03 14:22:41
【问题描述】:

如果我正在执行多个这样的命令

'sudo -s && cd /apps/10.0.10.200/wso2am-1.7.0/repository/logs && tail wso2carbon.log'

但是当我用我的用户登录服务器时,我必须通过执行以下命令来获得 root 权限

sudo -s

然后我还必须重新输入密码。 所以我的问题是当我执行上面的命令时,我怎样才能传递我的密码。因为我必须执行命令并等到它要求输入密码。 请指导我解决。 这是我的代码。

include('Net/SSH2.php');
$ssh = new Net_SSH2('10.0.10.200');
$ssh->login('xxxxx', 'xxxx') or die("Login failed");
echo $ssh->exec('sudo -s && cd /apps/10.0.10.200/wso2am-1.7.0/repository/logs && tail wso2carbon.log');

【问题讨论】:

  • 这听起来是个非常糟糕的主意。你到底需要什么root权限?如果只是为了读取日志,请更改该文件的所有权或权限。
  • 但问题是,它超出了我的控制范围。所以唯一的方法是用我的用户登录服务器并用 sudo-s 更改用户角色。那么我该如何解决这个问题
  • 坏主意,但是:superuser.com/questions/67765/…

标签: php linux terminal


【解决方案1】:

这是一个非常糟糕的主意,只要您需要在代码中保留用户密码,这代表了不可忽视的安全问题(对 ssh 服务器的完全远程访问)。您应该在要连接的 ssh 服务器上拥有一个特殊帐户,该帐户允许访问您要显示的日志文件。

但是,如果您查看 this superuser question 或运行 sudo --help。您会看到可以使用sudo -S 获取sudo 命令从stdin 读取密码。

所以这应该可以解决问题:

$echo <password> | sudo -S <command>

使用php:

echo $ssh->exec('echo '.$password.'| sudo -S tail /apps/10.0.10.200/wso2am-1.7.0/repository/logs/wso2carbon.log');

【讨论】:

    【解决方案2】:

    转到您的服务器并向您的用户提供无需密码的 sudoers 权限。

    这是非常不安全的,但您可以使用命令 sudo visudo 编辑您的 /etc/sudoers

    此命令将在终端中打开/etc/sudoers 文件,现在您可以使用以下行在其中添加用户条目,以便在没有密码的情况下执行 sudoers 命令:

    <user_name> ALL=NOPASSWD:ALL
    

    将上面一行中的 user_name 替换为您的用户名。

    如果您的语法出错,您可能会损坏您的 sudoers 文件,因此将无法执行 sudo 命令。 如果发生这种情况,请使用此命令重建您的 sudo 文件:

    pkexec visudo
    

    然后输入sudo密码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 2016-09-14
      • 2015-04-29
      • 2016-03-16
      • 2020-06-08
      • 2018-12-12
      • 2019-09-06
      相关资源
      最近更新 更多