国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

實例:用PHP實現(xiàn)Ftp用戶的在線管理

2024-05-04 23:03:42
字體:
供稿:網(wǎng)友

  領(lǐng)導(dǎo)要我策劃一個網(wǎng)頁設(shè)計大賽和flash創(chuàng)作大賽,要求必須實現(xiàn)在線報名和上傳作品。通過freebsd+apache+php+mysql+ftp我實現(xiàn)了該要求。

  實現(xiàn)在線報名和上傳作品的思路是利用網(wǎng)頁表單收集用戶填寫的資料存儲到mysql數(shù)據(jù)庫內(nèi),同時以該用戶的注冊名創(chuàng)建一個ftp上傳賬號并創(chuàng)建該用戶的相應(yīng)目錄。

  ftp服務(wù)器是系統(tǒng)默認帶的,采用系統(tǒng)用戶的用戶名和密碼,創(chuàng)建系統(tǒng)用戶就等于創(chuàng)建ftp用戶,freebsd是屬于unix陣營的操作系統(tǒng),它沒有象linux一樣的useradd和groupadd等創(chuàng)建用戶和組的命令,其取而代之的是pw命令加上相應(yīng)參數(shù)來實現(xiàn),在freebsd上以管理員的身份創(chuàng)建一個用戶的命令是

  echo | pw useradd [-g][groupname] [-s][shelldir][-h 0]

  參數(shù)g指定用戶組,參數(shù)s指定用戶的shell。

  如果是普通用戶登陸的話還必須用到su命令,調(diào)用的方法是

  su root –c ‘echo | pw useradd [-g][groupname] [-s][shelldir][-h 0] ’

  執(zhí)行之后系統(tǒng)會要求輸入管理員密碼,輸入密碼就可以以管理員的身份執(zhí)行這個命令了。

  實現(xiàn)這步操作的主要難點在于如何通過php來調(diào)用上面這些系統(tǒng)命令去創(chuàng)建一個用戶,本例是使用php中的popen()函數(shù)來實現(xiàn)的,該函數(shù)執(zhí)行指令打開文件,語法是int popen(string command, string mode),其打開的文件只能是單向的,只能讀或只能寫,對應(yīng)的“string mode”為’r’或’w’,“string command” 就是命令字符串,在對文件的操作上可使用 fgets()、fgetss()與fputs()函數(shù),本例用fputs()函數(shù)往文件里面輸入管理員密碼。若是開檔發(fā)生錯誤將返回 false 值,最后函數(shù)要記得調(diào)用pclose()關(guān)閉。

  下面我們來規(guī)劃一下ftp用戶的組,事先我們先用pw groupadd ftpuser創(chuàng)建ftpuse組,讓在線申請的用戶為這個組的成員。為了安全起見,我們不應(yīng)該給ftp用戶telnet權(quán)限,所以我們還要專門給他們創(chuàng)建一個shell,使得他們不能通過telnet正常登陸系統(tǒng),方法如下:先創(chuàng)建一個文件/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給這個文件可執(zhí)行屬性。

  然后在/bin/shell文件中添加“/bin/ftponly”,在以后的命令里面我們就可以利用pw中-s參數(shù)把這個shell指定給ftp用戶了。

  最后還要注意一個問題,su命令僅僅是wheel管理組的用戶成員才可以使用,當php調(diào)用su命令的時候也必須以wheel組成員的身份運行,否則系統(tǒng)拒絕運行,而php運行系統(tǒng)命令的身份就是apache web服務(wù)器運行的身份,初始的用戶名和用戶組都是nobody,所以先得建立一個wheel組的用戶www供apache使用,接著更改apache的配置文件httpd.conf中的user為www,group為wheel,重新啟動apache,就可以以新用戶身份運行了。

  下面可以創(chuàng)建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命令創(chuàng)建用戶的用到的字符串
$fp=popen($creatuser,"w"); //調(diào)用popen()函數(shù)執(zhí)行字符串中的命令,返回文句柄給$fp
fputs($fp,$rootpasswd); //寫入管理員密碼到文件$fp,相當于輸入密碼給系統(tǒng)
pclose($fp);//關(guān)閉文件 
$creatdir="su --login root -c 'mkdir /home/".$username."'";//創(chuàng)建用戶目錄的命令字符串 
$fp=popen($creatdir,"w");//執(zhí)行命令創(chuàng)建用戶目錄 
fputs($fp,$rootpasswd); //輸入管理員密碼
pclose($fp); 
$creatdir="su --login root -c 'mkdir /home/".$username."/public_html'"; 
$fp=popen($creatdir,"w"); //執(zhí)行命令創(chuàng)建用戶網(wǎng)站根目錄
fputs($fp,$rootpasswd); //輸入管理員密碼
pclose($fp); 
$creatdir="su --login root -c 'chown ".$username." /home/".$username."'"; //改變用戶目錄的所有者為用戶自己,初始為運行apache的用戶www。
$fp=popen($creatdir,"w"); //執(zhí)行命令
fputs($fp,$rootpasswd); //輸入管理員密碼
pclose($fp); 
$creatdir="su --login root -c 'chown ".$username." /home/".$username."/public_html'"; //改變網(wǎng)站根目錄的歸屬
$fp=popen($creatdir,"w"); 
fputs($fp,$rootpasswd); 
pclose($fp); 
echo "恭喜".$username.",您的的ftp賬號已經(jīng)申請成功!請到ftp上登陸,請注意,您沒有telnet權(quán)限";}
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>

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 安西县| 新昌县| 九寨沟县| 琼海市| 枣强县| 洛宁县| 岑巩县| 昌黎县| 射洪县| 五大连池市| 沙洋县| 九台市| 义马市| 临武县| 九江市| 布拖县| 吉安县| 杭锦旗| 财经| 玉龙| 桃园县| 芷江| 连城县| 平定县| 沙雅县| 新乡县| 和硕县| 敖汉旗| 房山区| 大港区| 灵寿县| 尼勒克县| 金溪县| 大埔县| 南漳县| 彭水| 闵行区| 乡城县| 阜康市| 定边县| 临桂县|