سرویس FTP چیه ؟
راه های زیادی برای جابجایی فایل بین سرور ها. استفاده از پروتوکل FTP یکی از راه های بهینه برای انجام این کار هستش. این نکته رو در نظر داشته باشید که از اونجایی که FTP یه پروتوکل استاندارد هستش، هیچ وابستگی به سیستم عامل خاصی ندارد. سادگی و سرعت بالایی که این پروتکل داره، باعث شده کاربرای خیلی زیادی رو به خودش جذب کنه. در نتیجه همه این حرف ها، به عنوان یه ادمین لینوکس شما باید بتونید یک سرور FTP رو بالا بیارید و باهاش فایل جابجا کنید.
کار با FTP در سیستم عای لینوکسی:
زمانی که کاربر به سرور FTP متصل میشه دو کار کلی میتونه انجام بده، یکی از اونها اجرای تعدادی دستور هستش و کار دیگه جابجایی اطلاعاته. به طور پیش فرض FTP از پورت ۲۱ برای اتصال برای اجرای دستورات و پورت ۲۰ برای جابجایی اطالاعات استفاده می کنه.
برای شروع کار با این سرویس ما می تونیم از ابزار های زیادی استفاده کنیم اما ابزار زیر از نظر عملکردی بسیار خوب هستش و یکی از پر مصرف ترین ها هستش. به شکل زیر میتونید این بسته رو روی سیستم نصب کنید.
# apt install vsftpd
در ابتدا باید سرویس رو فعال کنیم.
#systemctl enable vsftpd
همچنین سرویس به شکل زیر باید استارت بشه.
# systemctl start vsftpd
در نهایت می تونید وضعیت سرویس FTP رو بررسی کنید که باید به شکل زیر باشه.
# systemctl status vsftpd
از مسیر زیر وارد فایل تنظیمات FTP بشید.
# vi /etc/vsftpd.conf
تنظیماتی که از اینجا به بعد گفته می شن رو در صورت نیاز می تونید روی سرورتون اعمال کنید.
در صورت فعال کردن این گزینه، به کاربر ها اجازه نوشتن روی سیستم رو میدین (در واقع می تونن فایل ایجاد کنن).
write_enable=YES
با فعال کردن مورد اول، هر کاربری فقط می تونه با نام کاربر مشخص خودش وارد سرور بشه و نام کاربری anonymous غیر فعال میشه. در صورت فعال کردن گزینه دوم، کاربر هایی که روی سرور تعریف شدن هم می تونن به این سرویس دسترسی داشته باشن.
anonymous_enable=NO local_enable=YES
می تویند به هیچ کاربری اجازه دسترسی به فایل های خارج از خونه خودش (home) رو ندید. برای این کار باید گزینه زیر رو فعال کنید.
chroot_local_user=YES
بعد از فعال کردن گزینه بالا باید یک دایرکتوری برای کاربر ایجاد کنید که به عنوان خونش (home) عمل می کنه.
user_sub_token=$USER local_root=/home/$USER/ftp
در نظر داشته باشید که می تونید فقط به یه سری کاربر خاص اجازه دسترسی به سرور رو بدین. برای این کار باید گزینه زیر رو فعال کنید. به این شکل یه لیست از کاربرایی که مجاز به استفاده از این سرویس هستن رو مشخص می کنید (فقط جای لیست رو اینجا مشخص می کنید).
نکته: از این قابلیت می تونید برای گرفتن دسترسی تعدادی از کاربر های عم استفاده کنید. به شکلی که دسترسی برای همه باز باشه و فقط برای تعداد مشخصی بسته بشه.
userlist_enable=YSE userlist_file=/etc/vsftpd.user_list #userlist_deny=NO
به شکل زیر می تونید رنج (range) پورت های قابل استفاده در حالت Passive رو مشخص کنید. به طور کلی FTP در حالت Active کار می کنه که کاربر به پورت ۲۱ متصل می شه و سرور از طریق پورت ۲۰ به کاربر متصل می شه و انتقال اطالاعات انجام میشه. اما در حالت Passive کاربر به پورت ۲۱ متصل میشه و بعد از پاسخ سرور، به یه پورت نامشخص دیگه برای انتقال اطلاعات متصل میشه که این زیر می تونید رنج (range) اون پورت های نامشخص رو مشخص کنید.
pasv_min_port=30000 pasv_max_port=31000
در آخر، فایل تنظیمات شما باید به شکل زیر باشه (بدون در نظر گرفتن مواردی که comment شدن).
# 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 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 secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO
بعد از وارد کردن تغییرات روی تنظیمات FTP، باید به شکل زیر سرویسش رو ریست (reset) کنید.
# systemctl restart vsftpd
بعد از ریست (reset) هم می تونید به شکل زیر وضعیت سرویس رو بررسی کنید.
# systemctl status vsftpd
تو این مرحله باید پورت های لازم رو روی فایروال سیستم باز کنید. در اینجا ما از ufw به عنوان فایروال استفاده می کنیم و به شکل زیر پورت ۲۱ رو روی سیستم باز می کنیم.
# ufw allow 21/tcp
همونطور که می دونید ما به پورت ۲۰ هم نیاز داریم که به شکل زیر باید بازش کنیم.
# ufw allow 20/tcp
همچنین باید پورت های مشخص شده برای حالت passive رو هم روی فایروال باز کنید.
# ufw allow 3000:31000/tcp
نکته: قبل از روشن کردن فایروال پورت ۲۲ رو باز کنید که دسترسی ssh رو داشته باشید.
# ufw allow OpenSSH
حالا می تونید فایروال سیستم رو روشن کنید که قوانین روی سیستم اعمال بشن.
# ufw enable
به شکل زیر میم تویند وضعیت فایروال سیستم رو ببینید.
# ufw status
در این مرحله باید کاربر های سرویس رو ایجاد کنید. یه رمز عبور خوب براش مشخص کنید و اگه دوست دارید اطلاعات دیگه کاربر رو هم می تویند تعریف کنید.
# adduser arvanftp
به شکل زیر دایرکتوری خونه (home) کاربر رو بسازید.
# mkdir -p /home/arvanftp/ftp
به شکل زیر به کاربر اجازه خوندن و اجرا کردن دستور در دایرکتوری خونش (home) رو بدین.
#chmod 550 /home/arvanftp/ftp
همچنین باید به شکل زیر دسترسی نوشتن رو روی یه فایل به کاربر بدین که بتونه فایل آپلود کنه.
# chmod 750 /home/arvanftp/ftp/upload
مالکیت این دایرکتوری رو به خود کاربر بدین.
# chown -R arvanftp: /home/arvanftp/ftp
به شکل زیر می تونید یه shell کاربر رو محدود کنید به طوری که دسترسی بجز استفاده از سرویس ftp رو نده. برای مثال کاربر اجازه ssh زدن به سیستم رو نخواهد داشت.
#echo -e ‘#!/bin/sh\necho “This account is limited to FTP access only.”’ | sudo tee -a /bin/ftponly
به استفاده از دستور زیر اجازه اجرا شدن رو به فایل زیر بدین.
# chmod a+x /bin/ftponly
حالا باید فایلی که ایجاد کردید رو به عنوان shell های مجاز سیستم تعریف کنید.
# echo “/bin/ftponly” | sudo tee -a /etc/shells
در آخر باید shell کاربر رو تغییر بدین که رو حالت پیش فرض نباشه.
#usermod arvanftp -s /bin/ftponly
حالا باید کاربری رو که ایجاد کردین رو به لیست کاربرای مجاز اضافه کنید.
# echo "arvanftp" | tee -a /etc/vsftpd.user_list
برای امتحان کردن سرویس، فایل زیر رو روی سرور ایجاد کنید.
# vi /home/arvanftp/ftp/upload/ItWorks.txt
از روی یک سیستم دیگه به شکل زیر به سرور ftp متصل بشید. در اینجا باید نام کاربری و رمز عبور رو وارد کنید (آیپی که در تصویر اومده برای سرور تستی بوده و بعد از نوشتن این داکیومنت سرور حذف شده. شما باید آیپی خودتونو بزنید).
ftp <Ip Address>
به شکل زیر می تونید لیست دستورات مجاز رو ببینید.
ftp> help
برای مثال به شکل زیر می تونید ببینید که در چه مسیری هستید.
ftp> pwd
همچنین می تونید فایل های موجود در مسیر فعلیتون رو مشاهده کنید.
ftp> ls
به شکل زیر می تونید تو سرور جابجا بشید.
ftp> cd upload
در آخر برای تست سرور می تونید فایل رو به شکل زیر دانلود کنید.
ftp> get <File name>
به شکل زیر می تونید از سرور ftp خارج بشید.
ftp> exit
همونطور که میبینید فایل دانلود شده و می توینم ازش نهایت استفاده رو بکنیم :).
# cat ItWorks.txt