طریقه نصب و پیکربندی و امنیت سرور FTPدر CentOS 7 – ( راهنمای جامع)

۱۳ آذر ۱۳۹۹ مطالعه ۵ دقیقه

FTP (پروتکل انتقال فایل) یک ابزار استاندارد قدیمی و جامعی است که برای انتقال فایل ها بین سرور و مشتری در شبکه مورد استفاده قرار می گیرد، خصوصا زمانی که هیچ تاییدیه یا مجوزی برای کاربران ناشناس برای وصل شدن به سرور اجباری نباشد. باید بدانیم که FTP به طورپیش فرض امن نیست چرا که مدارک کاربر و اطلاعات را بدون کدگذاری انتقال می دهد.

در این راهنما مراحل نصب، پیکربندی و امنیت یک سرور FTP را در CentOS/RHEL 7 و Fedora توضیح می دهیم. ( VSFTPD مخفف دیمن FTP بسیار ایمن می باشد.)

به یاد داشته باشید که تمام مطالب این راهنما با روت قابل اجرا خواهد بود، اگر با سروری کار می کنید که حساب کاربری آن روت نشده از دستور sudo برای دستیابی به روت استفاده کنید.

مرحله 1: نصب سرور FTP

1. نصب vsftpd بسیار ساده است، فقط کافی است دستور زیر را اجرا کنید.


# yum install vsftpd


2. پس از تکمیل نصب در ابتدا سرویس اجرا نخواهد شد، بنابراین باید آن را موقتا به صورت دستی انجام دهیم تا هر وقت سیستم بوت شد بتواند به طور اتوماتیک آن را اجرا کند.


# systemctl start vsftpd
# systemctl enable vsftpd


3. سپس تا اینکه سرویس های FTP اجازه دسترسی را از سرویس های خارجی دریافت کنند می بایست پورت 21 را باز کنیم که لیست دیمن های FTP آن به شرح زیر است:


# firewall-cmd –zone=public –permanent –add-port=21/tcp

# firewall-cmd –zone=public –permanent –add-service= ftp

# firewall-cmd –reload


مرحله 2: پیکربندی سرور FTP

4. حالا به سراغ چندین پیکربندی برای setup و امنیت سرور FTP می رویم. اجازه دهید که با گرفتن یک backup از فایل اصلی /etc/vsftpd/vsftpd.conf شروع کنیم :


# cp /etc/vsftpd/vsftpd.conf /etc/vsftp.conf.orig


سپس فایل بالا را باز کرده و گزینه های زیر را با مقادیر مربوط به خود وارد نمایید:

anonymous_enable=NO #disable anonymous login


local_enable=YES #permit local logins
write _enable=YES #enable FTP commands which change the filesystem
local_umask=022 #value of umask for file creation for local users
dirmessage_enable=YES #enable showing of messages when users first enter a new directory
xferlog-enable=YES #a log file will be maintained detailing uploads and downloads
connect_from_port_20=YES #use port 20 (ftp-data) on the server machine for PORT style conections
xferlog_std_format=YES #keep standard log file format
listen=NO #prevent vsftpd from running in standablle mode
listen_ipv6=YES #vsftpd will listen on an IPv6 socket instead of an IPv4 one
pam_service_name=vsftpd #name of the PAM service vsftpd will use
userlist_enable=YES #enable vsftpd to load a list of usernames
tcp_wrappers=YES #turn on tcp wrappers


5. حالا FTP را برای مجوز دسترسی دادن/ندادن به کاربران به این صورت /etc/vsftpd.userlist پیکربندی کنید.

به طور پیش فرض به کاربرانی که در لیست userlist_file=/etc/vsftpd.userlist قرار گرفته اند، اگر گزینه userlist_deny به صورت YES باشد اجازه ورود داده نمی شود مگر اینکه userlist_enable=YES باشد.

اگرچه userlist_deny=NO تنظیمات را عوض می کند ولی این به آن معناست که تنها کاربرانی که به طور واضح در لیست userlist_file=/etc/vsftpd.userlist قرار دارند اجازه ورود خواهند داشت.


Userlist_enable=YES #vsftpd will load a list of usernames, from the filename given by userlist_file
Userlist_file=/etc/vsftpd.userlist #stores usernames.
Userlist_deny=NO


تنها این نیست، زمانی که کاربران وارد سرور FTP می شوند در یک چروت جیل جا می گیرند که یک root directory است که در FTP تنها به عنوان home directory عمل خواهد کرد.

سپس نگاهی می اندازیم به دو سناریوی ممکن که چگونه کاربران FTP chroot را به کاربران Home (روت محلی) تغییر دهیم که آن را به صورت زیر توضیح داده ایم:

