مشکلات و خطاهای FTP
Contents
در قبل ما به معرفی پروتکل FTPپرداختیم و برخی از خطاها و مشکلات آن را بررسی کردیم,امروز ما قصد داریم بصورت کامل تر و وسیع تری تمامی مشکلاتی که ممکن است که شما به ان برخورد داشته باشید را بررسی کنیم.
شروع نشدن PROftpd
شروع نشدن پروتکل proftpd چندین دلیل میتواند داشته باشد:
اطمینان حاصل کنید که پروتکل به صورت کامل و صحیح نصب شده است(بر روی redhat)
فرمان زیر را بر روی red hat اجرا کنید:
rpm -q proftpd
اگر که پروتکل بر روی سیستم شما نصب شده باشد نسخه دقیقی که در حال کار با ان هستید را در red hat به شما نشان خواهد داد,اگر که متنی نشان بر اینکه proftpd نصب نیست را دریافت کردید ,میتوانید با استفاده از کد زیر آن را نصب کنید:
cd /usr/local/directadmin/scripts ./proftpd.sh
در حین نصب proftpdمراقب باشید و خطاهایی که ممکن است برای شما نمایش داده شود.
یکی از مشکلات رایجی که ممکن است با آن مواجه شوید,دخالت ftp daemon دیگری در حین نصب است,پس بهتر از دیگری ftp daemon را حذف کنید.
rpm -e --nodeps other-ftp
سپس ./proftpd.shرا دوباره اجرا کنید.
در مواقعی که باز هم با خطا مواجه میشوید بهتر است مطمعن شوید که ای پی ها به صورت درست قرار داده شده اند.
مطمعن شوید که در فایل /etc/hostsای پی سرور ها با نام هاست ها همخوانی داشته باشد.
مطمعن شوید که ای پی سرور در /etc/proftpd.vhosts.confبه عنوان یک هاست مجازی نیست.
زمانی که تنظیمات آن ها را یکسان کردید و آن هارا نصب کردید با نوشتن فرمان زیر آن را ریستارت کنید:
بر روی red hat:
service proftpd restart
بر روی freeBSD:
/usr/local/etc/rc.d/proftpd restart
روش اضافه کردن دوباره اکانت های ftp به فایل /etc/proftpd.passwd
ممکن است به هردلیلی شما بعضی یا تمامی اکانت های سیستم ftpخود را در فایل /etc/proftpd.passwdگم کرده باشید,شما به آسانی میتوانید با اجرا کردن کد زیر از بودن یا نبودن آن ها مطلع شوید.
به یاد داشته باشید که این اموزش چند مرحله ای میباشد,در قدم اول به مسیر root تعغییر دهید,برای تعغییر مسیر کد زیر را تایپ کنید:
cd /root
سپس یک فایل به اسم fix_ftp.shبا استفاده از ادیتور دلخواه خودتان بسازید.
nano fix_ftp.sh
در درون این فایل جدید ساخته شده در مسیر کاربران,کد زیر را وارد کنید:
#!/bin/sh PF=/etc/proftpd.passwd cd /usr/local/directadmin/data/users for u in `ls`; do { if [ ! -d $u ]; then continue; fi SHADOW=/home/$u/.shadow if [ ! -e $SHADOW ]; then continue; fi #make sure it doesn't already exist COUNT=`grep -c -e "^${u}:" $PF` if [ "$COUNT" -ne 0 ]; then continue; fi UUID=`id -u $u` UGID=`id -g $u` echo "${u}:`cat /home/$u/.shadow`:${UUID}:${UGID}:system:/home/${u}:/bin/false"; }; done;
سپس آن را ذخیره کنید و خارج شوید,سپپس متن را chmodکنید به ۷۵۵٫
chmod 755 fix_ftp.sh
همانند کد زیر قبل از هرکاری یکبار آن را تست کنید,نگران نباشید تست کردن آن به این صورتی هیچ تعغیری را برای شما بوجود نمیاورد:
./fix_ftp.sh
مطمعن شوید که در حین اینکار دارد اطلاعات را به شما تحویل میدهد که دارد به فایل proftpd.passwd میرود.
زمانی که مطمعن شدید این ها همان اطلاعاتی هستند که شما بهشان نیاز دارید,متن زیر را به اخر فایل بچسپانید:
./fix_ftp.sh >> /etc/proftpd.passwd
مطمعن شوید که از کارکتر ۲ > characters (>>)استفاده میکنید و نه از ۱,همانطور که گفتیم نتیجه استفاده از کارکتر ۱,میتواند تمامی محتویات قبلی شما را به طور کامل پاک کند,در صورتی که هرگونه اکانت ftp@domain.comوجود داشته پاک خواهد شد که میتواند برای شما بسیار دردسر ساز باشد.
مطمعن شوید که /etc/proftpd.passwdو همینطور frpبه روت root ,chownedشده باشند.
chown root:ftp /etc/proftpd.passwd chmod 640 /etc/proftpd.passwd
حالا کافیست تا اکانت های ftp را امتحان کنید و نتایج به دست امده دلخواهتان را خواهید دید.
تبدیل ftp_download.phpبرای استفاده از ncftpgetبه جای php
ممکن است شما بخواهد برای دانلود فایل های پشتیبانی خود از یک ftp دانلودر دیگری استفاده کنید,برای اینکار باید از ncftpgetاستفاده کنید,برای جایگزین کردن ncftpgetبه جای phpباید ncftpgetرا تبدیل کنید,کد زیر را در ادامه وارد کنید:
cd /usr/local/directadmin/scripts/custom nano ftp_download.php
و همینطور در فایل جدید ftp_download.phpکد زیر را اضافه کنید:
/bin/sh FTPGET=/usr/bin/ncftpget TOUCH=/bin/touch PORT=${ftp_port} if [ ! -e $TOUCH ] && [ -e /usr/bin/touch ]; then TOUCH=/usr/bin/touch fi if [ ! -e $FTPGET ]; then echo ""; echo "*** Backup not downloaded ***"; echo "Please install $FTPGET by running:"; echo ""; echo "cd /usr/local/directadmin/scripts"; echo "./ncftp.sh"; echo ""; exit 10; fi CFG=${ftp_local_file}.cfg /bin/rm -f $CFG $TOUCH $CFG /bin/chmod 600 $CFG /bin/echo "host $ftp_ip" >> $CFG /bin/echo "user $ftp_username" >> $CFG /bin/echo "pass $ftp_password" >> $CFG $FTPGET -C -f $CFG -V -t 25 -P $PORT "$ftp_ip" "$ftp_path/$ftp_remote_file" "$ftp_local_file" 2>&1 RET=$? /bin/rm -f $CFG exit $RET
سپس آن را ذخیره کنید و خارج شوید,سپپس متن را chmodکنید به ۷۵۵٫
نصب کردن mod_sftpدر proftpd
برای ادمین سرور هایی که مایلند به کاربرانشان اجازه بدهند که آن ها بتوانند اطلاعاتی را در سرور با استفاده از sftpاپلود کنند,انی اموزش به شما کمک میکند که چگونه sftpرا درون proftpd نصب کنید و بجای ftps یا ftpاز sftpاستفاده کنید.
به یاد داشته باشید این اموزش بر پایه این است که شما دارید از نسخه جدید unified_ftp_password_fileبرای proftpdاستفاده میکنید.
۱)proftpdرا تعغیرات خواسته شده دوباره جمع اوری یا Recompileکنید:
cd /usr/local/directadmin/custombuild ./build update ./build set ftpd proftpd mkdir -p custom/proftpd/conf wget -O custom/proftpd/configure.proftpd http://files.directadmin.com/services/all/sftp/configure.proftpd.sftp wget -O custom/proftpd/conf/proftpd.conf http://files.directadmin.com/services/all/sftp/proftpd.conf chmod 755 custom/proftpd/configure.proftpd wget -O /etc/proftpd.sftp.conf http://files.directadmin.com/services/all/sftp/proftpd.sftp.conf ./build proftpd
۲)proftpdرا ریستارت کنید و سپس مواردی را که پر رنگ در کد زیر میبینید را تست کنید.
[root@server ~]#service proftpd restart Shutting down proftpd: [ OK ] Starting proftpd: [ OK ] [root@server ~]# telnet localhost 21 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. ۲۲۰ ProFTPD 1.3.4a Server ready. QUIT ۲۲۱ Goodbye. Connection closed by foreign host. [root@server ~]# telnet localhost 23 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. SSH-2.0-mod_sftp/0.9.8 garbledtext Connection closed by foreign host.
به یاد داشته باشید که کاربران به صورت پیش فرض باید از پورت ۲۲ استفاده کنند,هرچند sshdاز این پورت به صورت پیش فرض استفاده میکند.
اگر که میخواهد sftpاز این پورت استفاده کند ,ابتدا باید پورتی که sshdاز ان استفاده میکند را تعغیر دهید,مطمعن شوید که برنامه فایروال شما بر روی پورت جدید شما باز است,سپس پورت را به مقدار ۲۳ در فایل /etc/proftpd.sftp.confتعغییر دهید تا بجای آن از ۲۲ استفاده کند,و سپس proftpd را ریستارت کنید.