پروتکل FTP (یا File Transfer Protocol)، یک پروتکل شبکه استاندارد است که به منظور انتقال فایل ها در یک شبکه ریموت استفاده میشود. سرورهای FTP اپن سورس مختلفی برای لینوکس موجود است که مشهورترین و پرکاربردترین آنها PureFTPd ،ProFTPD و vsftpd است. در اینجا سرور vsftpd (یا Very Secure Ftp Daemon) را که یک سرور FTP پایدار، ایمن و سریع است، نصب خواهیم کرد. علاوه بر این، نحوه کانفیگ سرور را به منظور محدود کردن کاربران در دسترسی به دایرکتوری اصلی خود و رمزگذاری فایلهای منتقل شده با SSL / TLS نشان خواهیم داد. اگرچه FTP یک پروتکل بسیار محبوب است؛ اما به منظور انتقال امن تر و سریع تر داده ها، باید از SCP یا SFTP استفاده کنید. در این مقاله با ما همراه باشید تا شما عزیزان را با نحوه نصب سرور FTP با VSFTPD در اوبونتو ۲۰٫۰۴ به منظور استفاده در به اشتراک گذاشتن فایل ها بین چندین دستگاه آشنا کنیم.
بسته vsftpd در مخازن اوبونتو موجود است. برای نصب آن، دستورات زیر را اجرا کنید:
sudo apt update
sudo apt install vsftpd
پس از اتمام مراحل نصب، سرویس ftp به طور خودکار راه اندازی می شود. برای تأیید آن، دستور زیر را اجرا کنید:
sudo systemctl status vsftpd
خروجی باید نشان دهد که سرویس vsftpd فعال و در حال اجرا است:
vsftpd.service - vsftpd FTP server Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2021-03-02 15:17:22 UTC; 3s ago
بیشتر تنظیمات سرور vsftpd در فایل /etc/vsftpd.conf ذخیره شده است. در بخش های بعدی، برخی از تنظیمات مهم مورد نیاز به منظور کانفیگ ایمنی vsftpd آورده شده است. در ابتدا فایل کانفیگ vsftpd را با دستور زیر باز نمایید:
sudo nano /etc/vsftpd.conf
ما فقط به کاربران local اجازه دسترسی به سرور FTP را خواهیم داد. بدین منظور باید، دستورالعمل های anonymous_enable و local_enable را جستجو کرده و کانفیگ مورد نیاز خود را در آن خطوط، به صورت زیر وارد کنید:
anonymous_enable=NO local_enable=YES
دستورالعمل write_enable را پیدا کرده و آن را از حالت کامنت خارج کنید تا تغییرات سیستم فایل مانند آپلود و حذف فایل ها امکان پذیر شود:
write_enable=YES
به منظور جلوگیری از دسترسی کاربران local FTP به فایلهای خارج از دایرکتوریهای اصلی خود، خط مربوط به chroot_local_user را از حالت کامنت خارج کنید:
chroot_local_user=YES
به طور پیش فرض، به دلایل امنیتی، هنگامیکه chroot فعال است، vsftpd از آپلود شدن فایل توسط کابران غیر مجاز جلوگیری مینماید. به منظور اجازه آپلود هنگام فعال کردن chroot، از یکی از راه حلهای زیر استفاده کنید:
روش اول – گزینه توصیه شده، فعال نگه داشتن ویژگی chroot و کانفیگ دایرکتوریهای FTP است. در این مثال، یک دایرکتوری ftp در دایرکتوری اصلی کاربر ایجاد خواهیم کرد که به عنوان chroot و یک دایرکتوری قابل نوشتن برای آپلود فایل ها عمل میکند:
user_sub_token=$USER local_root=/home/$USER/ftp
روش دوم _ گزینه دیگر، فعال کردن دستورالعمل allow_writeable_chroot است:
allow_writeable_chroot=YES
از این گزینه فقط درصورتی استفاده کنید که میخواهید دسترسی نوشتن در دایرکتوری اصلی را به کاربر خود اعطا کنید.
به طور پیش فرض، vsftpd از حالت فعال (active) استفاده میکند. برای استفاده از حالت غیرفعال (passive)، حداقل و حداکثر محدوده پورتها را تنظیم کنید:
pasv_min_port=30000 pasv_max_port=31000
می توانید از هر پورت برای اتصال passive FTP استفاده کنید. وقتی حالت passive فعال است، کلاینت FTP در محدوده انتخابی شما، برروی یک پورت تصادفی، یک اتصال به سرور باز میکند.
می توانید vsftpd را طوری کانفیگ کنید که فقط برخی از کاربران بتوانند وارد سیستم شوند. برای انجام این کار، دستورات زیر را در انتهای فایل اضافه کنید:
userlist_enable=YES userlist_file=/etc/vsftpd.user_list userlist_deny=NO
هنگامی که این گزینه فعال است، باید صریحاً مشخص کنید که چه کاربرانی می توانند با افزودن نام کاربری به فایل /etc/vsftpd.user_list (یک کاربر در هر خط) وارد سیستم شوند.
برای رمزگذاری انتقالهای FTP با SSL / TLS، شما باید گواهی SSL داشته باشید و سرور FTP را برای استفاده از آن کانفیگ کنید. شما میتوانید از یک گواهینامه SSL موجود که توسط یک سازمان صدور گواهینامه معتبر (trusted Certificate Authority) امضا شده است، استفاده کنید یا یک گواهینامه خود-امضا (self-signed) ایجاد کنید. اگر دامنه یا زیر دامنهای دارید که به آدرس IP سرور FTP اشاره دارد، شما میتوانید به سرعت یک گواهینامه Let’s Encrypt SSL رایگان ایجاد کنید. در اینجا، یک کلید خصوصی ۲۰۴۸ بیتی و گواهی SSL خود-امضا (self-signed) ایجاد خواهیم کرد که به مدت ده سال معتبر خواهد بود:
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
هر دو مورد کلید خصوصی و گواهی در یک فایل ذخیره میشوند. پس از ایجاد گواهی SSL، فایل کانفیگ vsftpd را باز کنید:
sudo nano /etc/vsftpd.conf
دستورالعمل های rsa_cert_file و rsa_private_key_file را پیدا کنید، مقادیر آنها را به مسیر فایل pam تغییر دهید و دستور ssl_enable را روی YES تنظیم کنید:
rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem ssl_enable=YES
در غیر اینصورت، سرور FTP فقط از TLS برای برقراری ارتباطات ایمن استفاده خواهد کرد.
پس از اتمام ویرایش، فایل کانفیگ vsftpd (به استثنای کامنتها) باید چیزی شبیه به دستور زیر باشد:
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES write_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem ssl_enable=YES user_sub_token=$USER local_root=/home/$USER/ftp pasv_min_port=30000 pasv_max_port=31000 userlist_enable=YES userlist_file=/etc/vsftpd.user_list userlist_deny=NO
فایل را ذخیره کرده و سرویس vsftpd را مجدداً راه اندازی کنید تا تغییرات اعمال شوند:
sudo systemctl restart vsftpd
اگر از فایروال UFW استفاده می کنید، باید ترافیک FTP را مجاز کنید. به منظور باز کردن پورت ۲۱ (پورت دستور FTP)، پورت ۲۰ (پورت داده FTP) و پورتهای ۳۰۰۰۰-۳۱۰۰۰ (محدوده پورتهای passive)، دستورات زیر را اجرا کنید:
sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp
برای جلوگیری از قفل شدن، از باز بودن پورت ۲۲ اطمینان حاصل نمایید:
sudo ufw allow OpenSSH
با غیرفعال کردن و فعال کردن مجدد UFW، قوانین UFW را دانلود کنید:
sudo ufw disable
sudo ufw enable
برای تأیید تغییرات، دستورات زیر را اجرا کنید:
sudo ufw status
Status: active To Action From -- ------ ---- ۲۰:۲۱/tcp ALLOW Anywhere ۳۰۰۰۰:۳۱۰۰۰/tcp ALLOW Anywhere OpenSSH ALLOW Anywhere ۲۰:۲۱/tcp (v6) ALLOW Anywhere (v6) ۳۰۰۰۰:۳۱۰۰۰/tcp (v6) ALLOW Anywhere (v6) OpenSSH (v6) ALLOW Anywhere (v6)
به منظور تست سرور FTP باید کاربر جدیدی ایجاد کنید.
مرحله اول : یک کاربر جدید با نام newftpuser ایجاد کنید:
sudo adduser newftpuser
مرحله دوم : کاربر را به لیست مجاز کاربران FTP اضافه کنید:
echo "newftpuser" | sudo tee -a /etc/vsftpd.user_list
مرحله سوم : دایرکتوری FTP tree را ایجاد کرده و مجوزهای صحیح را تنظیم کنید:
sudo mkdir -p /home/newftpuser/ftp/upload
sudo chmod 550 /home/newftpuser/ftp
sudo chmod 750 /home/newftpuser/ftp/upload
sudo chown -R newftpuser: /home/newftpuser/ftp
همانطور که در قسمت قبل مورد بحث قرار گرفت، کاربر قادر خواهد بود فایل های خود را در دایرکتوری ftp/upload آپلود کند. در این مرحله، سرور FTP شما کاملاً قابل استفاده است. اکنون شما باید بتوانید با استفاده از هر کلاینت FTP که میتواند در جهت استفاده از رمزگذاری TLS کانفیگ شود (مانند FileZilla) به سرور متصل شوید.
به طور پیش فرض، هنگام ایجاد کاربر (اگر صریحاً مشخص نشده باشد)، آن کاربر به سرور دسترسی SSH خواهد داشت. برای غیرفعال کردن دسترسی shell ،shell جدیدی را ایجاد کنید که با یک پیام به کاربر بگویید، حساب وی تنها به دسترسی FTP محدود شده است. بدین منظور با استفاده از دستور زیر، فایل /bin/ftponly را ایجاد کرده و آن را اجرا کنید:
echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly
sudo chmod a+x /bin/ftponly
shell جدید را به لیست shell های معتبر در فایل /etc /shells اضافه کنید:
echo "/bin/ftponly" | sudo tee -a /etc/shells
shell کاربر را به /bin /ftponly تغییر دهید:
sudo usermod newftpuser -s /bin/ftponly
از همین دستور میتوانید به منظور تغییر shell همه کاربران مورد نظر برای دسترسی به FTP استفاده کنید.
ما به شما نحوه نصب و کانفیگ سرور FTP امن و سریع را در سیستم اوبونتو ۲۰٫۰۴ خود نشان دادیم.
امیدواریم مطالب مورد پسند بوده و از آن بهره لازم را برده باشید. خوشحال میشویم نظرات و سوالات خود را در قسمت دیدگاه به اشتراک بگذارید و ما را در شتابان هاست همراهی کنید.😊