Linux中,PHP以root身份运行外部命令-sudo实施方法
半年前在给一个朋友调试邮件服务器时,发现并不需要用super,只用Linux系统的sudo就可办到,不敢独享,放到论坛上来,
假设运行apache的用户是nobody,密码是nobody2002
要在php中实现用户的增,删,改的操作
1> 有关的文件及路径:
/etc/sudoers
/usr/bin/sudo
/usr/sbin/useradd
/usr/sbin/userdel
/usr/sbin/usermod
2> 以root身份登录Linux系统,修改/etc/sudoers文件,可也仅可运行命令visudo就可以了, 增加如下一行
nobody ALL=(ALL) /usr/sbin/useradd,/usr/sbin/userdel,/usr/sbin/usermod
##注意不能用vi /etc/sudoers 的方式修改哟
3>
请参考如下程序:
<?
$sudo_path="/usr/bin/sudo";
$cmd_add=$sudo_path." /usr/sbin/useradd";
$cmd_del=$sudo_path." /usr/sbin/userdel";
$cmd_mod=$sudo_path." /usr/sbin/usermod";
function sudo_cmd($todo_cmd)
{
$userpass="nobody2002";
$fp = @popen($todo_cmd, "w");
@fputs($fp, $userpass);
@pclose($fp);
}
// 例子:
$user="newuser";
$pass="12345";
$crypass=crypt($pass,"PK");
// 增加用户
$cmd=$cmd_add." -p $crypass $user";
sudo_cmd($cmd);
// 删除用户
$cmd=$cmd_del." $user";
sudo_cmd($cmd);
// 修改用户(密码,HOME目录,...,暂停,恢复使用等)
$cmd=$cmd_mod." -p $crypass $user";
sudo_cmd($cmd);
$cmd=$cmd_mod." -L $user";
sudo_cmd($cmd);
$cmd=$cmd_mod." -U $user";
sudo_cmd($cmd);
?>