آموزش نصب vsftpd در اوبنتو

دسته بندی: آموزش
آموزش نصب vsftpd

در این مقاله می‌خواهیم چگونگی راه‌اندازی vsftpd برای توزیع اوبنتو در لینوکس را یاد بگیریم. قبل از آن بد نیست کمی راجع به مفهوم این عبارت بدانیم.

vsftpd چیست؟

این عبارت مخفف Very Secure FTP Deamon است. می‌توانید مقاله FTP چیست؟ را بخوانید تا بیشتر با این پروتکل آشنا شوید.

vsftpd هم تفاوت چندانی با پروتکل اصلی، یعنی FTP ندارد. فقط به‌خاطر رابط کاربری کارآمدتری که نسبت به اپلیکیشن‌های FTP دارد، دسترسی به فایل‌ها را آسان‌تر می‌کند. همچنین امنیت آن نسبت به پروتکل FTP هم بیشتر است.

هرچه باشد FTP سال‌ها پیش عرضه شد و مشکلات امنیتی امروزی در آن زمان وجود نداشتند. به همین خاطر، خیلی نباید از آن توقع ایمن بودن داشت.

حالا بیایید چگونگی نصب vsftpd را یاد بگیریم.

چگونگی نصب vsftpd روی سرور ubuntu

برای اینکه از این پروتکل در توزیع ابنتو لینوکس بهره ببریم، ابتدا باید دستورات زیر را در محیط خط فرمان این توزیع وارد کنیم.

نکته: می‌توانید مقاله کدام توزیع لینوکس برای شما مناسب است را بخوانید تا بیشتر با توزیع‌های مختلف این سیستم‌عامل آشنا شوید.

برگردیم سر اصل مطلب. دستوراتی که برای شروع کار باید وارد کنید، دستورات زیر هستند:

در مرحله بعدی باید فایل etc/vsftpd.conf/ را باز کنیم و محتویات زیر را داخل آن قرار دهیم:

دسترسی FTP

ما فقط به کاربران محلی اجازه دسترسی به سرور FTP خواهیم داد ، دستورالعمل های anonymous_enable و local_enable را پیدا کنید و مطمئن شوید که پیکربندی شما با خطوط زیر مطابقت دارد:

پارامتر anonymous_enable

این پارامتر مشخص می‌کند که آیا امکان اتصال به سرور به صورت ناشناس وجود دارد؟! در حالت پیش‌فرض، مقدار این گزینه برابر با yes است؛ این یعنی نام های کاربری anonymous و ftp امکان اتصال به سرور را دارند.

حتما بخوانید:  مخفی کردن درایوها در Windows

پارامتر local_enable

پارامتر فوق، امکان احراز هویت (authentication) بر اساس نام‌های کاربری local را فراهم می‌کند. درواقع این گزینه، امکان Authentication کاربران با کمک فایل /etc/passwd را فراهم میکند.

فعال‌سازی امکان Upload

تنظیمات write_enable برای ایجاد تغییرات در فایل سیستم، کارآمد هستند. کارهایی مثل بارگذاری و حذف پرونده‌ها. در‌صورت فعال بودن این تنظیمات، اجازه استفاده از دستوراتی که منجر به نوشتن بر روی دیسک می‌شوند، فراهم است. دستوراتی مثل put یا del.

پارامتر local_umask

این پارامتر نشان‌دهنده پیش‌فرض فایل های ایجاد شده است. مقدار پیش فرض ۰۲۲ است که در دستورchmod برابر با ۷۵۵ است.

پارامتر dirmessage_enable

اگر زمانی که کاربری به دایرکتوری‌ای جدید وارد می‌شود، اگر جلوی این پارامتر yes نمایش داده شود و همچنین درصورت وجود فایل message_file، پیغامی که درون آن فایل قرار دارد، در هنگام تغییر دایرکتوری به وی نمایش داده می‌شود.

پارامترmessage_file

نام فایلی است که قرار است پیغام آن به کاربر نمایش داده شود.

connect_from_port_20

برای فعال یا غیرفعال‌سازی پورت ۲۰ به‌عنوان data channel کاربرد دارد. مقدار این گزینه هم یا yes است یا no!

ftp_data_port

اگر تصمیم گرفتید مقدار گزینه بالا را no قرار دهید و از پورت ۲۰ به‌منظور data channel استفاده نکنید، در این قسمت باید پورتی که برای اینکار در نظر گرفته‌اید را مشخص کنید.

xferlog_std_format

اگر مقدار این پارامتر با no نشان داده شود، لاگ‌های اتصال کاربران در مسیر /var/log/vsftpd.log ثبت و ذخیره می‌شوند.

Listen

