دانستنی های پروتکل FTP
#1
Note 
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 وجود دارد.

[h=3][FONT=arial]ورود به یک FTP سرور[/FONT][/h] برای ورود و دسترسی به سرور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_command_and_data_channels-resized-600.png]

همانطور که گفته شد، در اکثر اوقات برای FTP کردن به هر سروری می بایست نام کاربری و پسورد برای احراز هویت و تعیین سطح دسترسی وجود داشته باشد، اما در برخی مواقع نظیر وجود سرورهایی برای در دسترس قرار دادن اطلاعات برای همگان و یا اهداف تبلیغاتی، امکان ورود به سرور از طریق FTP را برای تمام افراد وجود دارد و کاربران بدون داشتن نام کاربری و پسورد به مجموعه ای معین از فایل ها دسترسی خواهند داشت. این رویه Anonymous FTP نام دارد. در این فرآیند ابتدا به سرور مورد نظر ftp میکنیم، سپس از کلمه anonymous برای نام کاربری استفاده می کنیم و هیچ پسوردی نمی زنیم، به این صورت به محتویات فایل ها و دایرکتوری هایی که مجوز استفاده از آنان را داریم دسترسی پیدا خواهیم کرد.

به عنوان مثال توسط کامند زیر به یک FTP Server به آدرس زیر به عنوان یک کاربر anonymous لاگین می کنیم:
کد:
[TABLE]
[TR]
[TD="class: gutter"]1

[/TD]
[TD="class: code"]$ ftp ftp.heanet.ie


[/TD]
[/TR]
[/TABLE]


[align=center]

[تصویر:  anonymous-ftp-login-e1368199998122.png]


[/align] همان طور که در شکل دیده می شود نام کاربری 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-command-e1368200169146.png]


همانطور که در لیست دستورات داخلی FTP ملاحظه می کنید، برای آپلود فایل به سرور از دستور put استفاده می کنند. در صورتی که تعداد فایل ها بیش از یک فایل باشد، از mput استفاده می شود. به همین ترتیب برای گرفتن فایل نیز از get و mget می توان استفاده نمود.
در انتقال فایل توسط FTP داده ها رمزنگاری نمی شوند و همین امر موجب شده است که FTP مورد توجه attacker ها قرار گیرد تا پکت های یک شبکه را sniff  کنند. به  همین  خاطر معمولا FTPS را پیشنهاد می کنند که یک اکستنشن برای FTP است که پروتکل های TLS و SSL را پشتیبانی می کند. معمولا قبل از پیکربندی FTP سرور برای استفاده SSL می بایست برنامه های پیش نیاز آن را قبلا نصب کرده باشید.
[h=3][FONT=arial]
راه اندازی یک FTP سرور[/FONT]
[/h] از برنامه هایی که بطور معمول برای راه اندازی 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 هایی که سرویس را می خواهید در آن ها بالا بیاورید تعیین کنید.


کد:
[TABLE]
[TR]
[TD="class: code"]chkconfig --level 345 vsftpd on

/etc/init.d/vsftpd restart


[/TD]
[/TR]
[/TABLE]

بررسی log فایل ها در هنگام start شدن سرویس FTP برای بررسی خطاهای احتمالی سرویس توصیه شده است.


کد:
[TABLE]
[TR]
[TD="class: code"]grep vsftpd /var/log/messages


[/TD]
[/TR]
[/TABLE]

ذکر این نکته حائزاهمیت است که در صورت استفاده از سرویس هایی مثل iptables نیاز است که پورت های مورد استفاده از سرویسی را که راه اندازی می کنید بر روی سرور باز کنید.
همانطور که سرویس FTP از پورت ۲۱ استفاده می کند، در صورتی که این پورت در فایروال ها بسته باشد، بایستی اقدام به باز نمودن آن کرد. برای این کار می بایست فایل iptables را ویرایش کنید، که توسط هر ویرایشگری می توان این کار را انجام داد(nano, vi,..).


کد:
[TABLE]
[TR]
[TD="class: code"]vi /etc/sysconfig/iptables


[/TD]
[/TR]
[/TABLE]


سپس توسط دستور زیر، پورت۲۱ TCP به مابقی رول های امنیتی موجود افزوده و accept خواهد شد.
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

پس از ذخیره تغییرات اعمال شده می بایست سرویس iptables را startیا restart کرد.


کد:
[TABLE]
[TR]
[TD="class: code"]service iptables start


[/TD]
[/TR]
[/TABLE]




برای تست کردن FTP می توان به localhost یا ip:127.0.0.1 و یا آدرس خود سرور FTP  کرد:
کد:
[TABLE]
[TR]
[TD="class: code"]ftp localhost

ftp 127.0.0.1

ftp FTP.domain.com


[/TD]
[/TR]
[/TABLE]

در پیکربندی پیش فرض اجازه دانلود برای کاربر 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 خواهند شد.


Shy
When we speak of “free software”, we're talking about freedom, not price
پاسخ
ایجاد موضوع جدید   پاسخ به موضوع  

کاربرانِ درحال بازدید از این موضوع:   1 مهمان