最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2007年03月06日 00:00:00   作者:  
領(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)默認(rèn)帶的,采用系統(tǒng)用戶的用戶名和密碼,創(chuàng)建系統(tǒng)用戶就等于創(chuàng)建FTP用戶,F(xiàn)reeBSD是屬于UNIX陣營的操作系統(tǒng),它沒有象Linux一樣的useradd和groupadd等創(chuàng)建用戶和組的命令,其取而代之的是pw命令加上相應(yīng)參數(shù)來實現(xiàn),在Freebsd上以管理員的身份創(chuàng)建一個用戶的命令是

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

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

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

su root –c ‘echo <passwd> | pw useradd <username> [-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管理組的用戶成員才可以使用,當(dāng)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了,代碼如下:
復(fù)制代碼 代碼如下:

<?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,相當(dāng)于輸入密碼給系統(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>

相關(guān)文章

  • PHP的instanceof詳解及使用方法介紹

    PHP的instanceof詳解及使用方法介紹

    php的instanceof是什么意思?instanceof由兩個單詞組成,instance和of,instance表示實例的意思,從字面上就可以理解這是實例引用的意思。instanceof?運算符是?PHP?5?引進的。在此之前用?is_a(),但是?is_a()?已經(jīng)過時了,最好用?instanceof。
    2023-05-05
  • PHP FOR MYSQL 代碼生成助手(根據(jù)Mysql里的字段自動生成類文件的)

    PHP FOR MYSQL 代碼生成助手(根據(jù)Mysql里的字段自動生成類文件的)

    根據(jù) Mysql里的字段自動生成類文件的實現(xiàn)代碼,學(xué)習(xí)php的朋友可以參考下。
    2011-07-07
  • 解析ajax事件的調(diào)用順序

    解析ajax事件的調(diào)用順序

    本篇文章是對ajax事件的調(diào)用順序進行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • php中關(guān)于codeigniter的xmlrpc的類在進行數(shù)據(jù)交換時的類型問題

    php中關(guān)于codeigniter的xmlrpc的類在進行數(shù)據(jù)交換時的類型問題

    在使用codeigniter的xmlrpc類進行客戶端/服務(wù)端請求應(yīng)答的時候,客戶端需要發(fā)送請求參數(shù)給服務(wù)端,服務(wù)端在接受到參數(shù)之后進行參數(shù)分析,分拆參數(shù)之后分配給正確的方法進行處理,處理之后反饋一個response給客戶端。
    2011-07-07
  • PHP無限分類的類

    PHP無限分類的類

    這段時間在寫一個部門權(quán)限系統(tǒng),需要用到無限分類技術(shù),找了很多關(guān)于分類的代碼.逐個收藏起來
    2007-01-01
  • PHP+Swoole實現(xiàn)web版的shell客戶端詳解

    PHP+Swoole實現(xiàn)web版的shell客戶端詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用PHP+Swoole實現(xiàn)web版的shell客戶端,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下
    2022-07-07
  • php中獲取遠(yuǎn)程客戶端的真實ip地址的方法

    php中獲取遠(yuǎn)程客戶端的真實ip地址的方法

    在PHP 中使用 $_SERVER["REMOTE_ADDR"] 來取得客戶端的 IP 地址,但如果客戶端是使用代理服務(wù)器來訪問,那取到的就是代理服務(wù)器的 IP 地址,而不是真正的客戶端 IP 地址。
    2011-08-08
  • php判斷文件上傳類型及過濾不安全數(shù)據(jù)的方法

    php判斷文件上傳類型及過濾不安全數(shù)據(jù)的方法

    這篇文章主要介紹了php判斷文件上傳類型及過濾不安全數(shù)據(jù)的方法,可實現(xiàn)對$_COOKIE、$_POST、$_GET中不安全字符的過濾功能,非常具有實用價值,需要的朋友可以參考下
    2014-12-12
  • PHP結(jié)構(gòu)型模式之享元模式詳解

    PHP結(jié)構(gòu)型模式之享元模式詳解

    這篇文章主要介紹了PHP結(jié)構(gòu)型模式之享元模式,享元模式是一種結(jié)構(gòu)型模式,它通過共享對象來減少系統(tǒng)中的對象數(shù)量,從而降低了內(nèi)存的使用和系統(tǒng)的復(fù)雜度
    2023-04-04
  • PHP設(shè)計模式 注冊表模式

    PHP設(shè)計模式 注冊表模式

    注冊表模式其實是一個單例模式,注冊表類提供靜態(tài)方法(或單例對象的實例化方法)來讓其它對象訪問其中的數(shù)據(jù)(通常是對象)。整個系統(tǒng)中的每個對象都可以訪問這些數(shù)據(jù)對象
    2012-02-02

最新評論

五大连池市| 将乐县| 科技| 沽源县| 昌黎县| 绥中县| 佛教| 红河县| 宝鸡市| 东安县| 都兰县| 浦北县| 阿克苏市| 汉阴县| 微山县| 尖扎县| 灵山县| 扎鲁特旗| 确山县| 江川县| 河东区| 宜黄县| 曲靖市| 峨眉山市| 肇州县| 义马市| 普宁市| 茂名市| 大厂| 丹凤县| 永德县| 绵竹市| 田阳县| 阿坝县| 泸州市| 九寨沟县| 石门县| 益阳市| 康平县| 永宁县| 古田县|