Listen تعیین می‌کند که آیا سرویس به‌صورت standalone فعالیت می‌کند یا نه! اگر گزینه رو‌به‌روی آن no باشد، فعالیت سرویس تحت مدیریت xinted خواهد بود. در غیر این‌صورت، تمام وظایف مانند listen روی پورت‌های مختلف، برعهده خود سرویس است.

معمولاً وقتی قرار باشد از IPv4 و IPv6 به‌صورت همزمان استفاده کرد، رو‌به‌وری listen مقدار no قرار می‌گیرد. نکته مهم اینکه اگر سرویس در حالت standalone باشد، خط listen-ipv6 باید برابر با no باشد.

listen_ipv6

با فعال بودن این گزینه، سرویس روی سوکت IPv6 به فعالیت خود ادامه می‌دهد.

pam_service_name

این پارامتر، نامی را نشان می‌دهد که ماژول امنیتی pam برای این سرور از آن استفاده می‌کند! فایل کانفیگ سرویس‌ها در این ماژول، در مسیر etc/pam/vsftpd/ قرار می‌گیرند.

userlist_enable

اگر مقدار این پارامتر برابر با yes باشد، سرویس لیست کاربران را از فایلی که در مسیر etc/vsftpd.userlist/ قرار دارد می‌خواند. حالا اگر پارامتر userlist-deny برابر با yes باشد، هیچکدام از کاربرانی که درون لیست قرار دارند، امکان اتصال به سرور را نخواهند داشت. در نقطه مقابل، اگر این مقدار برابر با no باشد، تنها کاربران داخل لیست امکان اتصال را خواهند داشت.

tcp_wrappers

این گزینه، برای فعال یا غیرفعال کردن tcp wrappers کاربرد دارد. اگر کاربری قصد اتصاب به سرویسی یا استفاده از آن را داشته باشد، tcp wrappers ابتدا به‌ترتیب فایل‌های /etc/hosts.allow و /etc/hosts.deny را بررسی می‌کند. اینکار به‌منظور پیدا کردن لیستی از هاست‌های مجاز یا غیرمجاز انجام می‌شود؛ و اینکه اگر وجود دارد، کاربر در کدام یک از فایل‌ها قرار دارد؟

مثلاً کلاینت (کاربر) با آدرس ۱۹۲.۱۶۸.۲۰۰.۲۰۱  و لوکال هاست، برای استفاده از vsftpd مجاز است و بقیه این اجازه را ندارند!

همچنین افزودن خط زیر به زیر به /etc/hosts.deny، باقی کلاینت‌ها را غیرمجاز معرفی می‌کند:

chown_uploads

کاربرد این گزینه، مربوط به فایل‌هایی است که کاربران ناشناس در سرور آپلود می‌کنند. با کمک chown_uploads، می‌توان تعیین کرد که این فایل‌ها، دارای ownership مخصوصی باشند. البته این گزینه در کنار گزینه chown_username کارآمد است که در بخش بعدی به آن می‌پردازیم.

chown_username

این گزینه نام کاربری را نشان می‌دهد که فایل‌های آپلود شده روی سرور، تحت مالکیت او هستند.

idle_session_timeout

این گزینه مدت‌زمانی را نشان می‌دهد که سرور منتظر فعالیتی از کاربر (کلاینت) می‌ماند. اگر اتصالی بیش‌از‌مدت تعیین‌شده بدون فعالیت باشد، توسط سرور بسته خواهد شد.

userlist_file

مسیری را نشان می‌دهد که فایل userlist در آن قرار دارد.

userlist_deny

اگر برابر با yes ‌باشد ( مقدار پیش فرض) کاربران داخل این لیست مجاز به اتصال نخواهند بود. در صورت no ‌بودن تنها کاربران userlist امکان اتصال خواهند داشت.

اگر دست به حالت پیش‌فرض یعنی yes نزنیم، کاربرانی که داخل لیست قرار دارند، امکان اتصال را نخواهند داشت. اگر مقدار no باشد، تنها کاربران حاضر در userlist می‌توانند متصل شوند.

chroot_local_user

این گزینه نشان می‌دهد که کاربران پس از ورود به home، در دایرکتوری خود محبوس می‌شوند! به بیانی دیگر، jail برای کاربران فعال است؛ اما vsftp، به‌دلایل امنیتی، به‌صورت پیش‌فرض اجازه نوشتن در مسیری که jail شده است را به کاربر نمی‌دهد.

برای اینکه کاربر چنین اجازه‌ای را کسب کند، باید گزینه زیر نیز فعال شود.

allow_writeable_chroot

این گزینه به کاربر اجازه می‌دهد تا دایرکتوری‌ای که در آن jail شده بنویسد.

Chroot Jail

این گزینه، کاربران FTP را از دسترسی به فایل‌های خارج از home directories با chroot منع می‌کند:

