امروزه نیاز به انتقال یکپارچه و ایمن فایلها چه برای کسب و کارها و چه برای اشخاص به موضوعی حیاتی بدل شده است. در میان پروتکلهای مختلف موجود، پروتکل انتقال فایل (FTP) مدتهاست که جایگاه خود را حفظ نموده است. با این وجود، آسیبپذیریهای امنیتی FTP باعث تکامل راهکاری امن شده است که vsftpd نام دارد.
vsftpd دیمن FTP بسیار امنی است که از گذشته تاکنون به عنوان دیمن پیشفرض FTP در راکی لینوکس و بسیاری دیگر از توزیعهای لینوکس مورد استفاده قرار گرفته است.
vsftpd امکان استفاده از کاربران مجازی با مدیریت دسترسی ممتاز (PAM) را فراهم میکند. این یوزرهای مجازی در سیستم وجود ندارند و هیچ مجوز دیگری به جز FTP ندارند. حتی اگر یکی از یوزرهای مجازی به خطر بیفتد، شخصی که به آن یوزر دسترسی دارد بلافاصله از تمامی مجوزها منع میشود.
توجه داشته باشید که ما در این مقاله، از توزیع راکی لینوکس استفاده میکنیم. به همین جهت ممکن است برخی از دستورات در سایر توزیع ها تفاوت اندکی داشته باشند.
قبل از آنکه به ادامه توضیح مطالب بپردازیم، توصیه میکنیم به این پیشنیازها توجه داشته باشید:
• تسلط به ویرایشگر vim
• تسط به دستورات CLI، مشاهده لاگها و سایر وظایف عمومی مدیر سیستم
• درک دستورات PAM و openssl
• اجرای دستورات با یوزر root یا استفاده از sudo با یوزر معمولی
نصب vsftpd
در برخی موارد ممکن است دستورات از توزیع باید از نصب openssl اطمینان حاصل کنید. اگر از وب سرور استفاده میکنید، احتمالاً از قبل روی سیستم شما وجود دارد، اما برای مطمئن شدن دستور زیر را اجرا کنید:
dnf install vsftpd openssl
همچنین سرویس vsftpd را با دستور زیر فعال کنید:
systemctl enable vsftpd
نحوه کانفیگ vsftpd
در قدم اول میبایست از غیرفعال کردن برخی تنظیمات و فعال کردن برخی دیگر اطمینان حاصل کنید.
برای بررسی فایل کانفیگ و ایجاد تغییرات در صورت لزوم، این دستور را اجرا کنید:
vi /etc/vsftpd/vsftpd.conf
دنبال خط "=anonymous_enable" بگردید و مطمئن شوید که جلوی آن "NO" نوشته شده باشد. یعنی باید به این شکل باشد:
anonymous_enable=NO
مطمئن شوید که جلوی "local_enable"، YES نوشته شده باشد:
local_enable=YES
شما میبایست یک خط برای کاربر روت لوکال اضافه کنید. اگر از وب سرور و از ستاپ وب سرور Apache استفاده میکنید، روت لوکال شما با تنظیمات مطابقت خواهد داشت. اگر تنظیمات شما متفاوت است، یا اگر از وب سرور استفاده نمیکنید، باید تنظیمات "local_root" را متناسب با آن تغییر دهید:
local_root=/var/www/sub-domains
اطمینان حاصل کنید که جلوی "write_enable" نیز YES نوشته شده باشد:
write_enable=YES
خط "chroot_local_users" را پیدا کنید و آن را از حالت کامنت خارج کنید. سپس، این دو خط را زیر آن اضافه کنید. یعنی بدین شکل:
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES
در زیر آن میبایست بخشی را اضافه کنید که با کاربران مجازی سروکار دارد:
Virtual User Settings #
user_config_dir=/etc/vsftpd/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd
همچنین، باید در پایین فایل بخشی را اضافه کنید تا رمزهای عبور ارسال شده از طریق اینترنت را رمزنگاری کند. بدین منظور، شما نیاز به نصب openssl دارید و همچنین باید یک گواهی برای این کار ایجاد کنید.
در قدم اول، این خطوط را در پایین فایل اضافه کنید:
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.key
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
pasv_min_port=7000
pasv_max_port=7500
سپس کانفیگ خود را ذخیره کنید. (Shift + : + wq)
نحوه ایجاد گواهی RSA
تعداد روزها را به دلخواه ویرایش کنید و از فرمت این دستور برای ایجاد گواهی و فایل های کلید خصوصی (private key) در CLI استفاده کنید:
openssl req -x509 -nodes -days 1825 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.key -out /etc/vsftpd/vsftpd.pem
تمامی فرآیندهایی که میبایست برای ایجاد یک گواهی انجام شود، در این مورد نیز صدق میکند. در ابتدا، یک اسکریپت ایجاد میشود که از شما اطلاعاتی را میخواهد. شما میتوانید بسیاری از فیلدها را خالی بگذارید تا این پروسه سریع تر انجام شود.
فیلد اول فیلد کد کشور است، این قسمت را با کد دو حرفی کشور خود پر کنید:
Country Name (2 letter code) [XX]:
در مرحلهی بعد نام ایالت یا استان خود را به صورت کامل بنویسید:
State or Province Name (full name) []:
سپس، نام شهر خود را وارد کنید:
Locality Name (eg, city) [Default City]:
در مرحلهی بعد باید نام شرکت یا سازمان خود را بدهید. البته میتوانید این قسمت را خالی بگذارید:
Organization Name (eg, company) [Default Company Ltd]:
در قدم بعدی، باید نام واحد سازمانی خود را وارد کنید. این بخش نیز اختیاری است و میتوانید آن را خالی بگذارید:
Organizational Unit Name (eg, section) []:
سپس باید فیلد زیر را با ارائه common name سرور خود تکمیل کنید. از فرمت مورد نظر خود نیز میتوانید این استفاده کنید. مانند webftp.domainname.ext:
Common Name (eg, your name or your server's hostname) []:
فیلد ایمیل را می توان خالی گذاشت:
Email Address []:
پس از تکمیل این مراحل، گواهی شما ایجاد خواهد شد.
نحوه راه اندازی یوزرهای مجازی
همانطور که قبلاً گفته شد، استفاده از یوزرهای مجازی برای vsftpd بسیار امن است زیرا آنها هیچ امتیاز سیستمی ندارند. در نظر داشته باشید که برای vsftpd شما باید علاوه بر اضافه کردن یوزرهای مجازی، گروه نیز ایجاد کنید:
groupadd nogroup
useradd --home-dir /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
یوزر باید با خط =guest_username در فایل vsftpd.conf مطابقت داشته باشد.
به دایرکتوری کانفیگ vsftpd بروید:
cd /etc/vsftpd
در این مرحله شما باید یک دیتابیس رمز عبور ایجاد کنید. شما از این دیتابیس برای احراز هویت کاربران مجازی استفاده میکنید. پس باید یک فایل برای خواندن یوزرهای مجازی و رمزهای عبور ایجاد کنید.
هر زمانی بخواهید کاربر جدیدی اضافه کنید، باید این فرآیند را مجدداً طی کنید:
vi vusers.txt
یوزر و پسورد باید از هم جدا باشند. اول یوزر را وارد کنید، ENTER بزنید و سپس پسورد را وارد نمایید. این کار را ادامه دهید تا زمانی که همهی کاربران مد نظر به سیستم دسترسی داشته باشند. مثال:
user_name_a
user_password_a
user_name_b
user_password_b
پس از ایجاد فایل متنی، دیتابیس پسورد را ایجاد کنید تا vsftpd از آن برای یوزرهای مجازی استفاده کند. این کار را میبایست با دستور db_load انجام دهید. db_load توسط libdb-utils ارائه می شود که باید روی سیستم شما از قبل نصب شده باشد، اما اگر اینطور نیست، میتوانید آن را به سادگی نصب کنید:
dnf install libdb-utils
با این دستور، دیتابیس را از فایل متنی ایجاد کنید:
db_load -T -t hash -f vusers.txt vsftpd-virtual-user.db
در این مرحله میبایست زمانی را برای چک کردن کارهایی که db_load انجام میدهد، اختصاص دهید:
سوئیچ -T اجازه میدهد تا یک فایل متنی را وارد دیتابیس کنید.
سوئیچ -t برای مشخص کردن اکسس متد است.
هش (hash) اکسس متدی است که شما آن را مشخص میکنید.
از سوئیچ -f برای خواندن یک فایل مشخص استفاده میشود.
فایل مشخص شده vusers.txt میباشد.
دیتابیسی که می سازید یا در حال تغییر روی آن هستید، vsftpd-virtual-user.db میباشد.
مجوزهای پیش فرض فایل دیتابیس را تغییر دهید:
chmod 600 vsftpd-virtual-user.db
فایل "vusers.txt" را حذف کنید:
rm vusers.txt
هنگام اضافه کردن یوزرها، از vi برای ایجاد یک فایل "vusers.txt" دیگر استفاده کنید و دستور db_load را مجدد اجرا کنید تا یوزرها را به دیتابیس اضافه نماید.
نحوه راه اندازی PAM
vsftpd یک فایل pam پیش فرض را هنگام نصب پکیج، نصب میکند. شما باید این فایل را با محتوای خود جایگزین کنید. توصیه میکنیم همیشه در قدم اول، یک نسخه بکاپ از فایل قدیمی خود تهیه نمایید.
یک دایرکتوری برای فایل پشتیبان خود در /root ایجاد کنید:
mkdir /root/backup_vsftpd_pam
فایل pam را در این دایرکتوری کپی کنید:
cp /etc/pam.d/vsftpd /root/backup_vsftpd_pam/
فایل اصلی را ویرایش کنید:
vi /etc/pam.d/vsftpd
همه چیز را در این فایل به جزء “#%PAM-1.0” حذف کنید و خطوط زیر را اضافه کنید:
auth required pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-user
account required pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-user
session required pam_loginuid.so
سپس تغییرات خود را ذخیره کنید و خارج شوید. (Shift + : + wq)
این کار ورود یوزرهای مجازی شما را که در vsftpd-virtual-user.db تعریف شدهاند فعال میکند و لاگینهای لوکال را غیرفعال میسازد.
تنظیمات کانفیگ یوزر مجازی
هر یوزر مجازی یک فایل کانفیگ دارد که دایرکتوری "local_root" خود را مشخص میکند. مالک این روت لوکال، کاربر "vsftpd" و گروه "nogroup" میباشد.
به بخش نحوه راه اندازی یوزرهای مجازی مراجعه کنید. برای تغییر مالکیت دایرکتوری، این دستور را در خط فرمان وارد کنید:
chown vsftpd.nogroup /var/www/sub-domains/whatever_the_domain_name_is/html
شما باید فایلی را ایجاد کنید که دارای کانفیگ یوزر مجازی باشد:
mkdir /etc/vsftpd/vsftpd_user_conf
vi /etc/vsftpd/vsftpd_user_conf/username
در این فایل، خطی وجود دارد که "local_root" کاربر مجازی را مشخص میکند:
local_root=/var/www/sub-domains/com.testdomain/html
مشخصات این مسیر در قسمت "Virtual User" فایل vsftpd.conf قرار دارد.
استارت سرویس vsftpd
سرویس vsftpd را راه اندازی کنید و یوزرها را تست کنید، با این فرض که سرویس به درستی شروع می شود:
systemctl restart vsftpd
شما میتوانید تنظیمات را با خط فرمان تست کنید و دسترسی به ماشین را با FTP تست نمایید. سادهترین راه برای این کار، تست با یک FTP کلاینت، مانند FileZilla میباشد.
اگر بخواهید پروسه تست سرور vsftpd را با استفاده از یوزر مجازی انجام دهید، یک پیغام حاوی گواهی SSL/TLS دریافت خواهید نمود. این پیغام به فرد میگوید که سرور از گواهی استفاده میکند و از او میخواهد تا قبل از ادامه پروسه، آن را تأیید نماید. هنگامی که به عنوان یک یوزر مجازی به سرویس متصل هستید، می توانید فایل ها را در "local_root" قرار دهید.
اگر نمیتوانید فایلی را آپلود کنید، ممکن است لازم باشد به عقب برگردید، تمامی موارد را بررسی کنید و هر یک از مراحل را مجدد انجام دهید. برای مثال، ممکن است مجوزهای مالکیت برای "local_root" روی کاربر "vsftpd" و گروه "nogroup" تنظیم نشده باشد که در این صورت میبایست با توجه مواردی که در این مقاله گفته شد، تغییرات را اعمال کنید.
سخن آخر
در حال حاضر، vsftpd سرور FTP محبوب و رایجی است که میتواند یک سرور مستقل یا بخشی از وب سرور آپاچی باشد چرا که به دلیل امکان ساختن یوزرهای مجازی و گواهی امنیتی، از بسیاری جهات امن است.
در این مقاله ما سعی کردیم تمامی مراحل راه اندازی vsftpd را به شما شرح دهیم. توصیه میکنیم زمان کافی برای کانفیگ صحیح آن صرف کنید تا از بابت ایمن بودن سرور اطمینان حاصل نمایید.