ftp-diagram

آموزش نصب و راه اندازی سرویس VSFTP در CentOS

آموزش نصب و راه اندازی سرویس 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

mesage

در نهایت با توجه به این که در این آموزش قصد داریم تا امکان استفاده از ftp را برای کاربران local فراهم کنیم و هر کاربر نیز در home  خود  jail شود،  فایل config نهایی به صورت زیر خواهد بود.

conf.d

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

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

setsebool -P ftpd_full_access on

selinux error

تست عملکرد:

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

test-service-funcionality

همانطور که مشاهده می شود، اتصال به سرور موفق بود. حال با توجه به این که tcp_wrapper  نیز در تنظیمات vsftp فعال شده بود، تست دیگر را با معرفی هاست و سرویس در فایل های /etc/hosts.allow و /etc/hosts.deny انجام می دهیم.

ابتدای به امر در فایل /etc/hosts.allow امکان استفاده از سرویس vsftpd را تنها برای Localhost فراهم کرده و سپس در /etc/hosts.deny سایر هاست ها را از استفاده از این سرویس منع میکنیم. محتویات فایل های اشاره شده به صورت زیر خواهد بود.

tcp-wrapper

ابتدا به صورت local  اتصال را بررسی می نمائیم. همانطور که در تصویر زیر مشاهده مینمائید این اتصال با موفقیت انجام شد.

tcp-wrapper-test-localhost

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

tcp-wrapper-test-client

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

نتیجه گیری:

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

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

 

 

 

 

 

 

 

 

 

حامد
اشتراک دانش رو دوست دارم برای همین سعی میکنم مطالب آموزشی ای تهیه شده دارای جزئیات خوب و به صورت کامل تهیه بشوند.استفاده از مطالب این سایت در هر جایی بلا مانع می باشد. اما ذکر منبع رفتاری حرفه ای و اخلاقی خواهد بود. من را از نظرات خود مطلع سازید. و اگر میخواهید در مورد من بیشتر بدانید سری به صفحه "در باره من" بزنید.