唐山网站建设

设为主页 加入收藏 繁體中文

用PHP实现Ftp用户的在线治理

核心提示:实现在线报名和上传作品的思路是利用网页表单搜集用户填写的资料存储到Mysql数据库内,同时以该用户的注册名创建1个FTP上传账号并创建该用户的相应目录。

领导要我策划1个网页设计大赛和Flash创作大赛,要求必须实现在线报名和上传作品。通过FreeBSD+Apache+PHP+Mysql+FTP我实现了该要求。

实现在线报名和上传作品的思路是利用网页表单搜集用户填写的资料存储到Mysql数据库内,同时以该用户的注册名创建1个FTP上传账号并创建该用户的相应目录。

FTP服务器是系统默许带的,采取系统用户的用户名和密码,创建系统用户就即是创建FTP用户,FreeBSD是属于UNIX阵营的操纵系统,它没有象Linux1样的useradd和groupadd等创建用户和组的命令,其取而代之的是pw命令加上相应参数来实现,在Freebsd上以治理员的身份创建1个用户的命令是

  

以下为援用的内容:
echo | pw useradd [-g][groupname] [-s][shelldir][-h 0]
参数g指定用户组,参数s指定用户的shell。

假设是普通用户登陆的话还必须用到su命令,调用的方法是

  

以下为援用的内容:
su root –c ‘echo | pw useradd [-g][groupname] [-s][shelldir][-h 0] ’

履行以后系统会要求输进治理员密码,输进密码便可以够以治理员的身份履行这个命令了。

实现这步操纵的主要难点在于如何通过PHP来调用上面这些系统命令往创建1个用户,本例是使用PHP中的popen()函数来实现的,该函数履行指令打开文件,语法是int popen(string command, string mode),其打开的文件只能是单向的,只能读或只能写,对应的“string mode”为’r’或’w’,“string command” 就是命令字符串,在对文件的操纵上可使用 fgets()、fgetss()与fputs()函数,本例用fputs()函数往文件里面输进治理员密码。若是开档产生毛病将返回 false 值,最后函数要记得调用pclose()封闭。

下面我们来计划1下FTP用户的组,事前我们先用pw groupadd ftpuser创建ftpuse组,让在线申请的用户为这个组的成员。为了安全起见,我们不应当给FTP用户Telnet权限,所以我们还要专门给他们创建1个shell,使得他们不能通过Telnet正常登陆系统,方法以下:先创建1个文件/bin/ftponly

  

以下为援用的内容:
        #!/bin/csh
  /bin/cat << XX
  You can ony use this username to login ftp server!
  And you can not use it to telnet to this system! XX
  sleep 10

该文件中XX之间就是显示给用telnet登陆的用户看的信息。信息显示10秒钟就自动退出了。最后不要忘记用chmod +x /bin/ftponly给这个文件可履行属性。

然后在/bin/shell文件中添加“/bin/ftponly”,在以后的命令里面我们便可以够利用pw中-s参数把这个shell指定给FTP用户了。

最后还要留意1个题目,su命令仅仅是wheel治理组的用户成员才可使用,当PHP调用su命令的时候也必须以wheel组成员的身份运行,否则系统拒尽运行,而PHP运行系统命令的身份就是Apache web服务器运行的身份,初始的用户名和用户组都是nobody,所以先得建立1个wheel组的用户www供apache使用,接着更改Apache的配置文件httpd.conf中的user为www,group为wheel,重新启动Apache,便可以够以新用户身份运行了。

下面可以创建PHP源文件checkin.php了,代码以下:

以下为援用的内容:
{ $rootpasswd="adminpassword"; //定义治理员密码
$creatuser ="su --login root -c 'echo ".$userpasswd." | pw useradd ".$username." -s /bin/ftponly  -g ftpuser –s /bin/ftponly -h 0' "; //这是利用su和pw命令创建用户的用到的字符串
$fp=popen($creatuser,"w"); //调用popen()函数履行字符串中的命令,返回文句柄给$fp
fputs($fp,$rootpasswd); //写进治理员密码到文件$fp,相当于输进密码给系统
pclose($fp);//封闭文件 
$creatdir="su --login root -c 'mkdir /home/".$username."'";//创建用户目录的命令字符串 
$fp=popen($creatdir,"w");//履行命令创建用户目录 
fputs($fp,$rootpasswd); //输进治理员密码
pclose($fp); 
$creatdir="su --login root -c 'mkdir /home/".$username."/public_html'"; 
$fp=popen($creatdir,"w"); //履行命令创建用户网站根目录
fputs($fp,$rootpasswd); //输进治理员密码
pclose($fp); 
$creatdir="su --login root -c 'chown ".$username." /home/".$username."'"; //改变用户目录的所有者为用户自己,初始为运行Apache的用户www。
$fp=popen($creatdir,"w"); //履行命令
fputs($fp,$rootpasswd); //输进治理员密码
pclose($fp); 
$creatdir="su --login root -c 'chown ".$username." /home/".$username."/public_html'"; //改变网站根目录的回属
$fp=popen($creatdir,"w"); 
fputs($fp,$rootpasswd); 
pclose($fp); 
echo "恭喜".$username.",您的的FTP账号已申请成功!请到FTP上登陆,请留意,您没有Telnet权限";}
else{?>


申请FTP账号




申请FTP账号

 


 



 






 
账号名称:

 

 
密码:

 





本文搜集整理自互联网,若您是原文作者,请来信更改作者及出处 Post#chinaz.com(把#改成@)

http://www.fw8.net/


TAG:用户,密码,文件,命令,在线
评论加载中...
内容:
评论者: 验证码: