Я использую команду su в комплекте с php-функцией proc_open. Нечто вроде такого кода:
function cmd($in,$out) {
global $user_name,$user_password,$error;
$out=array();
$err=array();
$descriptorspec=array(0=>array('pipe','r'),1=>array('pipe','w'),2=>array('pipe','w'));
$process=proc_open('su - '.$user_name,$descriptorspec,$pipes);
if (is_resource($process)) {
fwrite($pipes[0],$user_password."\n");
for($i=0;$i<count($in);$i++)
fwrite($pipes[0],$in[$i]."\n");
fclose($pipes[0]);
while(!feof($pipes[1]))
$out[]=fgets($pipes[1], 1024);
fclose($pipes[1]);
while(!feof($pipes[2]))
$err[]=fgets($pipes[2], 1024);
fclose($pipes[2]);
$error=implode("\n",$err);
return proc_close($process)==0;
}
else {
$error='Ошибка открытия канала к файлу.';
return false;
}
}
Это универсальный код для запска чего угодно от имени кого угодно. Php-скрипт запускаю соответственно: cmd(путь к php -f путь к php-скрипту)