1

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

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

到目前为止,我已经安装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

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

作为我试图通过以 root 身份运行来实现的示例,我想/etc/ssl/certs/https使用从 Web 控制面板调用的以下命令行添加证书:

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"

非常感谢您的帮助。

4

1 回答 1

0

啊哈!!!知道了!

在我写完之后不久,我在 php exec() 中找到了 sudo

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

于 2013-03-21T09:45:43.617 回答