پیشگفتار
FTP کوتاه شدهی عبارت File Transfer Protocol است. این پروتکل سالیان درازی است که به منظور انتقال فایل بین کامپیوترهای موجود در یک شبکه TCP/IP بین کلاینت و سرور مورد استفاده قرار میگیرد. این پروتکل تقریبا یک پروتکل ۴۲ ساله است که امکان استفاده از برخی فرامین در هنگام اتصال FTP از کلاینت به سرور برای کاربران یکی از ویژگیهای جالب توجه آن است.
آدرس یک FTP سرور شبیه آدرس http در یک وبسایت است، با این تفاوت که از پیشوند //:ftp بجای //:http استفاده میشود. با استفاده از FTP، هم میتوان فایل آپلود کرد و هم دانلود. عموما هر کامپیوتری که سرویس FTP بر روی آن در حال اجرا باشد و یک آدرس FTP داشته باشد بهعنوان یک FTP سرور عمل میکند. برای استفاده از FTP به دو مورد نیاز است:
۱.یک کلاینت FTP
۲.یک FTP سرور
اکثر سیستمعاملها بصورت پیشفرض کلاینت FTP را بر روی خود به همراه دارند. برای استفاده از FTP کافیست در command prompt سیستمعامل ویندوزی و یا ترمینالهای لینوکسی دستور ”ftp IP” تایپ شود.
زمانیکه اصطلاحا به سرور، FTP میکنید امکان اجرای برخی دستورات را در سرور خواهید داشت؛ برای مثال میتوان از این طریق لیستی از فایلهای موجود در سرور را دید، فایلهایی را ایجاد کرد یا ازسرور حذف کرد و تغییر نام داد. همچنین قرار دادن فایل از کلاینت به سرور و همچنین گرفتن فایل نیز از مهمترین کاربردهایی است که در FTP وجود دارد.
ورود به یک FTP سرور
برای ورود و دسترسی به سرورFTP ، در قدم اول به آدرس آن FTP کرده و سپس توسط نام کاربری مجاز احراز هویت میکنیم. در این لحظه احراز هویت کاربر صورت گرفته است و یک نشست بین کلاینت و سرور ایجاد شده است. این نشست از نوع TCP است. در هر نشستی دو پورت ۲۰ و ۲۱ TCP ، استفاده میشود. پورت ۲۰ برای data channel و پورت ۲۱ برای command channel استفاده میشود. در data channel اطلاعات بین سرور و کلاینت مبادله میشوند، و در command channel دستورات ارسال میشوند. وجود دو کانال مختلف در زمان FTP ، باعث میشود که کاربر بتواند حین انتقال فایل قادر به اجرای دستورات دیگر نیز باشد، حتی لغو انتقال!
معمولا سه نوع اکانت برای اتصال به FTP سرور وجود دارد که عبارتند از: Restricted، Anonymous و real/local.
اگر اکانتی که برای لاگین در سرور FTP مورد استفاده قرار میگیرد local و یا restricted باشد، باید از نام کاربری و پسوردی که در سرور وجود دارد استفاده شود؛ این در حالیست که در روش anonymous، نامکاربری همان anonymous است و نیاز به پسورد ندارد که البته اکثر مواقع گفته میشود که افراد از آدرس ایمیل خود برای پسورد استفاده کنند.
در روش local ، دایرکتوری پیشفرض در FTP که کاربر بعد از لاگین در آن قرار دارد عبارتست از home/user/ در صورتی که در روشهای restricted و anonymous دایرکتوری پیشفرض var/ftp/ میباشد.
اکانتهایی که از نوع local هستند حق دسترسی به تغییر دایرکتوری دارند اما در اکانتهای restricted و anonymous کاربر حق و مجوز تغییر دایرکتوری را ندارد.
برای ایجاد یک نشست FTP بین کلاینت و سرور میتوان به دو روش normal mode و passive mode اشاره کرد.
در روش normal mode که به آن active نیز میگویند، کلاینت با شماره پورت تصادفی بالای ۱۰۲۴ به پورت ۲۱ سرور کانکشن میزند و سرور نیز از پورت ۲۰ خود جهت انتقال داده استفاده خواهد کرد. همینطور در روش passive در ابتدا از سمت کلاینت شماره پورتی تصادفی بالای ۱۰۲۴ به پورت۲۱ سرور اتصال برقرار میکند، سپس کلاینت با ارسال دستور PASV به سرور اعلام میکند که اتصال از نوع passive باشد، در اینجا برای انتقال داده دیگر پورت ۲۰ سرور استفاده نمیشود بلکه پورتی تصادفی بالای ۱۰۲۴ انتخاب میگردد.
همانطور که گفته شد، در اکثر اوقات برای FTP کردن به هر سروری میبایست نام کاربری و پسورد برای احراز هویت و تعیین سطح دسترسی وجود داشته باشد، اما در برخی مواقع نظیر وجود سرورهایی برای در دسترس قرار دادن اطلاعات برای همگان و یا اهداف تبلیغاتی، امکان ورود به سرور از طریق FTP را برای تمام افراد وجود دارد و کاربران بدون داشتن نام کاربری و پسورد به مجموعهای معین از فایلها دسترسی خواهند داشت. این رویه Anonymous FTP نام دارد. در این فرآیند ابتدا به سرور مورد نظر ftp میکنیم، سپس از کلمه anonymous برای نامکاربری استفاده میکنیم و هیچ پسوردی نمیزنیم، به این صورت به محتویات فایلها و دایرکتوریهایی که مجوز استفاده از آنان را داریم دسترسی پیدا خواهیم کرد.
به عنوان مثال توسط کامند زیر به یک FTP Server به آدرس زیر به عنوان یک کاربر anonymous لاگین میکنیم:
$ ftp ftp.heanet.ie
همانطور که در شکل دیده میشود نامکاربری anonymous استفاده شده است و همچنین هیچ پسوردی برای ورود به سرور نیاز ندارد. البته در این مورد احتمالا برای جمعآوری اطلاعاتی مبنی بر اینکه چه افرادی به سرور FTP کردهاند پیغامی مبنی بر وارد کردن آدرس ایمیل به عنوان پسورد ظاهر شده است که نیاز به وارد کردن آن نیست و کاملا اختیاری میباشد. بعد از آن به کاربر اعلام شده که دسترسی او به فایلها طبق حدودی است که برای آنها تعیین شده است. معمولا این کاربران اجازه آپلود فایل به سرور را ندارند، البته در بعضی مواقع دایرکتوریهایی برای این کاربران ایجاد میشود.
در خط بعدی به نوشته Remote system type is UNIX میرسیم، در اینجا سیستمعاملی که با آن FTP شده است را شناسایی و اعلام کرده است، همینطور اعلام میکند مٌدی که در آن قرار دارید binary mode است.
انتقال فایل در FTP در دو مُد باینری و اَسکی انجام میشود. در binary mode میتوان انواع فایلها شامل فایل متنی، اجرایی و هرگونه فایل دیگر را به درستی انتقال داد، اما در حالت ASCII فقط فایلهای متنی را میتوان انتقال داد. به عنوان مثال میتوانید یک عکس با فرمت jpg را در حالت ASCII انتقال دهید تا متوجه بلایی که سر عکس میآید شوید!
یکی از دستورات داخلی FTP که توسط آن میتوان فایلها و دایرکتوریهای موجود را دید dir میباشد. خروجی این دستور معادل با خروجی”ls -lF” در محیط bash است. دستورات داخلی FTP دستورات محدودی هستند که میتوان لیستی از آنها را با زدن ? و یا help در نشست FTP دریافت کرد. لیستی از این دستورات که در این سرور آمدهاند در شکل زیر نمایش داده شده است.
همانطور که در لیست دستورات داخلی FTP ملاحظه میکنید، برای آپلود فایل به سرور از دستور put استفاده میکنند. در صورتیکه تعداد فایلها بیش از یک فایل باشد، از mput استفاده میشود. بههمینترتیب برای گرفتن فایل نیز از get و mget میتوان استفاده نمود.
در انتقال فایل توسط FTP دادهها رمزنگاری نمیشوند و همین امر موجب شده است که FTP مورد توجه attacker ها قرار گیرد تا پکتهای یک شبکه را sniff کنند. به همین خاطر معمولا FTPS را پیشنهاد میکنند که یک اکستنشن برای FTP است که پروتکلهای TLS و SSL را پشتیبانی میکند. معمولا قبل از پیکربندی FTP سرور برای استفاده SSL میبایست برنامههای پیشنیاز آن را قبلا نصب کرده باشید.
راهاندازی یک FTP سرور
از برنامههایی که بطور معمول برای راهاندازی FTP سرور مورد استفاده قرار میگیرند میتوان به proftpd و vsftpd اشاره کرد، که در اینجا به معرفی مختصری از vsftpd پرداخته خواهد شد.
دیمِنِ Very Secure FTP یا همان (vsftpd) یکی از قویترین و معروفترین FTP سرورهایی است که مورد استفاده سازمانها قرار میگیرد. در این FTP سرور امنیت در سطح بالایی مدنظر قرار گرفته شده است. این سرویس در حالت chroot کار میکند و در حال حاضر از رمزنگاری TLS/SSL نیز پشتیبانی میکند.
پیکربندی این سرویس کار چندان مشکلی نیست. مواردی که گفته میشود میتواند پس از نصب مورد استفاده قرار گیرد. معمولا فایل پیکربندی آن vsftpd.conf بوده و در دایرکتوری etc/vsftpd/ قرار دارد(دقت داشته باشید که دستورات ذکر شده مخصوص توزیعهای بر پایه ردهت و فدورا هستند و برای توزیعهای دیگر ممکن است دستورات دیگری به کار رود). برای ویرایش جمله و عبارت خوشآمدگویی زمانی که کاربرها به سرویس متصل میشوند میتوان فایل welcome.banner را در همین دایرکتوری ویرایش کرد. فایل پیکربندی vsftpd.conf پارامترهای جالب دیگری نظیر تعیین مجوز ایجاد فایل توسط umask و تعیین نامکاربری که برای اتصال anonymous مورد استفاده قرار میگیرد دارد. زمانی که کاربری نیاز به آپلود فایلی در FTP سرور دارد، تعیین مجوز آن فایل توسط umask بسیار مهم است. برای مثال با تعیین umask 077 مجوزی که برای آپلود فایل ایجاد خواهد شد ۷۰۰ خواهد بود. همچنین میتوان نام کاربر anonymous را به ftp تغییر داد. علاوه بر آن میتوان نوع اتصال passive یا active را در این فایل تعیین کرد. پس از پیکربندی کامل سرویس و تعیین پارامترهای دیگری که در این فایل هستند، میتوان اقدام به start این سرویس کرد. توسط دستور chkconfig میتوان runlevel هایی که سرویس را میخواهید در آنها بالا بیاورید تعیین کنید.
# chkconfig --level 345 vsftpd on # /etc/init.d/vsftpd restart
بررسی log فایلها در هنگام start شدن سرویس FTP برای بررسی خطاهای احتمالی سرویس توصیه شده است.
# grep vsftpd /var/log/messages
ذکر این نکته حائزاهمیت است که در صورت استفاده از سرویسهایی مثل iptables نیاز است که پورتهای مورد استفاده از سرویسی را که راهاندازی میکنید بر روی سرور باز کنید.
همانطور که سرویس FTP از پورت ۲۱ استفاده میکند، در صورتیکه این پورت در فایروالها بسته باشد، بایستی اقدام به باز نمودن آن کرد. برای اینکار میبایست فایل iptables را ویرایش کنید، که توسط هر ویرایشگری میتوان این کار را انجام داد(nano, vi,..).
# vi /etc/sysconfig/iptables
سپس توسط دستور زیر، پورت۲۱ TCP به مابقی رولهای امنیتی موجود افزوده و accept خواهد شد.
پس از ذخیره تغییرات اعمال شده میبایست سرویس iptables را startیا restart کرد.
# service iptables start
برای تست کردن FTP میتوان به localhost یا ip:127.0.0.1 و یا آدرس خود سرور FTP کرد:
# ftp localhost # ftp 127.0.0.1 # ftp FTP.domain.com
در پیکربندی پیشفرض اجازه دانلود برای کاربر anonymous داده شده است. در صورت عدم نیاز به وجود این نام کاربری میتوان مقدار anonymous_enable را no تعیین کرد. معمولاً اجازه آپلود فایل را به این کاربر به جهت امکان آپلود فایلهایی که به سیستم آسیب میرسانند نمیدهند. در فایل پیکربندی این سرویس میتوان مقدار حداکثر کلاینتهایی که میتوانند به سرور متصل شوند را تعیین کرد، همینطور تعداد اتصالات ممکن از یک IP را نیز.
سرویس FTP را میتوان هم بصورت standalone تحت init اجرا و استفاده کرد و هم تحت مدیریت و کنترل xinetd.
در صورتیکه تحت xinetd و یا inetd این سرویس را قرار دهیم، پیکربندی آن را در فایل etc/xinetd.conf/ میتوانیم ویرایش کنیم. همینطور برای مدیریت آن و دیگر سرویسهایی که تحت آن هستند دیگر مستقیما نام آن سرویسها را برای stop و یا start کردن بهکار نمیبریم بلکه همه توسط service xinetd مدیریت خواهند شد. در صورتی که نیاز به stop کردن سرویس FTP باشد میتوان پارامتر disable سرویس مورد نظر خود را برابر با yes قرار داد. همینطور پارامترهای دیگری برای مدیریت بر روی سرور در این فایل وجود دارد که بنا به نیاز میتوان هرکدام را تغییر داد. ذکر این نکته حائز اهمیت است که در صورت stop شدن سرویس xinetd تمام سرویسهایی که تحت آن اجرا میشوند نیز stop خواهند شد.
28 دیدگاه برای این نوشته:
دانیال بهزادی:
۲۳ اردیبهشت ۱۳۹۲
خیلی خوب بود. ممنون که نوشتیدت، مطمئناً مشکلات خیلی از افراد رو برطرف خواهد کردfreeman:
۲۳ اردیبهشت ۱۳۹۲
توضیح خیلی روان، مختصر و مفید و به دردخوریست….سپاس بسیار…..Linux Services:
۲۳ اردیبهشت ۱۳۹۲
با سلام
سایت جامعی دارین و به دلیل این حرکت پسندیدتون از شما متشکریم…
خوشحال میشیم که آخرین مطالب خود را در فروم رایگان LinuxServices.iR به اشتراک بگذارید…
البته ذکر منبع به وبسایت شما خواهد خورد..حامد سپهر:
۲۳ اردیبهشت ۱۳۹۲
ممنون. جالب و کلی چیز یاد گرفتم :)nazanin:
۲۳ اردیبهشت ۱۳۹۲
خیلی جامع و مفید بود. ممنون!محسن پهلوانزاده:
۲۳ اردیبهشت ۱۳۹۲
هر چند مقاله از نظر مفهومی خوب جلو رفته، و مفهوم رو خوب رسونده، اما بدلیل اینکه این یک مقاله مفهومی میباشد و مستقل از دیسترو، در آخر نباید از command هایی نظیر chkconfig استفاده میشد که جهت redhat-base بودن به مقاله مفهومی داده است. “مقاله مفهومی با فنی فرق دارد!” از روند مقاله بر میآید که ترجمه باشد.keimasi:
۲۳ اردیبهشت ۱۳۹۲
مرسی نازنین ;)
دوستان ممنون از همه که مطلب رو خوندینkeimasi:
۲۳ اردیبهشت ۱۳۹۲
دقیقا هدف اصلا پرداختن به روشهای نصب و یا کانفیگ دیستروی خاصی نبوده، اما لازم دیدم تا یه اشارهای هم بهش بشه صرفا جهت آشنایی خواننده. مسلما یه منبع کاملی نیس که کسی بخواد بهش رجوع کنه. کامندای ردهتی آورده شده تا برای کاربرا ملموستر باشه :).محسن پهلوانزاده:
۲۳ اردیبهشت ۱۳۹۲
بهترین گزینه این بود که شما به جای اون کامند های ردهتی، از جملات مفهومی استفاده میکردید.keimasi:
۲۳ اردیبهشت ۱۳۹۲
حق با شماست میتونست هیچ کامندی توی این مطلب آورده نشه کلا. هدف فقط آشنایی خواننده بوده با نحوه کاری که بایستی انجام بده. ردهت یا دبین، فرقی نمیکنه کلا یه کار مشخص باید انجام بشه چه از chkconfig استفاده بشه چه از /etc/init.d/عرفان طباطبائی:
۲۴ اردیبهشت ۱۳۹۲
این کامندها برای راهنمایی کاربر در جهت راهاندازی سرور افتیپی آورده شدن و کسی که از یک توزیع دیگری استفاده میکنه حتما میدونه که چه فرمانهایی رو اجرا کنه!
اگر هم نمیدونه لازمش یه گوگل کردن هست.منظورتون از جملات مفهومی اینه که ایشون مینوشتن: باید به رانلول پیشفرض اضافه کنید!
مطمئنا کسی که افتیپی رو در اون سطح بلد نیست نمیدونه که چطور باید به یک رانلول دیمنی رو اضافه بکنه، و نویسنده در هر صورت ملزم به ارائه مثال در قسمت دیدگاهها میشدن.به جای این ایرادها میتونستین کامندهای مشابه برای دیگر توزیعها رو یادآور بشین :-)
مطلب ترجمه باشه یا نباشه قصد افزایش اطلاعات کاربر هست.
اگر بخوایم اینطوری نگاه بکنیم که اکثر (شاید تمامی) کتابهای مربوط به رشته کامپیوتر در ایران ترجمه شده باشن! اما مقصود نهایی تعلیم دانشجو هست!محسن پهلوانزاده:
۲۴ اردیبهشت ۱۳۹۲
دوست گرامی،منظور از به کار بردن جملات فارسی یک دست کردن مقاله است. نه اینکه بار مقیت یا منقب داره
اما در مورد ترجمه یا عدم ترجمه خبری به من رسید در مورد این مقاله که کامنت بگذارم و نظرم رو در موردش گذاشتم و اینکه ترجمه است بنا به توهین به اون نیست.asaad:
۲۹ اردیبهشت ۱۳۹۲
خیلی مفید بود ممنونابراهیم درویش:
۳۰ اردیبهشت ۱۳۹۲
آقا دست گل تون درد نکنهمحمد:
۰۱ خرداد ۱۳۹۲
ببخشید چجوری میشه یکبار برای همیشه توسط نرم افزاری که به ftp نیاز دارد لاگین کنیم؟
هر بار که از این نرم افزار استفاده می کنم شروع می کنه به لاگین و 1 دقیقه طول می کشدkeimasi:
۰۱ خرداد ۱۳۹۲
برای لاگین به FTP از چه نرمافزاری استفاده میکنین؟محمد:
۰۲ خرداد ۱۳۹۲
من از آرچ لینوکس استفاده می کنم و برای دانلود کردن نرم افزار ها از مخازن از aria2 استفاده می کنم (آینه ام از نوع ftp است)keimasi:
۰۲ خرداد ۱۳۹۲
فک میکنم که aria2 یه دانلودمنیجر کامندلاینه که میتونین باهاش FTP هم بکنین، اینکه اون سایتی که بهش وصل میشین دیر به شما جواب میده بنظرم یا بخاطر شبکتون باشه یا خود سروری که بهش وصل میشید دیر جواب میده. در مورد ذخیره پسور با aria2 من اطلاعی ندارم. دوستانی که آرچ دارن حتما میتونن کمک کنن.محمد:
۰۲ خرداد ۱۳۹۲
خیلی ممنون که جواب میدید من توی اون سایت عضو نیستم و خودش با کاربر anonymouse وارد میشه من فقط می خوام ببینم میشه که توی این اکانت بمونه و خارج نه تا هر بار لازم نباشه واد بشه؟
برای مثال ما تو کلی سایت عضو هستیم و تو بیشتری هاشون هم تا میریم توش وارد حساب کاربری مون میشیم توی ftp اینطور نیست؟keimasi:
۰۲ خرداد ۱۳۹۲
همونطور که شما برای ورود به FTP سروری که میگید، از نام کاربری anonymous استفاده کردید، و این نام کاربری رو هر کسی میتونه ازش استفاده کنه. فک میکنم منظور شما از اینکه توی اون کلی سایت میرید و تا میرید وارد حساب کاربریتون میشید، از مرورگر استفاده میکنید تا برنامه aria2 ، که کامندلاین برای FTP استفاده کردید. زمانیکه از مرورگر استفاده میکنید کوکی های شما از سایتی که بهش مراجعه کردید روی سیستمتون ذخیره میشه، و در مراجعههای بعدیتون دیگه نیازی به login ندارید.محمد:
۰۲ خرداد ۱۳۹۲
خوب من هم الآن می خوام ببینم میشه همچین کاری کرد یا نه؟مسعود آموزگار:
۰۲ خرداد ۱۳۹۲
اکانت های کاربری ناشناس یا همون anonymous معمولا بصورت دائم لوگین نمیمونن تا همگی کاربران بدون ایجاد ترافیک سنگین روی شبکه بتونن بهش متصل بشن. بنابراین بعید میدونم چنین چیزی ممکن باشه. من نمیدونم شما از چه سرویسی استفاده میکنید ولی سرویس های اف تی پی به کلی با پروتکل اچ تی تی پی تفاوت دارن.محمد:
۰۳ خرداد ۱۳۹۲
پس باید با یک یوزر مخصوص لاگین کنم؟توی آموزش بالا روش ساخت یوزر را نگفته آیا اصلا میشه توش یوزر ساخت؟keimasi:
۰۳ خرداد ۱۳۹۲
شما توی سروری که دست خودتون هست میتونین یوزر تعریف کنید، اما معمولا سایتهایی که امکان دانلود فایلهاشون رو از طریق FTP میذارن، برای هر کاربر که بخواد دانلود کنه قابلیت لاگین با anonymous را فعال میکنن تا کاربرا راحتتر فایل دریافت کنن و نیاز به رجیستر و لاگین نداشته باشند. در کل این یه حسن هست که شما میتونی بدون رجیستر با استفاده از یوزر anonymous فایل بگیری. و اینکه امکان ایجاد یوزر هست اما نیازی نیس که انجام بشه.محمد:
۰۳ خرداد ۱۳۹۲
چجوری امکان ساخت یوزر هست؟keimasi:
۰۳ خرداد ۱۳۹۲
شما کاربرایی رو که با دستور adduser میسازی، میتونی برای login به FTP هم استفاده کنی، به شرط اینکه توی کانفیگ فایل FTP ایت، پارامتر local_enable=YES رو uncomment کنید.محمد:
۰۳ خرداد ۱۳۹۲
ببخشید فکر کنم شما فکر می کنید که من قرار ftp داشته باشم(اگه نه پس دستورات بالا را توضیح بدید)
من قراره به عنوان یک کاربر از یک مخزن ftp استفاده کنم و می خوام بجای این که با anonymouse وارد بشم برای خودم یک اکانت داشته باشمkeimasi:
۰۳ خرداد ۱۳۹۲
اونو دیگه باید از مسئولین سایتی که میخواین بهش FTP کنین درخواست کنین :) که به شما نخواهند داد.