<?
/* PHP中如何增加一个系统用户
下面是一段例程,增加一个名字为james的用户,
root密码是 verygood。仅供参考 
*/
$sucommand = "su --login root --command"; 
$useradd = "useradd ";
$rootpasswd = "verygood";
$user = "james";
$user_add = sprintf("%s \"%s %s\"",$sucommand,$useradd,$user); 
$fp = @popen($user_add,"w"); 
@fputs($fp,$rootpasswd); 
@pclose($fp); 
?> 

解决方案 »

  1.   

    给系统添加一个用户,需要su成root,su的时候是要进行身份认证的,这个认证过程就是一个交互过程。按文章里面说的方法是实现不了的。这个问题的根本原因是在PHP执行一系列外部命令的时候,其实是相当于一个shell脚本。有一个方法可以绕过这个问题,在linux里面有个sudo的命令,sudo 就是以root身份执行一些命令,编辑/etc下面的sudoer文件,把nobody加入进去,并设置成nopasswd,就可以不进行身份验证,然后执行passthru(sudo adduser newuser),用户就加上去了。接下来的问题是给newuser加上passwd,root给普通用户加密码也是要进行确认的。如何绕过这个问题呢?系统里面还有一个命令 chpasswd,chpasswd 的用法是一次修改一群用户的口令,而这群用户的口令是需要写进一个文件里面去。格式是 user:passwd,一个用户占一行。PHP就可以利用这个命令,先fopen一个临时文件,把user:passwd写进去,然后passthru(sudo chpasswd < tempfile),至此,新用户的添加工作就完成了。 把nobody加入sudoer里面会带来一些安全上的问题,所以要注意给nobody一些限制,在sudoer里面可以加入允许执行的命令。另外PHP脚本的写作的时候也要注意考虑一些特殊字符的处理。
      

  2.   

    以上是加了个james用户,但james的密码呢?我想知道的是这个。
    不会加个没有登录密码的用户吧,这没有任何意义哦!
      

  3.   

    ipman说的已经很清楚了!
      

  4.   

    linux根本找不到ipman说的命令!
      

  5.   

    问题搞定,谢谢ipman和hu_zz,sudo只是个工具,默认Linux下根本不存在的,要自已去下载来安装。chpasswd在linux才有,而且用于passwd可行!sudo我也找到了,不过其安全性不知怎样!