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);

?>