Linux服务器PHP以root身份运行外部命令-sudo实施方法

半年前在给一个朋友调试Linux邮件服务器时,发现并不需要用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);
?>

相关推荐