php模拟用户
Posted
技术标签:
【中文标题】php模拟用户【英文标题】:php impersonate user 【发布时间】: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 脚本吗? 【参考方案1】:啊哈!!!明白了!
写完没多久,发现sudo in php exec()
答案是把Defaults requiretty
从/etc/sudoers
注释掉
【讨论】:
以上是关于php模拟用户的主要内容,如果未能解决你的问题,请参考以下文章
PHP 模拟 HTTP 基本认证(Basic Authentication)