日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

如何在FreeBSD上用PHP實現(xiàn)在線添加FTP用戶

近日領導要我策劃一個網(wǎng)頁設計大賽和Flash創(chuàng)作大賽,要求必須實現(xiàn)在線報名和上傳作品 。通過FreeBSD Apache+PHP+Mysql FTP我實現(xiàn)了該要求 。
實現(xiàn)在線報名和上傳作品的思路是利用網(wǎng)頁表單收集用戶填寫的資料存儲到Mysql數(shù)據(jù)庫內,同時以該用戶的注冊名創(chuàng)建一個FTP上傳賬號并創(chuàng)建該用戶的相應目錄 。
【如何在FreeBSD上用PHP實現(xiàn)在線添加FTP用戶】FTP服務器是系統(tǒng)默認帶的,采用系統(tǒng)用戶的用戶名和密碼,創(chuàng)建系統(tǒng)用戶就等于創(chuàng)建FTP用戶,F(xiàn)reeBSD是屬于Unix陣營的操作系統(tǒng),它沒有象Linux一樣的useradd和groupadd等創(chuàng)建用戶和組的命令,其取而代之的是pw命令加上相應參數(shù)來實現(xiàn),在Freebsd上以管理員的身份創(chuàng)建一個用戶的命令是
echo| pw useradd [-g][groupname] [-s][shelldir][-h 0]
參數(shù)g指定用戶組,參數(shù)s指定用戶的shell 。
如果是普通用戶登陸的話還必須用到su命令,調用的方法是
su root –c ‘echo| pw useradd [-g][groupname] [-s][shelldir][-h 0] "
執(zhí)行之后系統(tǒng)會要求輸入管理員密碼,輸入密碼就可以以管理員的身份執(zhí)行這個命令了 。
實現(xiàn)這步操作的主要難點在于如何通過PHP來調用上面這些系統(tǒng)命令去創(chuàng)建一個用戶,本例是使用PHP中的popen()函數(shù)來實現(xiàn)的,該函數(shù)執(zhí)行指令打開文件,語法是int popen(string command, string mode),其打開的文件只能是單向的,只能讀或只能寫,對應的“string mode”為"r"或"w",“string command” 就是命令字符串,在對文件的操作上可使用 fgets()、fgetss()與fputs()函數(shù),本例用fputs()函數(shù)往文件里面輸入管理員密碼 。若是開檔發(fā)生錯誤將返回 false 值,最后函數(shù)要記得調用pclose()關閉 。
下面我們來規(guī)劃一下FTP用戶的組,事先我們先用pw groupadd ftpuser創(chuàng)建ftpuse組,讓在線申請的用戶為這個組的成員 。為了安全起見,我們不應該給FTP用戶Telnet權限,所以我們還要專門給他們創(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秒鐘就自動退出了 。最后不要忘記用chmodx /bin/ftponly給這個文件可執(zhí)行屬性 。
然后在/bin/shell文件中添加“/bin/ftponly”,在以后的命令里面我們就可以利用pw中-s參數(shù)把這個shell指定給FTP用戶了 。
最后還要注意一個問題,su命令僅僅是wheel管理組的用戶成員才可以使用,當PHP調用su命令的時候也必須以wheel組成員的身份運行,否則系統(tǒng)拒絕運行,而PHP運行系統(tǒng)命令的身份就是Apache web服務器運行的身份,初始的用戶名和用戶組都是nobody,所以先得建立一個wheel組的用戶www供apache使用,接著更改Apache的配置文件httpd.conf中的user為www,group為wheel,重新啟動Apache,就可以以新用戶身份運行了 。
下面可以創(chuàng)建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命令創(chuàng)建用戶的用到的字符串
$fp=popen($creatuser,"w"); //調用popen()函數(shù)執(zhí)行字符串中的命令,返回文句柄給$fp
fputs($fp,$rootpasswd); //寫入管理員密碼到文件$fp,相當于輸入密碼給系統(tǒng)
pclose($fp);//關閉文件
$creatdir="su --login root -c "mkdir /home/".$username.""";//創(chuàng)建用戶目錄的命令字符串

推薦閱讀