首页 > php教程 > php手册 > 正文

在FreeBSD上用PHP实现在线添加FTP用户

php中文网
发布: 2016-06-06 19:55:38
原创
1051人浏览过

欢迎进入网络安全论坛,与300万技术人员互动交流 >>进入 近日领导要我策划一个网页设计大赛和Flash创作大赛,要求必须实现在线报名和上传作品。通过FreeBSD+Apache+PHP+Mysql+FTP我实现了该要求。 实现在线报名和上传作品的思路是利用网页表单收集用户填写

欢迎进入网络安全论坛,与300万技术人员互动交流 >>进入


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

  

I-Shop购物系统
I-Shop购物系统

部分功能简介:商品收藏夹功能热门商品最新商品分级价格功能自选风格打印结算页面内部短信箱商品评论增加上一商品,下一商品功能增强商家提示功能友情链接用户在线统计用户来访统计用户来访信息用户积分功能广告设置用户组分类邮件系统后台实现更新用户数据系统图片设置模板管理CSS风格管理申诉内容过滤功能用户注册过滤特征字符IP库管理及来访限制及管理压缩,恢复,备份数据库功能上传文件管理商品类别管理商品添加/修改/

I-Shop购物系统 0
查看详情 I-Shop购物系统

   实现在线报名和上传作品的思路是利用网页表单收集用户填写的资料存储到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

  

   #!/bin/csh

  

   /bin/cat

  

   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用户了。

  

   最后还要注意一个问题,su命令仅仅是wheel管理组的用户成员才可以使用,当PHP调用su命令的时候也必须以wheel组成员的身份运行,否则系统拒绝运行,而PHP运行系统命令的身份就是Apache web服务器运行的身份,初始的用户名和用户组都是nobody,所以先得建立一个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账号

  

  

相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号