در این مقاله نحوه نصب و پیکربندی یک سرور FTP در Ubuntu 20.04 به منظور استفاده در به اشتراک گذاشتن فایل‌ها بین چندین دستگاه توضیح داده شده است.

 

پروتکلFTP (یا File Transfer Protocol)، یک پروتکل شبکه استاندارد است که به منظور انتقال فایل‌ها در یک شبکه ریموت استفاده می‌شود. سرورهای FTP منبع باز مختلفی برای لینوکس موجود است که مشهورترین و پرکاربردترین آن‌ها PureFTPd ،ProFTPD و vsftpd است. در اینجا سرور vsftpd (یا Very Secure Ftp Daemon) را که یک سرور FTP پایدار، ایمن و سریع است، نصب خواهیم کرد. علاوه بر این، نحوه پیکربندی سرور را به منظور محدود کردن کاربران در دسترسی به دایرکتوری اصلی خود و رمزگذاری فایل‌های منتقل شده با SSL / TLS نشان خواهیم داد.

اگرچه FTP یک پروتکل بسیار محبوب است؛ اما به منظور انتقال امن‌تر و سریع‌تر داده‌ها، باید از SCP یا SFTP استفاده کنید.

 

نصب vsftpd در اوبونتو 20.04

بسته vsftpd در مخازن اوبونتو موجود است؛ بنابراین به منظور نصب آن کافیست دستورات زیر را اجرا نمایید:

sudo apt update
sudo apt install vsftpd

با اتمام مراحل نصب، سرویس ftp به طور خودکار راه اندازی می‌شود. برای تأیید آن، وضعیت سرویس را چاپ کنید:

sudo systemctl status vsftpd

خروجی دستور باید نشان دهد که سرویس vsftpd فعال و در حال اجرا است:

output:
● 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
...

 

این مطلب نیز ممکن است برای شما مفید باشد: ایجاد کاربر SFTP بدون دسترسی Shell در CentOS / RHEL 8

 

پیکربندی vsftpd

بیشتر تنظیمات سرور vsftpd در فایل /etc/vsftpd.conf ذخیره شده است.

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

در ابتدا فایل پیکربندی vsftpd را با دستور زیر باز نمایید:

sudo nano /etc/vsftpd.conf

 

1. دسترسی FTP

در اینجا، تنها به کاربران محلی اجازه دسترسی به سرور FTP را خواهیم داد. بدین منظور باید، دستورات anonymous_enable و local_enable را جستجو کرده و پیکربندی مورد نیاز خود را در آن خطوط، به صورت زیر وارد کنید:

                   /etc/vsftpd.conf

anonymous_enable=NO
local_enable=YES

 

2. امکان بارگذاری

سپس دستور write_enable را پیدا کرده و آن را از حالت کامنت بردارید تا تغییرات سیستم فایل مانند بارگذاری و حذف فایل‌ها امکان پذیر شود:

                  /etc/vsftpd.conf

write_enable=YES

 

3. محدود سازی دسترسی (Chroot jail)

به منظور جلوگیری از دسترسی کاربران محلی FTP به فایل‌های خارج از دایرکتوری‌های اصلی خود، خط مربوط به chroot_local_user را از حالت کامنت بردارید:

                 /etc/vsftpd.conf

chroot_local_user=YES

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

به منظور اجازه بارگذاری هنگام فعال کردن chroot، از یکی از راه حل‌های زیر استفاده کنید:

روش 1. گزینه توصیه شده، فعال نگه داشتن ویژگی chroot و پیکربندی دایرکتوری‌های FTP است. در این مثال، یک دایرکتوری ftp در دایرکتوری اصلی کاربر ایجاد خواهیم کرد که به عنوان chroot و یک دایرکتوری uploads قابل نوشتن برای بارگذاری فایل‌ها عمل می‌کند:

                /etc/vsftpd.conf

user_sub_token=$USER
local_root=/home/$USER/ftp

روش 2. گزینه دیگر، فعال کردن دستورالعمل allow_writeable_chroot است:

                   /etc/vsftpd.conf

allow_writeable_chroot=YES

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

 

4. اتصالات Passive FTP

به طور پیش فرض، vsftpd از حالت فعال (active) استفاده می‌کند. برای استفاده از حالت غیرفعال (passive)، حداقل و حداکثر محدوده پورت‌ها را تنظیم نمایید:

              /etc/vsftpd.conf

