`
happmaoo
  • 浏览: 4548183 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

PHP中运行只有root用户才可以运行的外部程序

阅读更多
在PHP中运行只有root用户才可以运行的外部程序,一直是个老问题,用常规的办法很难实现。这是因为一般情况下,PHP是作为APACHE的一个模块的,也就是说,PHP是APACHE的一部分,而APACHE除了suEXEC机制外,是不能以不同的用户ID来执行命令的,但suEXEC机制只能CGI有效。

网上曾经有一篇文章,说用调用"su - -c COMMAND"可以实现,但经过多次试验,发现不行,因为su命令必须在STDIN上输入root的密码。

怎么办?用常规的方法难以奏效,只能再想其它的方法了。成功的关键在于能有一个可以切换用户ID但又可以在命令上输入密码(或不用输入密码)的工具。有这样的工具吗?有,它就是super。

下面就具体说说如何来做?

要注意的是,安装和配置super,都要以root身份来进行。

第一步,切换到root下

第二步,安装super

先到ftp://ftp.mdtsoft.com/pub/super下载super-3.14.0-1.i386.rpm。这是一个RPM文件,其它包括了两个工具:setuid和super,以及它们的文档和man手册。用下面的命令将它安装到系统中:

% rpm -Uvh super-3.14.0-1.i386.rpm

你还可以用这个命令来查看这个RPM中的文件:

% rpm -qpl super-3.14.0-1.i386.rpm

从结果可以看到,两个工具都将被安装到/bin目录下。

第三步,配置super

super的配置文件是/etc/super.tab。这是一个文本文件,格式也比较复杂。不过,我们这里只要很简单的加上几行就可以了。至于详细的说明,可以通过man super.tab来查看。

假设运行Apache的用户是nobody,我们欲通过super来增加系统用户(调用useradd命令),那么我们只要在super.tab文件中加入以下这行:

auser /sbin/useradd nobody,hunte

第一段是super能够识别的命令的别名;第二段是该别名所对应的系统命令的全路径;第三段是可以运行该命令的用户列表,用逗号分隔。这里除了nobody外,还一个叫hunte的普通用户,是用于下面的测试。当然,你应该用你系统中有的任意一个普通用户。

至此,super的配置就算好了。

第四步,测试

以第三步中指定的非nobody用户登录,运行:

% /bin/super auser testuser

如果前面的配置没什么错误的话,用户testuser应该是成功地创建了。可以用:

% cat /etc/passwd | grep testuser

命令来验证一下。

第五步,在PHP中调用该命令

下面是PHP代码:

<?

if ($username)

{

//应该检查新用户是否已经存在

echo 正在创建用户<$username>...;

system(escapeshellcmd("/bin/super auser $username"));

}

?>

使用super,使得在PHP中以root身份运行外部命令不再是难事。试试看吧。

测试环境:RedHat Linux 7.0 (Kernel 2.4.3) + Apache 1.3.9 + PHP 4.0.4pl1

分享到:
评论

相关推荐

    apache2.2+mysql5.0+php5.1+Discuz!4.1配置

    MySQL 的配置文件 `my-medium.cnf` 复制到 `/etc/my.cnf`,然后通过一系列命令初始化数据库,设置 root 用户的密码,并启动 MySQL 服务。通过登录 MySQL 客户端并执行 `show databases;` 命令来检查安装是否成功。 ...

    windows下配置PHP5.2.5+Apache+2.2.6+MySQL+6.03详细图解.pdf

    整个配置过程图文并茂,旨在帮助用户快速...通过以上详细步骤,用户应该可以在Windows环境下搭建起一个基本的PHP运行环境,支持PHP应用的开发和测试。这个环境也将为进一步深入学习PHP开发和数据库应用打下坚实的基础。

    用Apache PHP MySQL开发邮件帐号注册管理系统.pdf

    2. **在PHP中执行系统外部命令**:在PHP中,可以使用`exec()`, `system()`, 或 `passthru()`函数来运行系统外部命令。由于安全原因,直接使用`su`获取root权限执行命令并不可行。解决方案是使用名为`super`的工具,...

    Apache PHP MySQL基于Web的邮件帐号注册管理.pdf

    3. **使用super工具**:下载并安装super工具后,在配置文件`/etc/super.tab`中添加可以以root身份运行的命令和允许使用super的用户列表。这样,Web用户可以使用`super myadduser`和`supermychpasswd`命令来添加新...

    PHP程序设计-3期(KC016) 1.2.3Mysql的安装配置常见问题.doc

    在PHP程序设计中,MySQL数据库的安装和配置是至关重要的环节。MySQL是一个广泛使用的开源关系型数据库管理系统,常与PHP配合构建动态网站。在实际操作过程中,常常会遇到一些常见问题,以下是对这些问题的详细解释和...

    apache+php+mysql部分软件及安装配置手册

    Apache、PHP和MySQL是构建Web应用程序的黄金组合,也被称为LAMP(Linux、Apache、MySQL、PHP)堆栈。这个组合提供了强大的服务器环境,用于运行动态网页内容。本手册将详细讲解如何在操作系统中安装和配置这三个关键...

    PHP程序设计-3期(KC016) 4.2MySQL登录常见问题.doc

    **问题 1:“mysql” 不是内部或外部命令,也不是可运行的程序或批处理文件** 这个错误通常意味着系统无法找到MySQL的执行文件,因为它的bin目录没有被添加到系统的PATH环境变量中。要解决这个问题,你需要按照以下...

    php mysql安全机制

    `来更新权限表,确保只有授权用户才能访问数据库系统。 #### 3. 访问控制列表(ACL)与SSL支持 实施严格的访问控制策略,如使用ACL限制谁可以访问数据库及其程度,是防止未授权访问的有效方法。同时,启用SSL...

    阿里云lamp环境搭建 php7.0

    ### 阿里云LAMP环境搭建:PHP7.0 #### 一、Apache服务器的安装与配置 在搭建LAMP环境时,首先需要...以上步骤完成之后,就成功地在阿里云环境中搭建了一个完整的LAMP环境,并且可以运行PHP7.0程序和使用MySQL数据库。

    php程序员菜鸟成长手记——php入门教程

    浏览器是用户与Web应用程序之间的接口,主要由渲染引擎、JavaScript引擎和用户界面等组成。其工作原理主要包括以下几个方面: - **解析HTML**:读取HTML文件,构建DOM树。 - **渲染页面**:根据CSS样式和DOM树绘制...

    Apache+php+mysql在windows下的安装与配置图解.rar

    运行安装程序,按照向导提示进行安装,通常选择默认路径(如`C:\Apache24`)。 安装完成后,确保Apache服务已经启动。可以在服务管理器中找到Apache服务并启动,或者在命令行中输入`httpd.exe`(位于Apache的安装...

    【最新版】platypus5.3.zip【亲测可用】最好的创建本机Mac应用程序

    应用程序可以通过macOS安全框架以root权限执行脚本 应用可以注册为URI方案的处理程序 可以将应用程序配置为在后台运行(LSUIElement) 设置自己的应用程序图标或从预设中选择 设置应用的关联文件类型,标识符,...

    A simple PHP sample application

    PHP常用于构建动态网站和应用程序,它可以直接嵌入到HTML中,提供丰富的功能,如处理表单数据、生成动态页面、访问数据库、用户认证等。通过与MySQL等数据库的配合,PHP可以实现强大的数据管理功能。 【简单PHP示例...

    php配置步骤贴图

    在IT行业中,PHP是一种广泛使用的服务器端脚本语言,尤其在构建动态网站方面表现突出。MySQL则是一款流行的开源关系型数据库管理系统,而phpMyAdmin是一个用PHP编写的工具,用于在线管理MySQL数据库,使得数据库操作...

    centos6.4搭建apache+mysql+php环境.docx

    接着,我们通过 `mysql_secure_installation` 脚本来设置 MySQL 的 root 密码,清除匿名用户,禁止远程 root 登录,移除测试数据库,以及更新权限表。 第二步是安装 Apache HTTP 服务器。同样地,我们使用 `yum ...

    PHP调用Linux命令权限不足问题解决方法

    在PHP开发过程中,有时我们需要调用Linux系统的命令来完成特定任务,例如运行系统级程序或者进行文件操作。然而,由于权限限制,可能会遇到"权限不足"的问题。本文将详细讲解如何解决PHP调用Linux命令权限不足的问题...

    提高PHP代码质量36计

    在PHP中,`system`, `exec`, `passthru`, `shell_exec`等函数可以用于执行外部命令,但它们的可用性可能因操作系统和服务器配置而异。为了避免因特定函数被禁用导致的代码失败,开发者应编写能够智能检测并使用可用...

    在Linux系统上实现基于Web的邮件帐号注册管理.pdf

    注册过程中涉及到的系统外部命令,如`useradd`、`userdel`、`passwd`和`chpasswd`,通常需要root权限才能执行。在PHP中,可以使用`exec()`, `system()`, 或者`popen()`函数来运行这些命令。然而,直接通过`su`命令...

    php备份数据库结构与数据

    这些函数允许在PHP脚本中调用外部程序,如`mysqldump`,并将结果保存到文件中。 ```php &lt;?php $command = "mysqldump -u root -pDatabasePassword myDatabase &gt; backup.sql"; system($command); ?&gt; ``` 3. **使用...

    CentOS_6搭建LNMP标准生产环境

    在本文中,我们将详细讨论如何在CentOS 6.5系统上搭建一个LNMP...至此,一个完整的LNMP环境已经在CentOS 6.5上搭建完成,可以用于部署和运行PHP应用程序。记得定期更新和维护这些组件,以保持系统的安全性和性能。

Global site tag (gtag.js) - Google Analytics