File Transfer Protocol) FTP) چیست؟
FTP (اف تی پی، مخفف File Transfer Protocol) پروتکلی استاندارد برای انتقال فایل بین کاربر (Client) و سرور است؛ با آن فایلهای سایت را روی هاست آپلود، دانلود، حذف یا جابهجا میکنید. نکته مهم این است که FTP ساده هیچ رمزنگاری ندارد و نام کاربری و رمز عبور را بهصورت متن خام روی شبکه میفرستد، به همین دلیل امروز جای خود را به SFTP (انتقال فایل روی بستر SSH) داده است.
FTP دقیقاً چه میکند؟
مشخصات فعلی این پروتکل در سند RFC 959 تعریف شده و از همان زمان تقریباً بدون تغییر مانده است. برخلاف تصور رایج، FTP از یک اتصال استفاده نمیکند بلکه دو کانال جداگانه باز میکند:
- کانال کنترل روی پورت
21: فرمانهایی مثلUSER،PASS،LIST،RETRوSTORاز این مسیر رد و بدل میشوند. - کانال داده: محتوای واقعی فایلها و خروجی لیست پوشهها از یک اتصال دوم عبور میکند.
همین معماری دو کاناله ریشه بیشتر دردسرهای FTP با فایروال و NAT است. کاربردش هم روشن است: انتقال یکجای حجم زیادی فایل، جایی که فایلمنیجر تحت وب کند یا محدود میشود — از جمله پر کردن یک هاست دانلود با آرشیوهای بزرگ؛ روی سرویسهای میزبانی وب انتقال اولیه فایلهای سایت معمولاً از همین مسیر انجام میشود.
چرا FTP ساده ناامن است؟
در FTP معمولی هیچ لایه رمزنگاری وجود ندارد. یعنی نام کاربری، رمز عبور و محتوای فایلها به شکل متن خوانا از شبکه عبور میکنند. هر کسی که در مسیر ارتباط بنشیند (وایفای مشترک، تجهیز میانی آلوده یا سرور واسط) میتواند با ابزارهای متداول تحلیل ترافیک بستهها را ضبط و رمز را مستقیم بخواند. هیچ رمزی شکسته نمیشود، چون رمزی وجود ندارد.
نتیجه عملی: اگر هنوز روی سروری FTP خام فعال است، آن را غیرفعال کنید یا دستکم به شبکه امن و محدودیت IP ببندید. رمزی که از FTP لو برود معمولاً همان رمز کنترلپنل یا کاربر سیستمی است و آسیبش به یک پوشه محدود نمیماند.
حالت Active و Passive؛ ریشه خطاهای اتصال
وقتی نوبت به باز کردن کانال داده میرسد، دو حالت وجود دارد:
در حالت Active سرور اتصال داده را به سمت کلاینت باز میکند و فایروال کاربر آن را میبندد؛ در حالت Passive هر دو اتصال از سمت کلاینت باز میشود و مشکل برطرف میشود.
- Active: کلاینت با فرمان
PORTپورتی را اعلام میکند و سرور از سمت خودش به کلاینت وصل میشود. اگر کاربر پشت NAT یا فایروال خانگی باشد (که تقریباً همیشه هست) این اتصال ورودی بلاک میشود و نتیجهاش لیست خالی پوشه یا تایماوت هنگام انتقال است. - Passive: کلاینت فرمان
PASVمیفرستد، سرور یک پورت بالا باز میکند و آدرسش را برمیگرداند و کلاینت به آن وصل میشود. این حالت پیشفرض کلاینتهای امروزی است.
اگر خودتان روی سرور مجازی لینوکسی سرویس FTP راه انداختهاید، محدوده پورتهای Passive باید در فایروال باز باشد؛ در vsftpd این محدوده با pasv_min_port و pasv_max_port تعیین میشود. اگر سرویس پشت NAT است، آدرس عمومی هم باید به آن معرفی شود، وگرنه سرور یک IP داخلی به کلاینت اعلام میکند و اتصال داده شکل نمیگیرد. بیشتر تیکتهای «وصل میشوم ولی فایلها لود نمیشوند» دقیقاً همینجا حل میشود.
FTPS و SFTP چه فرقی دارند؟
این دو اسم شبیه هم هستند اما اصلاً یک چیز نیستند:
| پروتکل | رمزنگاری | پورت متداول | تعداد اتصال |
|---|---|---|---|
| FTP | ندارد | 21 |
دو کانال |
| FTPS | TLS روی همان FTP | 21 (Explicit) یا 990 (Implicit) |
دو کانال |
| SFTP | SSH | 22 |
یک اتصال |
FTPS همان FTP است که یک لایه TLS رویش سوار شده؛ در حالت Explicit کلاینت با فرمان AUTH TLS ارتباط را ارتقا میدهد. امن است، ولی همان پیچیدگی دو کاناله و دردسر محدوده پورت Passive را به ارث میبرد.
SFTP اساساً از خانواده FTP نیست؛ یک زیرسیستم از SSH است و روی همان اتصال و همان پورتی کار میکند که برای ورود به سرور استفاده میکنید. یک اتصال، رمزنگاری کامل، احراز هویت با کلید و بدون هیچ پورت اضافهای در فایروال. هر جا دسترسی SSH دارید، SFTP بدون نصب سرویس اضافه از پیش فعال است و منطقیترین انتخاب همین است. (توجه کنید SCP هم پروتکل جداگانهای است و با SFTP یکی نیست.)
اتصال در عمل
در محیط گرافیکی، کلاینتهایی مثل FileZilla، WinSCP و Cyberduck هر سه پروتکل را پشتیبانی میکنند؛ هنگام ساخت اتصال بهجای FTP گزینه SFTP را انتخاب کنید. در خط فرمان لینوکس و مک هم ابزار sftp از پیش نصب است:
- اتصال ساده:
sftp user@example.com - اتصال روی پورت غیر پیشفرض (حرف P بزرگ است):
sftp -P 2222 user@example.com - رفتن به پوشه سایت:
cd /home/user/public_html - آپلود و دانلود:
put index.htmlوget backup.tar.gz
برای انتقال یک پوشه کامل، rsync گزینه بهتری است چون فقط تفاوتها را میفرستد: rsync -avz -e ssh ./site/ user@example.com:/home/user/public_html/. هشدار: گزینه --delete هر فایلی را که در مبدأ نباشد از مقصد حذف میکند؛ پیش از اجرای واقعی حتماً یک بار با --dry-run نتیجه را ببینید.
حساب FTP در کنترلپنل هاست
روی هاست اشتراکی معمولاً دسترسی SSH ندارید و کنترلپنل تنها مسیر ساخت حساب انتقال فایل است. در سیپنل بخش FTP Accounts و در دایرکتادمین بخش FTP Management این کار را انجام میدهد. بهجای استفاده از حساب اصلی، برای هر پروژه یک حساب جدا بسازید و مسیرش را به همان پوشه محدود کنید تا اگر رمزی لو رفت کل اکانت درگیر نشود. برای نمونه در هاست لینوکس ایران که با کنترلپنل سیپنل عرضه میشود، ساخت حساب FTP بهصورت نامحدود ممکن است.
هنگام تعریف اتصال در کلاینت، حالت Require explicit FTP over TLS را انتخاب کنید تا اگر TLS در دسترس نبود اتصال اصلاً برقرار نشود و ناخواسته به حالت خام برنگردد.
محدود کردن کاربران SFTP روی سرور
روی سرور اختصاصی یا مجازی میتوانید کاربری بسازید که فقط اجازه انتقال فایل داشته باشد و به شل سیستم دسترسی نداشته باشد. در فایل /etc/ssh/sshd_config:
Match Group sftponlyChrootDirectory /home/%uForceCommand internal-sftpAllowTcpForwarding no
دو نکته حیاتی: پوشهای که در ChrootDirectory معرفی میکنید باید مالکش root باشد و برای گروه و سایرین قابل نوشتن نباشد (معمولاً 755)، وگرنه اتصال با خطا قطع میشود. و پیش از راهاندازی مجدد سرویس، حتماً پیکربندی را با sshd -t بررسی کنید و نشست SSH فعلی را باز نگه دارید؛ یک خط اشتباه در این فایل میتواند دسترسی شما به سرور را کامل ببندد. اگر ترجیح میدهید این تنظیمات را خودتان دست نزنید، سرور مجازی مدیریتشده ایران نصب و پیکربندی کنترلپنل و رفع اشکال نرمافزارهای نصبشده را بر عهده تیم فنی میگذارد.
جمعبندی
FTP کارش را انجام میدهد، اما در دورانی طراحی شد که رمزنگاری دغدغه نبود. اگر دسترسی SSH دارید SFTP را انتخاب کنید؛ اگر فقط کنترلپنل در اختیارتان است FTPS را فعال کنید و برای هر پروژه حساب محدود بسازید. FTP خام را جز در شبکههای ایزوله روشن نگذارید.
برای کسب اطلاعات بیشتر با همکاران ما در تماس باشید.
