سرویس FTP در لینوکس

سرویس 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 &quotarvanftp&quot | 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