6. حالا این دو گزینه زیر را اضافه می کنیم تا کاربران FTP به Home directory محدود شوند.


chroot_local_user=YES
allow_writeable-chroot=YES


Chroot_local_user=YES یعنی کاربران پس از ورود با تنظیمات پیش فرض وارد یک چروت جیل خواهند شد.

و همچنین به عنوان پیش فرض، vsftpd به دلایل امنیتی اجازه نمی دهد که چروت جیل قابل نوشتن شود. اگرچه با استفاده از گزینه allow_writeable_chroot=YES می توانیم این تنظیم را باطل کنیم.

فایل ها را save کرده و آن را ببندید.

مرحله 3:ایمن کردن سرور FTP به وسیله SELinux

7. اکنون بولی SELinux زیر را انجام می دهیم تا به FTP اجازه خواندن فایل ها را در یک home directory کاربر بدهد. توجه داشته باشید که این در ابتدا با دستور زیر انجام شده بود:


# setsebool –p ftp_home_dir on


با این وجود، همانطور که گزارش زیر به آن پرداخته، دستور ftp_home_dir به طور پیش فرض غیر قابل اجراست.

https://bugzilla.redhat.com/show_bug.cgi?id=1097775

حالا از دستور semanage برای اجرای فرمان SELinux استفاده می کنیم تا به FTP اجازه خواندن/نوشتنhome directory کاربر را بدهد.


# semanage Boolean –m ftpd_full_access –on


در اینجا باید vsftpd را restart کنیم تا تمام تغییراتی را تا به حال انجام دادیم اعمال شود:


# systemctl restart vsftpd


مرحله 4: تست کردن سرور FTP

8. حالا سرور FTP را با ساختن

یک کاربر FTP با دستورuseradd command آزمایش خواهیم کرد.


#useradd –m –c “Ravi Savie, CEO” -s /bin/bash ravi
#passwd ravi


پس از آن باید کاربر ravi را با دستور echo command به فایل /etc/vsftpd.userlist اضافه کنیم:


# echo “ravi” l tee -a /etc/vsftpd.userlist
# cat /etc/vsftpd.userlist


9. حالا وقت آن است که تست کنیم تا بفهمیم تنظیماتی که اعمال کردیم به درستی کار می کند. بگذارید با تست افراد ناشناس شروع کنیم. با نگاه کردن به اسکرین شات پایین می فهمیم که افراد ناشناس اجازه ورود ندارند:


# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10)
220 welcome to TecMint.com FTP service.
Name (192.168.56.10) : anonymous
530 permission denied.
Login failed.
ftp>


10. همچنین بگذارید تست کنیم اگر یک کاربر در لیست فایل /etc/vsftpd. Userlist نباشد اجازه ورود خواهد داشت؟ همانطور که در اسکرین شات زیر مشخص است جواب منفی است:


#ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 welcome to TecMint.com FTP service.
Name (192.168.56.10 : root) : aaronkilik
530 permission denied.
Login failed.
ftp>


11. حالا آخرین تست را انجام می دهیم،‌ اگر یک کاربر در لیست فایل /etc/vsftpd.userlist قرار داشته باشد، قطعا پس از وارد شدن در home directory خودش قرار می گیرد:


# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 welcome to TecMint.com FTP service.
Name (192.168.56.10: root) : ravi
331 please specify the password.
Password:
230 login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 1s


توجه: استفاده از allow_writale_chroot=YES پیامدهای امنیتی مطمئنی دارد، خصوصا اگر کاربران اجازه آپلود و یا shell access داشته باشند.
تنها زمانی این گزینه رو فعال کنید که دقیقا بدانید می خواهید چه کاری انجام دهید. این خیلی مهم است که توجه داشته باشید این پیامدهای امنیتی صرفا برای vsftpd نیست بلکه برای تمام دیمن های FTP قابل اجراست و باعث می شود کاربران محلی به چروت جیل بروند.

بنابراین در قسمت بعد به یک روش ایمن تری برای تنظیم root directory محلی غیر قابل نوشتن خواهیم پرداخت.

مرحله 5: پیکربندی شکل های مختلف FTP برای home directiory

12. فایل پیکربندی vsftpd را دوباره باز کرده و گزینه زیر را بنویسید:


#allow_writeable_chroot=YES


سپس برای کاربر (ravi، احتمالا نام کاربر شما متفاوت است) یک root directory محلی دیگر بسازید و مجوزهای نوشتن را برای تمام کاربران آن پاک کنید:


# mkdir /home/ravi/ftp

