مشکلات و خطاهای FTP

مشکلات و خطاهای FTP

در قبل ما به معرفی پروتکل 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 را ریستارت کنید.

امتیاز ما
برای امتیاز به این پست کلیک کنید
[کل: 0 میانگین: 0]
About the Author

Leave a Reply