در این مقاله نحوه نصب و پیکربندی یک سرور 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
0 دیدگاه
نوشتن دیدگاه