pasv_min_port=30000
pasv_max_port=31000

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

 

5. محدود سازی ورود کاربر

شما می‌توانید vsftpd را به گونه‌ای پیکربندی کنید که تنها به کاربران خاصی اجازه ورود بدهد. برای انجام این کار کافیست خطوط زیر را در انتهای فایل اضافه نمایید:

               /etc/vsftpd.conf

userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO

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

 

6. ایمن سازی انتقال‌ها با SSL / TLS

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

شما می‌توانید از یک گواهینامه SSL موجود که توسط یک سازمان صدور گواهینامه معتبر (trusted Certificate Authority) امضا شده است، استفاده کنید یا یک گواهینامه خود-امضا (self-signed) ایجاد نمایید.

اگر دامنه یا زیر دامنه‌ای دارید که به آدرس IP سرور FTP اشاره دارد، شما می‌توانید به سرعت یک گواهینامه Let’s Encrypt SSL رایگان تولید کنید.

در اینجا، یک کلید خصوصی 2048 بیتی و گواهی SSL خود-امضا تولید خواهیم کرد که به مدت ده سال معتبر خواهد بود:

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 تنظیم نمایید:

                /etc/vsftpd.conf

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES

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

 

راه اندازی مجدد سرویس vsftpd

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

                   /etc/vsftpd.conf

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

 

این مطلب نیز ممکن است برای شما مفید باشد: نحوه استفاده از دستور SFTP لینوکس برای انتقال فایل ها

 

باز کردن فایروال

اگر از فایروال UFW استفاده می‌کنید، باید ترافیک FTP را مجاز نمایید.

به منظور باز کردن پورت 21 (پورت دستور FTP)، پورت 20 (پورت داده FTP) و پورت‌های 30000-31000 (محدوده پورت‌های passive)، دستورات زیر را اجرا کنید:

sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp

به منظور جلوگیری از قفل شدن، از باز بودن پورت 22 اطمینان حاصل نمایید:

sudo ufw allow OpenSSH

با غیرفعال کردن و فعال کردن مجدد UFW، قوانین UFW را بارگیری کنید:

sudo ufw disable
sudo ufw enable

در آخر به منظور تأیید اجرای تغییرات، دستور زیر را وارد نمایید:

sudo ufw status
output:
Status: active

To                         Action      From
--                         ------      ----
20:21/tcp                  ALLOW       Anywhere
30000:31000/tcp            ALLOW       Anywhere
OpenSSH                    ALLOW       Anywhere
20:21/tcp (v6)             ALLOW       Anywhere (v6)
30000:31000/tcp (v6)       ALLOW       Anywhere (v6)
OpenSSH (v6)               ALLOW       Anywhere (v6)

 

ایجاد کاربر FTP

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

اگر کاربری که می‌خواهید به او دسترسی FTP بدهید قبلاً وجود دارد، مرحله 1 را نادیده بگیرید.

اگر در فایل پیکربندی خود، گزینه allow_writeable_chroot = YES را تنظیم کرده اید، مرحله 3 را نادیده بگیرید.

دستور زیر، کاربر جدیدی به نام newftpuser ایجاد می‌نماید:

sudo adduser newftpuser

با دستور زیر، آن کاربر را می‌توان به لیست کاربران FTP مجاز اضافه کرد:

echo "newftpuser" | sudo tee -a /etc/vsftpd.user_list

پس از آن با دستور زیر می‌توان درخت پوشه FTP را ایجاد کرده و مجوزهای صحیح را تنظیم نمود:

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) به سرور متصل شوید.

 

این مطلب نیز ممکن است برای شما مفید باشد: آموزش انتقال فایل از طریق FTP

 

غیرفعال کردن Shell Access

به طور پیش فرض، هنگام ایجاد کاربر (اگر صریحاً مشخص نشده باشد)، آن کاربر به سرور دسترسی SSH خواهد داشت. برای غیرفعال کردن دسترسی پوسته (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

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

echo "/bin/ftponly" | sudo tee -a /etc/shells

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

sudo usermod newftpuser -s /bin/ftponly

از همین دستور می‌توان به منظور تغییر پوسته همه کاربران مورد نظر برای دسترسی به FTP استفاده کرد.

 

 

 

منبع:

linuxize