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

首頁 > 開發 > PHP > 正文

用PHP實現Ftp用戶的在線管理

2024-05-04 21:47:16
字體:
來源:轉載
供稿:網友

  領導要我策劃一個網頁設計大賽和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 –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 << 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了,代碼如下:

以下是引用片段:

 

{ $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賬號

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

賬號名稱:

 

 

 

 

 

 

密碼:

 

 

 

 

 

 

 

 

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青川县| 五大连池市| 潍坊市| 宁都县| 建德市| 乌鲁木齐县| 汾阳市| 张北县| 中西区| 肥东县| 孟州市| 长汀县| 尚志市| 互助| 阿拉尔市| 海淀区| 巢湖市| 佛教| 信阳市| 手机| 克什克腾旗| 石景山区| 绥江县| 梓潼县| 彰化市| 沁源县| 太和县| 东阿县| 上犹县| 内丘县| 府谷县| 伊宁市| 柳林县| 克拉玛依市| 平泉县| 永泰县| 桂东县| 佛坪县| 玛纳斯县| 金门县| 信阳市|