نصب و راه اندازی سرویس VSFTP در CentOS
آموزش گام به گام نصب و راه اندازی سرویس FTP در لینوکس
آموزش نصب و راه اندازی سرویس VSFTP در CentOS
در این پست به معرفی سرویس vsftp و برخی از پارامتر های مورد استفاده در آن خواهیم پرداخت و در ادامه به نحوه پیکربندی سرویس و تست عملکرد آن خواهیم پرداخت. در انتهای این آموزش شما قادر خواهید بود که سرویس vsftp را راه اندازی نمایید و به صورت اولیه سرویس خود را ایمن نمایید.
FTP چیست:
FTP پروتکلی است که با هدف انتقال فایل در بستر شبکه ایجاد شده است و برای کاربران امکان اتصال و انتقال فایل از کلاینت به سرور را فراهم می نماید.
این پروتکل یکی از رایج ترین و ساده ترین پروتکل های مورد استفاده در شیکه برای انتقال فایل می باشد ولی به دلیل اینکه در تبادل اطلاعات از رمزنگاری استفاده نمیکند دارای امینت بسیار پائین است در نتیجه مورد هدف Exploit های بسیاری است.
vsftp چیست؟:
vsftp یکی از سرویس های ارائه FTP است که مخفف کلمات Very Secure File Transfer Protocol میباشد. این سرویس به علت امنیتی که در عین سادگی پیکربندی فراهم میکند بسیار مورد توجه قرار گرفته است و به صورت گسترده نیز در حال استفاده است. برخی از امکانات این سرویس به شرح زیر است:
-
- امکان استفاده از virtual IP
- پشتیبانی از virtual user
- قابلیت کار به صورت Standalone یا تحت نظر inetd
- فراهم بودن ایجاد محدودیت در پهنای باند
- پشتیبانی از IPv6
- رمز نگاری اطلاعات از طریق ssl
نصب و راه اندازی vsftp:
در این آموزش از سیستم عامل CentOS به عنوان سرور استفاده شده است. پکیج مربوط به این سرویس vsftpd نام دارد و در repository های پیش فرض این سیستم عامل قرار دارد.
با استفاده از yum پیکیج vsftpd را نصب می نماییم.
yum –y install vsftpd
بعد دانلود و نصب پیکیج های مورد نیاز، می بایست سرویس را start و enable کرده تا سرویس در هر بار بوت به صورت اتوماتیک اجرا گردد.
systemctl enable vsftpd
systemctl start vsftpd
حال برای این که امکان سرویس دهی از طریق پروتکل ftp به سیستم های داخل شبکه فراهم شود، نیاز است رول های مربوطه در firewalld به صورت دائمی اضافه گردند. در غیر این صورت فایروال اتصال کاربران از طریق این پروتکل را به صورت پیش فرض نمی دهد.
firewall-cmd --zone=public --permanent --add-port=21/tcp
firewall-cmd --zone=public --permanent --add-service=ftp
firewall-cmd –reload
حال که سرویس نصب، راه اندازی، و فعال شده است، بهتر است قبل از نصب به آشنایی با برخی از پارامتر های قابل پیکربندی در این سرویس بپردازیم.
پارامترهای فایل پیکربندی:
سرویس vsftp نیز همانند اکثر سرویس های لینوکسی پارامتر های پیکربندی را از قایل پیکربندی آن و درمسیر /etc/vsftpd/vsftpd.conf مقدار دهی خواهد کرد. برخی از پارامتر های مورد استفاده در این سرویس به همراه توضیحی مختصر از آنها به شرح جدول زیر می باشد.
anonymous_enable | مشخص کننده این است که آیا امکان اتصال به سرور به صورت ناشناس وجود دارد یا خیر در حالت پیش فرض مقدار این گزینه برابر با yes است که به این معنی می باشد که نام های کاربری anonymous و ftp امکان اتصال به سرور را دارا می باشند. |
local_enable_enable | امکان authentication را بر اساس نام های کاربری local فراهم می سازد. درواقع این گزینه امکان authentication کاربران را بر اساس فایل /etc/passwd فراهم میکند. |
write_enable | در صورت فعال بودن، اجازه استفاده از دستوراتی که منجر به نوشتن بر روی دیسک میشود را فراهم میکند. مانند put یا del |
local_umask | مشخص کننده umask پیش فرض فایل های ایجاد شده می باشد. مقدار پیش فرض022 می باشدکه برابر با ۷۵۵ در دستورchmod است. |
dirmessage_enable | هنگامی که کاربری به دایرکتوری ای جدید وارد میشود در صورت yes بودن این گزینه و موجود بودن فایل message_file پیغامیکه درون آن فایل قرار دازد در هنگام تغییر دایرکتوری به وی نمایش داده می شود. |
message_file | بیان گر نام فایلی است که قرار است پیغام آن به کاربر نمایش داده شود. |
connect_from_port_20 | استفاده از پورت 20 را به عنوان data channel فعال یا غیر فعال میکند. این گزینه با yes یا no مقدار دهی می شود. |
ftp_data_port | در صورتی که قصد داشته باشیم data channel بر روی پورتی غیر از پورت 20 فعالیت کند می بایست گزینه بالا را برابر با no قرار داده و از طریق ftp_data_port پورت مورد نظر را مشخص نمائیم. |
xferlog_std_format | در صورت no بودن، لاگ های اتصال کاربران در مسیر /var/log/vsftpd.log ثبت و ذخیره مشود. |
listen | این گزینه مشخص کننده این است که سرویس به صورت standalone فعالیت کند یا خیر. در صورتی که این گزینه no باشد سرویس تحت مدیریت xinetd فعالیت خواهد کرد در غیر این صورت به عنوان سرویسی خود تمام وظایف مانند listen کردن بر روی پورت ها را بر عهده میگیرد. معمولا در صورتی این گزینه no قرار داده میشود که قرار باشد بر روی IPv4 و IPv6 به صورت همزمان فعالیت نمود. باید توجه داشت در صورتی که سرویس در حالت standalone قرار کرفته باشد، خط listen_ipv6 می بایست برابر با no قرار گیرد. |
listen_ipv6 | با فعال بودن این گزینه سرویس بر روی سوکت IPv6 فعالیت خواهد کرد. |
pam_service_name | بیانگر نامی است که مازول امنیتی pam برای این سرور مورد استفاده قرار خواهد داد. فایل کانفیگ سرویس ها در ماژول pam در مسیر /etc/pam/vsftp قرار میگیرد. |
userlist_enable | با yse بودن این گزینه سرویس لیست کاربران را از فایلی که معمولا در مسیر /etc/vsftp.userlist قرار دارد میخواند. در صورتی که گزینه userlist_deny برابر با yes باشد هیچکدام از کاربران درون لیست مذکور اجازه اتصال به سرور را نخواهند داشت. بر عکس در صورتی که این مقدار برابر با no باشد تنها کاربران داخل لیست امکان اتصال خواهند داشت. |
tcp_wrappers | این گزینه برای فعال یا غیر فعال کردن tcp wrappers است. هنگامی که کلاینتی قصد اتصال و استفاده از سرویسی را داشته باشد tcp wrapper به ترتیب به فایل های /etc/hosts.allow و /etc/hosts.deny نگاه میکند تا ببیند آیا لیستی از هاست های مجاز و غیر مجاز وجود دارد یا خیر و اگر وجود دارد کلاینت در کدام یک از این فایل ها وجود دارد. به عنوان مثال میتوان کلاینت با آدرس ۱۹۲.۱۶۸.۲۰۰.۲۰۱و لوکال هاست را به صورت زیر جهت استفاده از vsftp مجاز و بقیه را غیر مجاز معرفی کرد. Vsftp : 192.168.200.201,LOCAL و با اقزودن خط زیر به /etc/hosts.deny بقیه کلاینت ها را غیر مجاز معرفی کرد. Vsftp : ALL ALL : ALL |
chown_uploads | با کمک این گزینه میتوان تعیین کرد که فایل هایی که کاربران ناشناس در سرور آپلود می نمایند دارای ownership به خصوصی باشند. این گزینه در کنار گزینه chown_username کاربرد دارد. |
chown_username | بیان گر نام کاربری است که فایل های آپلود شده به سرور تحت مالکیت آن خواهند بود. |
idle_session_timeout | بیانگر مدت زمانی است که سرور در انتظار فعالیتی از کلاینت می ماند. در صورتی کانکشنی بیش از مدت زمان تعیین شده بدون فعالیت باقی بماند آن کانکشن توسط سرور بسته خواهد شد. |
userlist_file | معرفی کننده مسیری است که فایل userlist در آن قرار گرفته است. |
userlist_deny | اگر برابر با yes باشد ( مقدار پیش فرض) کاربران داخل این لیست مجاز به اتصال نخواهند بود. در صورت no بودن تنها کاربران userlist امکان اتصال خواهند داشت. |
chroot_local_user | بیانگر این است که jail برای کاربران فعال است و پس از ورود در home دایرکتوری خود محبوس میشوند. اما به صورت پیش فرض و به دلایل امینتی vsftp اازه نوشتن در مسیری که jail شده است را به کاربر نمی دهد. برای این که کاربر اجازه نوشتن در دایرکتوری ای که در آن jail شده است را داشته باشد باید گزینه زیر نیز فعال شود. |
allow_writeable_chroot | اجازه دادن به کاربر جهت نوشتن در روی دایرکتوری ای که در آن jail شده است. |
نکته: در خصوص گزینه message_file باید توجه داشت که این فایل باید hidden باشد و در دایرکتوری ای که قصد نمایش آن را به کاربر داریم وجود داشته باشد. به عنوان نمونه با قرار دادن مقدار این پارامتر به صورت زیر و قرار دادن فایل warning در home کاربر می بایست پیغام داخل این فایل در هنگام ورود به کاربر نمایش داده شود.
message_file=.warning
در نهایت با توجه به این که در این آموزش قصد داریم تا امکان استفاده از ftp را برای کاربران local فراهم کنیم و هر کاربر نیز در home خود jail شود، فایل config نهایی به صورت زیر خواهد بود.
پس از ذخیره کردن تنظیمات، سرویس را مجددا راه اندازی میکنیم.
با توجه به این که ما در این آموزش از chroot استفاده کرده ایم نیاز است تا selinux نیز در این خصوص پیکربندی شود. در غیر این صورت در هنگام وررود با پیغام زیر مواجه خواهید شد.
setsebool -P ftpd_full_access on
تست عملکرد:
پس از انجام تنظیمات، اتصال از طرق ftp به سرور را تست و بررسی میکنیم.
همانطور که مشاهده می شود، اتصال به سرور موفق بود. حال با توجه به این که tcp_wrapper نیز در تنظیمات vsftp فعال شده بود، تست دیگر را با معرفی هاست و سرویس در فایل های /etc/hosts.allow و /etc/hosts.deny انجام می دهیم.
ابتدای به امر در فایل /etc/hosts.allow امکان استفاده از سرویس vsftpd را تنها برای Localhost فراهم کرده و سپس در /etc/hosts.deny سایر هاست ها را از استفاده از این سرویس منع میکنیم. محتویات فایل های اشاره شده به صورت زیر خواهد بود.
ابتدا به صورت local اتصال را بررسی می نمائیم. همانطور که در تصویر زیر مشاهده مینمائید این اتصال با موفقیت انجام شد.
حال از کلاینت خود و از طریق شبکه اتصال را بررسی میکنم. با توجه به توضیحات بالا و پیکربندی انجام شده کاربر امکان اتصال به سرویس را نخواهد داشت.
توضیح نهایی این که تا این جای کار کاربران local امکان اتصال حواهند داشت، در صورتی قصد داشته باشیم تا تعداد محدودی از کاربران مجاز به ورود و استفاده از سرویس باشند، می بایست از userlist استفاده کنیم و تنها نام کاربری کاربران مجاز را در آن معرفی نماییم.
نتیجه گیری:
همانطور که اشاره شد، پروتکل های مختلفی برای به اشتراک گزاری فایل و انتقال فایل وجود دارد که FTP یکی از قدیمی ترین، ساده ترین آن ها است که گستردگی استفاده زیادی نیز دارد.
در این مستند علاوه بر نصب و پیکربندی اولیه سرویس FTP، برخی از مواردی که می توانستند به بالا بردن امنیت سرویس کمک کنند نیز مورد بررسی قرار گرفت. در هنگام استفاده از این پروتکل باید تلاش کرد تا امنیت سرویس و کاربران استفاده کننده از آن نیز در نظر گرفته شود. چرا که این سرویس از آن دسته از سرویس هایی است که علاوه بر هدف بودن برای حملات، exploit های بسیاری هم برای حمله به آن و نفوذ به سیستم از طریق این سرویس وجود دارد.