|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
一下弹出N多页面!很明显,你的留言本并没有做好安全防范,被人用JS代码小小的耍了一下,我很同情你这个时候的感受,但是没有别的办法了,继续努力吧! 向导要我筹划一个网页设计大赛和Flash创作大赛,请求必需完成在线报名和上传作品。经由过程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 Cc ‘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 << 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 Cs /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>
也得学会了PHP。然后再学,见异思迁是最不可取的,狗熊掰玉米就是这个道理,如果经常中途放弃,只能是一无所获,还浪费了N多的时间和经历,得不偿失,最重要的是,你会被别人瞧不起。 |
|