در حالت پیش‌فرض، هنگامی که chroot فعال باشد و فهرستی که کاربران در آن jail شده‌اند، توسط ایشان قابل نوشتن باشد، vsftpd از آپلود پرونده جلوگیری می‌کند. اینکار جنت پیشگیری از وقوع آسیب‌پذیری امنیتی است.

اگر می‌خواهید هنگام فعال کردن chroot، امکان آپلود کردن داشته باشید، باید یکی از روش‌های زیر را به‌کار بگیرد:

۱- احتمالاً بهترین کار برای کسب اجازه آپلود، فعال کردن chroot و پیکربندی دایرکتوری‌های FTP است. در ادامه، برای آموزش یک دایرکتوری ftp داخل Home کاربر ایجاد می‌کنیم که به‌عنوان chroot و یک فهرست بارگذاری نوشتاری برای بارگذاری فایل‌ها مورداستفاده قرار می‌گیرد:

۲- روش دیگر، استفاده از دستور زیر در پیکربندی vsftpd است. اگر می‌خواهید به کاربر، اجازه اعمال تغییرات در home directory را بدهید، از این روش استفاده کنید:

اتصالات FTP منفعل

vsftpd می تواند از هر پورت برای اتصالات FTP منفعل استفاده کند. ما حداقل و حداکثر رنج پورت‌ها را مشخص می‌کنیم و سپس دامنه را در فایروال خود باز خواهیم کرد.

خطوط زیر را به پرونده پیکربندی اضافه کنید:

محدود کردن ورود کاربر

اگر می‌خواهید فقط برخی از کاربران اجازه ورود به سرور FTP را داشته باشند، خطوط زیر را بعد از خط userlist_enable=YES بیاورید:

وقتی این گزینه فعال شود، باید به‌صراحت مشخص کنید که کابراران با اضافه کردن نام‌های کابری به پرونده /etc/vsftpd/user_list (یک کاربر در هر خط) می‌توانند وارد سیستم شوند.

تضمین انتقال با  SSL / TLS

برای ایمن کردن انتقال FTP با کمک SSL/TLS، اول از همه به یک گواهی SSL نیاز دارید و سپس باید سرور FTP را هم پیکربندی کنید.

اگر دامنه یا زیردامنه‌ای دارید که به آدرس IP سرور FTP اشاره می‌کند، خیلی راحت می‌توانید یک مجوز رایگان SSL هم تولید کنید.

حتما بخوانید:  نصب و تنظیمات فایروال CSF

در ادامه، با کمک ابزار openssl یک self-signed SSL certificate می‌سازیم.

دستوری که آورده‌ایم، یک کلید خصوصی ۲۰۴۸ بیتی و یک گواهی self-signed به‌مدت ۱۰ سال ایجاد می‌کند. این کلید خصوصی و گواهی مذکور، در یک پرونده ذخیره می‌شوند:

پس از ایجاد گواهینامه SSL، پرونده پیکربندی vsftpd را باز کنید:

حالا باید دستورالعمل‌های rsa_cert_file و rsa_private_key_file را پیدا کنید. پس از یافتن آن‌ها، مقادیرشان را در مسیر فایل pam تغییر دهید و دستورالعمل ssl_enable را برابر با YES قرار دهید:

در غیر‌این‌صورت ، سرور FTP برای برقراری اتصالات ایمن فقط از TLS استفاده می کند.

پس از انجام ویرایش، محتویات فایل پیکربندی vsftpd  (به استثنای comments ) باید چیزی شبیه به این باشد:

حالا فایل را ذخیره و سرویس vsftpd را به‌منظور اعمال تغییرات، ری‌استارت کنید. اینکار با دستور زیر انجام می‌شود:

ایجاد کاربر FTP به‌منظور تست سرور:

برای تست سرور FTP باید کاربر جدید ایجاد کنیم. در ادامه چگونگی اینکار را توضیح خواهیم داد:

اگر از قبل کاربرانی دارید که می خواهید به FTP دسترسی داشته باشند، از مرحله دوم شروع کنید.

۱. کاربر جدیدی با نام newftpuser میسازیم:

در مرحله بعد، باید رمزعبور کاربر را مشخص کنید :

۲. درخت پوشه FTP را ایجاد کنید و مجوزهای صحیح را تنظیم و ارائه کنید:

باز کردن فایروال با دستورا زیر انجام می‌شود:

فایروال ufw:

فایروال firewalld:

جهت فعال کردن vsftp، سرویس را مجدداً استارت کنید:

برای فعال‌سازی این سرویس، هنگام بوت شدن سیستم‌عامل دستور زیر را وارد کنید:

غیرفعال کردن دسترسی Shell

هنگام ایجاد کاربر، اگر صریحاً عدم دسترسی مشخص نشده باشد، کاربر به‌طور پیش‌فرض اجازه دسترسی به SSH سرور را خواهد داشت.

برای غیرفعال کردن دسترسی به Shell، به یک پوسته جدید نیاز داریم که به‌سادگی پیامی را چاپ کند. پیامی که به کاربر می‌گویند حسابش فقط به دسترسی FTP محدود است.

برای ایجاد شل /bin/ftponly و  اجرای آن، باید دستور زیر را اجرا کنید:

حالا باید پوسته جدید را به لیست پوسته‌های معتبر، در پرونده/etc/shells shell ها اضافه کنید:

سپس باید پوسته کاربر را به /bin/ftponly تغییر دهید:

اگر می‌خواهید پوسته را برای سایر کاربرانی که فقط قرار است به FTP دسترسی داشته باشند تغییر دهید. از همان دستور استفاده کنید.

در خصوص گزینه message_file، باید توجه داشته باشید که این فایل حتماً باید hidden باشد. همچنین در دایرکتوری‌ای وجود داشته باشد که قصد نمایش آن به کاربر را داریم.

برای مثال، با قرار دادن مقدار این پارامتر به‌شکل زیر و همچنین قرار دادن فایل warning در Home، باید پیغام داخل این فایل در هنگام ورود به کاربر نمایش داده شود:

به تصویر زیر توجه کنید:

vsftpd

با توجه به اینکه می‌خواهید امکان استفاده از FTP را برای کاربران Local فراهم کنیم، و همچنین با در نظر گرفتن این موضوع که هر کاربر در home خود jail می‌شود، فایل config نهایی به‌صورت زیر خواهد بود:

vsftpd

پس از ذخیره کردن تنظیمات، باید سرویس را دوباره راه‌اندازی کنیم.

از آنجایی که ما در این آموزش از chroot استفاده کردیم، باید selinux را هم پیکربندی کنیم. اگر اینکار را نکنید، هنگام ورود با پیغام زیر برخورد می‌کنید:

vsftpd

تست عملکرد

بعد از اینکه تنظیمات را انجام دادیم، باید اتصال از طریق FTP به سرور را تست و بررسی کنیم.

vsftpd

همان‌طور که در تصویر بالا می‌بینید، اتصال به سرور موفق بوده است! از آنجایی که tcp wrapper هم در تنظیمات vsftp فعال شده بود، باید تست بعدی را با معرفی هاست و سرویس‌ در فایل‌های /etc/hosts.allwo و /etc/hosts.deny اجرا کنیم.

اول از همه، باید در فایل /etc/hosts.allow امکان استفاده از vsftpd را فقط برای local host فراهم کنیم. در مرحله بعد، باید در فایل /etc/hosts.deny، اجازه استفاده باقی سرویس‌ها را سلب کنید. محتویات این فایل به‌صورت زیر خواهد بود:

vsftpd

حالا اتصال local را بررسی می‌کنیم. همان‌طور که در تصویر زیر می‌بینید، اتصال موفقیت‌آمیز بوده است.

vsftpd

حالا اتصال را توسط کلاینت خود و از طریق شبکه بررسی می‌کنیم. با استناد به توضیحات تصویر بالا و پیکربندی‌ای که انجام دادیم، کاربر امکان اتصال را نخواهد داشت.

vsftpd

توضیح نهایی این که تا این جای کار کاربران local امکان اتصال حواهند داشت، در صورتی  قصد داشته باشیم تا تعداد محدودی از کاربران مجاز به ورود و استفاده از سرویس باشند، می بایست  از userlist  استفاده کنیم و  تنها نام کاربری کاربران مجاز را در آن معرفی نماییم.

بنابراین، با انجام اینکارها، فقط کاربران local امکان اتصال را خواهند داشت؛ اما اگر می‌خواهید فقط تعداد محدودی از کاربران مجاز به ورود و استفاده از سرویس باشند، باید از userlist استفاده کنید و تنها یوزرنیم کابران مجاز را در آن وارد کنید.

کار تمام است!

جمع‌بندی

همان‌طور که دیدید، vsftpd نسخه کامل‌تر پروتکل FTP است که برای توزیعات مختلف لینوکس کاربرد دارد. این پروتکل که برای انتقال فایل است، رابط کاربری ساده‌تری نسبت به اپلیکیشن‌های FTP دارد که دسترسی به فایل‌ها را راحت‌تر می‌کند.

اگر سوالی در رابطه با vsftpd دارید، در قسمت‌ کامنت‌ها با ما در میان بگذارید تا متخصصان‌مان سریعاً پاسخ‌تان را بدهند.

مایلید هر دو هفته یک ایمیل مفید دریافت کنید؟

ما را در شبکه‌های اجتماعی دنبال کنید

همچنین شاید دوست داشته باشید!

نظرات کاربران

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.
شما برای ادامه باید با شرایط موافقت کنید

فهرست