免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1400 | 回复: 1
打印 上一主题 下一主题

用PHP实现Ftp用户的在线管理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-25 21:20 |只看该作者 |倒序浏览
用PHP实现Ftp用户的在线管理








最近接手一案子,要求必须实现在线报名和上传作品。通过FreeBSD+Apache+PHP+Mysql+FTP我实现了该要求。

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

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





以下是引用片段:
  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来调用上面这些系统命令去创建一个用户,本例是使用PHP中的popen()函数来实现的,该函数执行指令打开文件,语法是int popen(string command, string mode),其打开的文件只能是单向的,只能读或只能写,对应的“string mode”为’r’或’w’,“string command” 就是命令字符串,在对文件的操作上可使用 fgets()、fgetss()与fputs()函数,本例用fputs()函数往文件里面输入管理员密码。若是开档发生错误将返回 false 值,最后函数要记得调用pclose()关闭。

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





以下是引用片段:
  1.   #!/bin/csh
  2.   /bin/cat << XX
  3.   You can ony use this username to login ftp server!
  4.   And you can not use it to telnet to this system! XX
  5.   sleep 10
复制代码
该文件中XX之间就是显示给用telnet登陆的用户看的信息。信息显示10秒钟就自动退出了。最后不要忘记用chmod +x /bin/ftponly给这个文件可执行属性。

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

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

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



以下是引用片段:
  1. <?if (($username!="") and ($userpasswd!=""))//判断是否有表单提交了信息  
  2. { $rootpasswd="adminpassword"; //定义管理员密码
  3. $creatuser ="su --login root -c 'echo ".$userpasswd." | pw useradd ".$username." -s /bin/ftponly  -g ftpuser –s /bin/ftponly -h 0' "; //这是利用su和pw命令创建用户的用到的字符串
  4. $fp=popen($creatuser,"w"); //调用popen()函数执行字符串中的命令,返回文句柄给$fp
  5. fputs($fp,$rootpasswd); //写入管理员密码到文件$fp,相当于输入密码给系统
  6. pclose($fp);//关闭文件  
  7. $creatdir="su --login root -c 'mkdir /home/".$username."'";//创建用户目录的命令字符串  
  8. $fp=popen($creatdir,"w");//执行命令创建用户目录  
  9. fputs($fp,$rootpasswd); //输入管理员密码
  10. pclose($fp);  
  11. $creatdir="su --login root -c 'mkdir /home/".$username."/public_html'";  
  12. $fp=popen($creatdir,"w"); //执行命令创建用户网站根目录
  13. fputs($fp,$rootpasswd); //输入管理员密码
  14. pclose($fp);  
  15. $creatdir="su --login root -c 'chown ".$username." /home/".$username."'"; //改变用户目录的所有者为用户自己,初始为运行Apache的用户www。
  16. $fp=popen($creatdir,"w"); //执行命令
  17. fputs($fp,$rootpasswd); //输入管理员密码
  18. pclose($fp);  
  19. $creatdir="su --login root -c 'chown ".$username." /home/".$username."/public_html'"; //改变网站根目录的归属
  20. $fp=popen($creatdir,"w");  
  21. fputs($fp,$rootpasswd);  
  22. pclose($fp);  
  23. echo "恭喜".$username.",您的的FTP账号已经申请成功!请到FTP上登陆,请注意,您没有Telnet权限";}
  24. else{?>
  25. <html>
  26. <head>
  27. <title>申请FTP账号</title>
  28. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  29. </head>
  30. <body bgcolor="#FFFFFF">
  31. <div align="center">
  32. <p>申请FTP账号</p>  
  33. <form method=POST action="<? echo $PHP_SELF; ?>">
  34. <table width="36%" border="0">
  35. <tr>  
  36. <td width="40%">  
  37. <div align="right">账号名称:</div>
  38. </td>
  39. <td width="60%">  
  40. <input type="text" name="username">
  41. </td>
  42. </tr>
  43. <tr>  
  44. <td width="40%">  
  45. <div align="right">密码:</div>
  46. </td>
  47. <td width="60%">  
  48. <input type="password" name="userpasswd">
  49. </td>
  50. </tr>
  51. <tr>
  52. <td colspan="2"><input type="submit" name="Submit" value="申请"></td>
  53. </tr>
  54. </table>
  55. </form>
  56. </div><?}?>
  57. </body>
  58. </html>
复制代码

论坛徽章:
0
2 [报告]
发表于 2012-02-25 21:20 |只看该作者
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP