آموزش نصب vsftpd

Avatar
نویسنده: علیرضا برزودی
شنبه 11 شهریور 1391
مطالعه: ۱۰ دقیقه ۰ نظر ۵۶۱ بازدید

در این مقاله میخوانید

قبل از معرفی و آموزش نصب Vsftpd لازم است با کلمه FTP آشنا شوید.FTP مخفف File Transfer Protocol هست که قدیمی ترین و پر استفاده ترین پروتکل برای انتقال فایل بین سرور و کاربر است. بعد از این پروتکل روش های سریعتر و امن تری برای انتقال فایل جایگزین شده اند. برخی کاربران اینترنت می خواهند که به صورت مستقیم از سایت به صورت https دانلود کنند و کاربرانی که از به جای محیط گرافیکی از خط فرمان استفاده می کنند می خواهند که از پروتکل های امن مانند SCP یا SFTP استفاده کنند.

معرفی

برنامه های قدیمی و بسیاری از برنامه های جدید نیز هنوز از این پروتکل استفاده می کنند. اگر شما بخواهید انتخاب کنید که از چه پروتکلی استفاده کنید ، حتما پروتکل های جدیدتر با امکانات بیشتر و پیشرفته تر را نیز بررسی کنید. اگر به FTP نیاز داشته باشید ، انتخاب vsftpd یک انتخاب بسیار خوب است. امنیت بهینه شده، کارایی و پایداری vsftpd باعث شده تا امنیت بالایی را مقابل مشکلات امنیتی سرور های FTP دیگر ارائه کند و مهمتر اینکه به صورت پیش فرض در بیشتر سیستم عامل های لینوکس پشتیبانی می شود.

در این آموزش سرویس vsftpd را برای بارگذاری فایل های یک کاربر در مسیر دایرکتوری خانه کاربر با استفاده از FTP و احراز امنیت امن شده با SSL/TLS تنظیم و پیکربندی می کنیم.برای انجام مراحل این آموزش به یک سرور لینوکس   Ubuntu همراه با یک کاربر non-root با دسترسی sudo نیاز داریم.

نصب vsftpd

برای شروع لیست بسته ها را به روز رسانی می کنیم و سرویس vsftpd را نصب می کنیم :

$ sudo apt update
$ sudo apt install vsftpd

 

بعد از اتمام نصب فایل پیکربندی را کپی کنید و تنظیمات را با فایل پیکربندی جدید شروع کنید فایل اصلی را به صورت یک فایل بک آپ نگهدارید :

$ sudo cp /etc/vsftpd.conf /etc/vsftpd.vonf.orig

 

بعد از تهیه فایل بک آپ پیکربندی به سراغ تنظیم دیوار آتش Firewall می رویم.

 تنظیم فایروال

در ابتدا وضعیت دیوار آتش را بررسی می کنیم. باید مطمئن شویم که ترافیک FTP اجازه عبور در رول های دیواره آتش دارد :

$ sudo ufw status

 

در اینجا فقط ترافیک سرویس SSH اجازه عبور دارد :

در مقاله ssh چیست می توانید اطلاعات تکمیلی درباره این پروتکل بدست بیاورید.

Output

Status: active

 

 

To Action From

-- ------ ----

OpenSSH ALLOW Anywhere

OpenSSH (v6) ALLOW Anywhere (v6)

 

 

در سیستم شما ممکن است در اینجا رول ها دیگر یا هیچی رولی را نمایش ندهد. در اینجا فقط ترافیک SSH اجازه عبور دارد و باید یک رول به دیوار آتش برای عبور ترافیک FTP اضافه کنیم. پورت های 20 و 21 را برای FTP و پورت 990 را برای فعال کردن TLS و پورت های 4000 تا 5000 را برای پورت های فعال در نظر میگیریم که طبق طرح ما باید در فایل پیکربندی تنظیم شوند :

$ sudo ufw allow 20/tcp
$ sudo ufw allow 21/tcp
$ sudo ufw allow 990/tcp
$ sudo ufw allow 40000:50000/tcp
$ sudo ufw status

 

اکنون تنظیمات دیوار آتش باید به صورت زیر باشد :

Output

Status: active

 

To Action From

-- ------ ----

OpenSSH ALLOW Anywhere

990/tcp ALLOW Anywhere

21/tcp ALLOW Anywhere

20/tcp ALLOW Anywhere

40000:50000/tcp ALLOW Anywhere

20/tcp (v6) ALLOW Anywhere (v6)

OpenSSH (v6) ALLOW Anywhere (v6)

21/tcp (v6) ALLOW Anywhere (v6)

40000:50000/tcp (v6) ALLOW Anywhere (v6)

990/tcp (v6) ALLOW Anywhere (v6)

 

ایجاد دایرکتوری کاربر

در ادامه مقاله نصب Vsftpd،می خواهیم که FTP اختصاصی برای کاربر ایجاد کنیم، ولی ممکن است که کاربری از قبل بر روی سیستم موجود باشد که به دسترسی FTP نیاز داشته باشد. پیشنهاد می کنیم که برای تست نصب و تنظیمات یک کاربر جدید ایجاد کنید. دقت کنید که باید دسترسی های داده شده به کاربران موجود در سیستم را بررسی کنید، که این موضوع را در ادامه انجام می دهیم.
ابتدا یک کاربر تست ایجاد می کنیم :

$ sudo adduser sammy

 

سپس یک رمز به آن اختصاص دهید.
در حالت عمومی در FTP وقتی که یک کاربر به یک دایرکتوری محدود می شود ، بسیار امن می شود. vsftpd این کار را با chroot jail انجام می دهد. وقتی که chroot برای کاربران محلی فعال می شود، به صورت پیش فرض کاربران را به دایرکتوری خانه شان محدود می کند. اجرای این سیاست امنیتی توسط vsftpd برای امن کردن دایرکتوری ها ، باعث می شود که کاربر دسترسی نوشتن و تغییر در دایرکتوری را نداشته باشد.

این محدودیت برای کاربران جدید که از طریق FTP متصل می شوند و فقط نیاز به دسترسی خواندن دارند مناسب است ولی برای کاربران موجود در سیستم که نیاز به دسترسی نوشتن دارند مناسب نیست.
در این مثال به جای تغییر سطح دسترسی دایرکتوری خانه کاربر، یک دایرکتوری ftp برای سرویس دهی chroot و با قابلیت نوشتن files روی دایرکتوری ایجاد می کنیم.

ایجاد پوشه ftp :

$ sudo mkdir /home/sammy/ftp

 

سپس مالکیت آن را تغییر می دهیم :

$ sudo mkdir /home/sammy/ftp

 

حذف دسترسی نوشتن :

$ sudo chmod a-w /home/sammy/ftp

 

بررسی دسترسی تنظیم شده :

$ sudo ls -ls /home/sammy/ftp

Output
total 8
4 dr-xr-xr-x 2 nobody nogroup 4096 Aug 24 21:29 .
4 drwxr-xr-x 3 sammy sammy 4096 Aug 24 21:29 ..

 

در ادامه یک دایرکتوری برای آپلود فایل ها ایجاد می کنیم و مالکیت آن را به کاربر تغییر می دهیم :

$ sudo mkdir /home/sammy/ftp/files
$ sudo chown sammy:sammy /home/sammy/ftp/files

دستور زیر را برای چک کردن دسترسی دایرکتوری ftp وارد می کنیم و خروجی باید به این صورت باشد :

$ sudo ls -la /home/sammy/ftp

Output
total 12
dr-xr-xr-x 3 nobody nogroup 4096 Aug 26 14:01 .
drwxr-xr-x 3 sammy sammy 4096 Aug 26 13:59 ..
drwxr-xr-x 2 sammy sammy 4096 Aug 26 14:01 files

 

در انتها یک فایل تست با نام test.txt را اضافه می کنیم و آن را تست می کنیم :

$ echo vsftpd test file | sudo tee /home/sammy/ftp/test.txt

 

تا اینجا دایرکتوری ftp را امن کردیم و اجازه دسترسی به داکتوری files را به کاربر دادیم، و در ادامه تنظیمات پیکربندی را تغییر می دهیم.

مرحله چهارم – پیکربندی دسترسی FTP

کاری که می خواهیم انجام دهیم به این صورت است که فقط یک کاربر محلی از طریق shell به ftp دسترسی داشته باشد و برای این کار دو قسمت مهم باید در فایل تنظمایت vsftpd..conf تغییر کنند. این فایل را در حال ویرایش باز کنید و مطمئن شوید که دو قسمتی که در زیر آورده شده به همین صورت تنظیم شده باشند :

$ sudo nano /etc/vsftpd.conf

/etc/vsftpd.conf
. . .
# Allow anonymous FTP? (Disabled by default).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES

 

سپس با خارج کردن خط write_enable از حالت توضیحات، به کاربر اجازه دسترسی برای آپلود فایل را بدهید :

write_enable=YES

 

سپس خط chroot را از حالت توضیح خارج کنید تا از دسترسی کاربر متصل شده به FTP به مسیر های دیگر به غیر از خانه جلوگیری کند :

chroot_local_user=YES

 

سپس یک user_sub_token را با نام کاربر در میسر دایرکتوری مان local_root directory اضافه می کنیم. این پیکربندی انجام شده برای این کاربر و کاربرانی که در آینده اضافه می شوند، کار می کند. این تنظیمات را در هر قسمتی از فایل می توانید وارد کنید :

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

 

در ادامه محدوده پورت هایی که برای استفاده Passive FTP در نظر گرفته ایم را تعیین کنیم :

pasv_min_port=40000
pasv_max_port=50000

 

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

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

 

منطق کنترل دسترسی برنامه با userlist_deny کنترل می شود : اگر مقدار آن YES باشد به این معنی است که هیچکدام از کاربران معرفی شده در لیست به FTP دسترسی ندارند، و اگر مقدار آن NO باشد یعنی اینکه فقط کاربران معرفی شده در لیست به FTP دسترسی دارند.
بعد از انجام همه تغیرات فایل پیکربندی آن را ذخیره کرده و خارج شوید.

در انتها کاربر را به /etc/vsftpd.userlist اضافه می کنیم. این کار را با گزینه -a انجام دهید تا تغییرات به انتهای فایل اضافه شود :

echo sammy | sudo tee -a /etc/vsftpd.userlist

 

بررسی کنید که کاربر حتما به لیست اضافه شده باشد :

cat /etc/vsftpd.userlist
Output
sammy

 

سرویس vsftpd را مجددا راه اندازی می کنیم تا تغییرات انجام شد اعمال شوند :

sudo systemctl restart vsftpd

 

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

مرحله پنجم – بررسی دسترسی FTP

تا اینجا تنظمیات FTP را انجام دادیم که کاربر sammy بتواند به FTP دسترسی داشته باشد، الان می خواهیم صحت عملکرد این دسترسی را بررسی کنیم تا مشکلی نباشد.

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

ftp -p 203.0.113.0

Output
Connected to 203.0.113.0.
220 (vsFTPd 3.0.3)
Name (203.0.113.0:default): anonymous
530 Permission denied.
ftp: Login failed.
ftp>

 

اتصال را ببندید :

ftp> bye

 

اتصال هر کاربری به غیر از sammy نباید برقرار شود

در ادامه با کاربری که عضو sudo است متصل می شویم و طبق تنظیمات انجام شده هیچ کاربری به غیر از sammy نباید متصل شود وعملیات اتصال باید با خطا مواجه شود. نام کابری که سیستم درخواست می کند را نام کاربر عضو sudo وارد کرده و سپس رمز عبور را وارد کنید :

ftp -p 203.0.113.0

Output
Connected to 203.0.113.0.
220 (vsFTPd 3.0.3)
Name (203.0.113.0:default): sudo_user
530 Permission denied.
ftp: Login failed.
ftp>

 

اتصال را ببندید :

ftp> bye

 

کاربر sammy باید با موفقیت وارد شود و دسترسی خواندنو نوشتن داشته باشد

دسترسی کاربری را که ایجاد کردیم برای ورود تست می کنیم :

ftp -p 203.0.113.0

Output
Connected to 203.0.113.0.
220 (vsFTPd 3.0.3)
Name (203.0.113.0:default): sammy
331 Please specify the password.
Password: your_user's_password
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

 

سپس وارد دایرکتوری files شوید و با دستور get فایل تست ای را که قبلا ایجاد کردیم را منتقل کنید :

ftp> cd files
ftp> get test.txt

Output
227 Entering Passive Mode (203,0,113,0,169,12).
150 Opening BINARY mode data connection for test.txt (16 bytes).
226 Transfer complete.
16 bytes received in 0.0101 seconds (1588 bytes/s)
ftp>

 

سپس برای تست دسترسی آپلود فایل، یک فایل تست را آپلود می کنیم :

ftp> put test.txt upload.txt

Output
227 Entering Passive Mode (203,0,113,0,164,71)
150 Ok to send data.
226 Transfer complete.
16 bytes sent in 0.000894 seconds (17897 bytes/s)

 

اتصال را ببندید :

ftp> bye

 

جمع بندی

در این آموزش راه اندازی FTP برای کاربران با دسترسی محلی را مطرح کردیم. در انتها، شدیدا توصیه می کنیم که ارتباطات FTP را بوسیله SSL/TLS امن کنید و روال های امنیت بیشتری را برای FTP و دسترسی ها قرار دهید. برای انجام این کار این مطلب را که در ادامه راه اندازی همین سناریو گفته شده در این آموزش است را در صفحه راه اندازی SSL/TLS بر روی FTP مطالعه کنید.
همچنین اگر می خواهید که برای احراز هویت کاربران تنظیمات پیشرفته ای داشته باشید و کاربران از طریق یک سرور دیگر مانند LDAP یا Kerberos انجام شود، باید پشتیبانی vsftpd از کاربران مجازی را مطالعه کنید.

با خدمات ابری پارس پک آشنا شوید

اولین ارائه‌دهنده خدمات رایانش ابری در ایران هستیم