php模仿用户

时间:2013-03-21 09:34:15

标签: php linux shell-exec

我要做的是从网页运行shell命令作为系统root用户。

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

到目前为止,我已经安装了sudo并在apache ALL=(ALL) :NOPASSWD ALL添加了一行/etc/sudoers(用于测试)。然后我在我的网站的根目录中创建了一个简单的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"

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

啊哈!明白了!

我写完这篇文章后不久,我找到了sudo in php exec()

答案是从Defaults requiretty

注释掉/etc/sudoers