庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>操作系统>FreeBSD>应用技术>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

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

 作者:曾慧鹏    日期:2005-4-17
字号选择〖 〗/ 双击滚屏 单击停止   

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

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

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

echo <passwd> | pw useradd <username> [-g][groupname] [-s][shelldir][-h 0]

参数g指定用户组,参数s指定用户的shell。

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

su root –c ‘echo <passwd> | pw useradd <username> [-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 << 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用户了。

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

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


<?if (($username!="") and ($userpasswd!=""))//判断是否有表单提交了信息

{ $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{?>

<html>

<head>

<title>申请FTP账号</title>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</head>

<body bgcolor="#FFFFFF">

<div align="center">

<p>申请FTP账号</p>

<form method=POST action="<? echo $PHP_SELF; ?>">

<table width="36%" border="0">

<tr>

<td width="40%">

<div align="right">账号名称:</div>

</td>

<td width="60%">

<input type="text" name="username">

</td>

</tr>

<tr>

<td width="40%">

<div align="right">密码:</div>

</td>

<td width="60%">

<input type="password" name="userpasswd">

</td>

</tr>

<tr>

<td colspan="2"><input type="submit" name="Submit" value="申请"></td>

</tr>

</table>

</form>

</div><?}?>

</body>

</html>

把这个文件上传到服务器上运行,如图所示:

希望我的文章能给您带去一些帮助,有什么问题可以联系我QQ:41185138。

附件: checkin.php 下载
上一篇:Openbsd 3.6 + APACHE + MYSQL + PHP + mod_limitipconn    下一篇:ViewCVS安装HOWTO  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 曾慧鹏
信息来源: 网络 录入时间: 2005-4-17
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