# chown nobody:nobody /home/ravi/ftp

#chmod a-w /home/ravi/ftp


13. سپس یک directory در زیر root محلی، جایی که کاربر فایل هایش را ذخیره خواهد کرد بسازید:


# mkdir /home/ravi/ftp/files
# chown ravi:ravi /home/ ravi/ftp/files
# chmod 0700 /home/ravi/ftp/files


سپس گزینه های زیر را در فایل پیکربندی vsftpd با مقادیر مشخص شده اضافه یا تغییر دهید:


User_sub_token=$user #inserts the username in the local root directory
Local_root=/home/$user/ftp #defines any users local root directory


فایل را save کرده و ببندید. یکبار دیگر با این تنظیمات جدید، سرویس را restart می کنیم:


# systemctl restart vsftpd


14. حالا دوباره تست می کنیم تا ببینیم کاربران محلی root directory در FTP که در home directory ساختیم وجود دارند.


# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 welcome to TecMint.com FTP service.
Name (192.168.56.10 : root) : ravi
331 please specify the password.
Password: 230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 1s


تمام شد! در این مقاله طریقه نصب و پیکربندی یک سرورFTP درCentOS 7 را توضیح دادیم، با استفاده از بخش نظراتی که در قسمت پایین قرار دارد برای ما بنویسید که این راهنما توانسته اطلاعات مفیدی در رابطه با این موضوع مورد توجه شما قرار بدهد یا خیر.


داغ‌ترین مطالب روز

بهترین DNS برای گیم

بهترین DNS برای گیم

DNS یکی از مهم ترین مواردی است که سبب می شود تا تجربه شما از بازی کردن بهبود یافته و اتصال شما به سرورها پایداری و ثبات پیدا کند. اما پیدا کردن دی ان اس خوب برای بازی ها آنلاین به خصوص بازی هایی نظیر Valorant، Call of Duty و … همواره چالش محسوب شده […]

۱۶ خرداد ۱۴۰۱ ۷

سرور ابری

سرور ابری

سرور ابری و یا سرویس ابری از اصطلاحاتی هستند که امروزه به آن زیاد بر می خوریم. اما شاید تا کنون درک درستی در خصوص خدمات مبتنی بر ابر و سرور ابری (سرور رایانش ابری) نداشته باشیم. انتخاب خدمات مرکز داده مناسب ، می تواند تاثیر به سزایی در هزینه های یک کسب و کار […]

۲ تیر ۱۳۹۹ ۵

آموزش دانلود از اینترنت

آموزش دانلود از اینترنت

دانلود کردن بخش جدایی ناپذیر این روزهای زندگی شده است. هر روز حجم عظیمی از اطلاعات دانلود و آپلود شده و به زندگی مجازی جان می بخشد. اما نحوه دانلود اصولی و حرفه ای از اینترنت به چه صورت است؟ چطور دانلود کنیم که از سالم بودن فایل اطمینان بالایی داشته باشیم؟ در این مقاله […]

۱۱ بهمن ۱۴۰۰ ۳

آموزش رفع مشکل وصل نشدن اینترنت در ویندوز 7

آموزش رفع مشکل وصل نشدن اینترنت در ویندوز 7

اینترنت یکی از مهم ترین عناصر زندگی در عصر امروز است. اما اگر نتوانیم با ویندوز به اینترنت وصل شویم چه؟ مشکل وصل نشدن اینترنت در ویندوز 7 چیست؟ در این مقاله به آموزش رفع مشکل وصل نشدن اینترنت در ویندوز 7 می پردازیم تا با بررسی راه حل های آن بتوانید به صورت اصولی […]

۲۸ اردیبهشت ۱۴۰۱ ۳

سرور مجازی مناسب کسب‌وکار کوچک

سرور مجازی مناسب کسب‌وکار کوچک

امروزه در دنیای مدرن و پیشرفته‌ای زندگی می‌کنیم که پتانسیل‌های کسب‌وکارها بدون معرفی در فضای مجازی، دست‌نخورده و اتلاف شده باقی می‌مانند و امکان شکست آن‌ها افزایش می‌یابد. بنابراین، طراحی و استفاده از یک وب سایت می‌تواند به گسترش این کسب‌وکارهای کوچک کمک کند و آن را به سرعت توسعه دهد. این وب سایت به […]

۳۰ شهریور ۱۴۰۰ ۲

دیدگاه‌ها

comment symbol

برای این مقاله ۰ دیدگاه نوشته شده است. دیدگاه شما چیست؟

شما نیز، دیدگاه خود را از طریق دکمه زیر به اشتراک بگذارید.

نوشتن دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *