【问题标题】:php impersonate userphp模拟用户
【发布时间】:2013-03-21 09:34:15
【问题描述】:

我想要做的是从网页以系统root 用户身份运行shell 命令。

根据我的研究,无法在 Linux 上的 PHP 中模拟系统用户(准确地说是 CentOS 6.3 和 PHP 5.4.13)。

到目前为止,我已经安装了sudo,并在/etc/sudoers 中添加了一行apache ALL=(ALL) :NOPASSWD ALL(用于测试)。然后,我在网站的根目录中创建了一个简单的 php 文件:

<?php shell_exec('sudo -u root touch somefile'); ?>

但是,如果我运行,什么也不会发生:

<?php shell_exec('whoami'); ?>

我得到apache 作为结果,所以我知道至少 shell_exec 正在工作。

如果我从 cli su apache 尝试,我会得到 This account is currently not available.,我认为这是因为 apache 定义了 nologin (?) apache:x:48:48:Apache:/var/www:/sbin/nologin

那么,以 root 身份从 php 运行命令的正确方法是什么?

作为我尝试以 root 身份运行的示例,我想使用从 Web 控制面板调用的以下命令行将证书添加到 /etc/ssl/certs/https

openssl req -new -nodes -x509 -days 3650 \
 -subj "/emailAddress=${ssl_email}/CN=ca.${domain_name}/OU=${ssl_organisational_unit}/O=${ssl_organisation}/L=${ssl_location}/ST=${ssl_state}/C=${ssl_country}" \
 -keyout "${certroot}/cacert.pem" -out "${certroot}/cacert.pem"

非常感谢您的帮助。

【问题讨论】:

  • 您是否尝试过在批处理文件中编写 sudo 命令并从 PHP 中调用它?
  • 这是在 linux 上,所以批处理文件是指 shell 脚本吗?

标签: php linux shell-exec


【解决方案1】:

啊哈!!!明白了!

写完没多久,发现sudo in php exec()

答案是把Defaults requiretty/etc/sudoers注释掉

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 2017-12-10
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多