How to FTPS – FTP server with SSL on Centos 5.4

#~  مقدمة

عندما نتكلم عن خدمة رفع الملفات إلى الخوادم ,, فإن أول ما يخطر ببالنا هو واحد من أخدم بروتوكولات نقل الملفات في تاريخ الشبكات الـ FTP protocol  و أكثر قد جرب أن يقوم بتنزيل أو رفع ملف من خلاله و هو موجود بشكل أساسي في أجميع سيرفرات الاستضافة لسهولة إعداده و التعامل معه, لكن ثمة أشياء تسهلنا بها كمدراء أنظمة ألا و هي حماية المستخدم و التي تصب مباشرة في حماية خوادمنا فتركنا الاتصال بخوادمنا بشكل غير آمن إما أننا نسمح بالمستخدم anonymous و رفع الملفات أو بترك كلمات المرور غير مشفرة غير آمنة أو بترك المجال للمستخدمين بالتجول في الخادم دون عمل أي مقيدات عليه.  بالدخول

في موضوعنا اليوم سنتطرق إلى عدة نقاط لا أريد تحديدها لأني نويت إن شاء الله أن أجدد هذا الموضوع و أجعله مرجعا لكل ما يخص هذا البروتوكول.

لنبدأ,,,



#~  التثبيت

في موضوعي الأن لن أقوم بتثبيت الـ FTP server  فقط بل سأثبت معه الـ OpenSSL  حيث نريكم الفرق عند استخدامه مع بروتوكولنا الـ FTP

yum -y install vsftpd openssl

#~ الإعدادات

ملف إعدادات الـ FTP  توجد في “/etc/vsftpd”

ويتكون المجلد من الشكل التالي

/etc/vsftpd/
|– ftpusers
|– user_list
|– vsftpd.conf
`– vsftpd_conf_migrate.sh

حيث أن ..

  • ftpusers: ملف نضع فيها أسماء المستخدمين الغير مسموح لهم بالدخلول عبر هذا البروتوكول,, بالطبع تستطيع أن تضيف إليه من تشاء من مستخدمين النظام
  • user_list: هذا الملف في حالته الافتراضيع يعمل نفس عمل الملف السابق, أما إن أضفت إلى ملف إعدادات الـ FTP  هذا السطر”userlist_deny=NO” فسيقوم بالسماح فقط للمستخدمين الموجودين فيه بالدخول. نستخدمه إذا كان عدد المستخدمين المحظورين كبير و المسموح لهم أقل
  • vsftpd_confg_migrate.sh: هو سكريبت يقوم بأخذ نسخة احتياطية من ملف إعدادات الـ FTP
  • vsftpd.conf: هو ملف إعدادات الـ FTP  و هو الذي يحتوي على كل ما نحتاجة لتشغيل الخدمة و كيفية تعاملها مع المستخدمين و مجلداتهم و تصاريحهم.

لندخل ملف الإعدادات الأن ,,,

vim /etc/vsftpd/vsftpd.conf

نمنع المستخدم anonymous حيث أنه موجود بشكل افتراضي

ابحث عن

anonymous_enable=YES

و اجعلها

anonymous_enable=No

إن أردت أن تسمح برفع المفات للـ anonymous user  (يجب ألا تقوم بالخطوة السابقة)

افتراضيا فإن هذه المستخدم تحديدا مقيد في المجلد /var/pub

ابحث عن

#anon_upload_enable=yes

واجعلها

anon_upload_enable=no

إن أردت منع رفع الملفات لكافة المستخدمين(لا يخص الـ anonymous)

ابحث عن

write_enable=yes

واجعلها

write_enable=no

هناك الكثير من الإعدادات الأخرى سأضيفها حين توفر الوقت إن شاء الله

الأن احفظ التغيرات و أعد تشغيل الخدمة

#~  إعادة تشغيل الخدمة

service vsftpd restart

#~ إعداد الـ SELinux

setsebool ftp_home_dir  on

#~إضافة مستخدم جديد للنظام

بشكل افتراضي, كل مستخدم على النظام له حساب على FTP server  و بالطبع هذا أمر خطر و يهدد حماية خادمك

يكون مجلد المستخدم  “/home/userName”هو المجلد الإفتراضي له ما لم تقم بتغيّره

useradd nosec

تستطيع أن تمنع هذا المستخدم من الدخول على النظام عن طريق الـ SSH  وتسمح فقط بالـ FTP

chsh -s /sbin/nologin nosec

الأن سنقوم بتسجيل الدخول بحساب FTP للمستخدم “nosec”  و قبلها سنشغل برنامج الـ Wireshark لنرى ماذا سيحدث!!

أرئيت؟!! اسم المستخدم و كلمة المرور تم التقاطهما بشكل سهل جدا فلو كنت في شبكتك و عملت عملية Sniffing بسيطة جدا على جهازك لعرفت حسابك و كلمة مرورك لأن الملفات تذهب بدون أي تشفير. إذن ما الحل؟

الحل هو أن نعمل شهادات لتشفير الاتصال بين الخادم و العميل و نجبر جميع المستخدمين أن يستخدموا طريقة الاتصال الأمن في برامجهم

#~ إعداد الـ SSL

إنشاء شهادة للـ FTP  بنوع تشفير قوي و مفتاح طويل

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem

في الأمر السابق أنشأنا مفتاح مدته 365 يوم و نوع تشفير RSA  و طول المفتاح 1024-bit و خزناه في نفس مجلد إعدادات الـ FTP server.

طبعا عند إنشاء شهادة يجب أن تعطي بعض المعلومات ليتم كتابتها في هذه الشهادة  فعند تنفيذ الأمر سيبدأ التالي و هو عبارة عن أسئلة خفيفة يتم الإجابة عليها ولن أقوم بشرحها لأنها واضحة جدا

Generating a 1024 bit RSA private key
………….++++++
…………………………..++++++
writing new private key to ‘/etc/vsftpd/vsftpd.pem’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [GB]:KS
State or Province Name (full name) [Berkshire]:Kingdom
Locality Name (eg, city) [Newbury]:Riyadh
Organization Name (eg, company) [My Company Ltd]:Forbidden Zone
Organizational Unit Name (eg, section) []:Control Room
Common Name (eg, your name or your server’s hostname) []:forbidden-zone
Email Address []:king-sabrii@hotmail.com

الأن نفتح ملف إعدادات الـ  FTP  من جديد

vim /etc/vsftpd/vsftpd.conf

ونضع في آخره ما يلي

#–> Allow SSL FTP
ssl_enable=YES
allow_anon_ssl=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/vsftpd.pem

#–> END

ملاحظة: لقد أجبرت المستخدم على استخدام الطريقة الأمنه و إن كنت تريد الأمر اختياريا للمستخدم فغير قيمة السطر  force_local_logins_ssl=YES إلى NO

الأن أعد تشغيل خدمة الـ FTP  و إن أحببت اجعله يعمل عند بدئ التشغيل

service vsftpd restart

chkconfig vsftpd on

وعندما تدخل ببرنامج العميل سيكون الاختيار كالتالي

رائع!! قبل تسجيل الدخول بشكل آمن نشغل برنامج الـ Wireshark  ثم نراقب المخرجات بعد تجيل الدخول,, و ستكون النتيجة كالتالي..

أعتقد الفرق واضح!!

#~ تحديد مساحة محددة للمستخدم

من الخطأ أن تسمح للمستخدمين برفع ملفاتهم دون تحجيم المساحة المسموح بها لكل مستخدم بناء على ما يلزمه بشكل حقيقي فقد يتسبب هذا بامتلاء المساحة التخزينية دون فائدة

نضيف اختيار للبارتيشن بأن يسمح بتحديد المساحات (لن تقوم بعمل هذه الخطوة إلا أول مرة فقط)

سأفترض هنا أنك جعلت كل المستخدمين يرفعون ملفاتهم في مجلدهم الرئيسي و ليس على قرص خارجي أو على خادم أخر

نفتح الملف “/etc/fstab”

vim /etc/fstab

فسنجده بشكله الافتراضي هكذا

LABEL=/                 /                       ext3    defaults        1 1
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
LABEL=SWAP-hda2         swap                    swap    defaults        0 0

و نصيف إلى المجلد الجذر بعض الخيارات ليصبح شكل الملف كالتالي(انتبه للون الأحمر)

LABEL=/                 /                       ext3    defaults,usrquota 1 1
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
LABEL=SWAP-hda2         swap                    swap    defaults        0 0

نعيد تطبيق ما حدث من سطر الأوامر لكي لا نضطر لإعادة التشغيل حاليا (لن تقوم بعمل هذه الخطوة إلا أول مرة فقط)

mount -o remount,usrquota  /home

إنشاء قاعدة البيانات و التي سيتم تخزين بيانات المستخدمين فيها لاحقا و اسم الملف “quota.user” (لن تقوم بعمل هذه الخطوة إلا أول مرة فقط)

quotacheck -cvu   /home

تحديد مساحة للمستخدم

يجب أن نشير أن هناك ثلاثة قيم يجب إعطاءها: 1- أقل مساحة. 2- أقصى مساحة. 3- رقم الـ inode. ولن أتعمق في كلها بل يكفي أن تعرف أقصى مساحة تريد أن تسمح بها للمستخدم لكن بالكيلوبايت

setquota -u nosec  0  512000  0  0  /home

كما جعلنا أقصى مساحة يستخدمها المستخدم nosec للمجلد /home هي 500 ميجابايت.

نشغل خاصية تحديد المساحات

quotaon -a

لعرض جميع المستخدمين مع المساحات المحددة لهم على مجلد معين وهنا هو المجلد الرئيسي لهم

repquota -v  /home

حتى هنا أكون أنهيت بعض ما أريد أن أضعه في الـ FTP server  وللحديث بقية إن شاء الله و أي تحديث سيكون في نفس الموضوع


تحياتي و احترامي

6 آراء على “How to FTPS – FTP server with SSL on Centos 5.4

  1. تدوية جد جميله يا رائع
    شكرا ليك يا ورد وتمت الاضافة بالمفضله

  2. مرحبا بك يا بطل و إن شاء الله يفيدك الموضوع

    شاكر لك كلامك الجميل

    تحياتي و احترامي

  3. اليوم رجعت للموضوع وطبقته على جهازي المنزلي وكان الشرح تمام التمام 100% يا ورد
    لكن حاولت ان اطبق الااومر وابحث قليللا لتطبيقها على سيرفر يحتوي سيبنل
    و pure-ftp
    يبدوا ان هناك اختلاف قليلا في بعض المتغيرات والاوامر رح احاول اجد حل بأذن لله
    تسلم يا غالي

  4. مرحبا ,,,

    الحمدلله إنه ظبط معاك ,,
    بالنسبه للسي بانيل ,, بصراحة بعد تجربة سيئة مع عالم الهوستينج ,, لكنها تمشي النظام على مزاجها و أنا أكره هذا ,,
    مع الوقت تصبح CPanel Administrator و ليس Linux Admin و الدليل هناك كثير خبرتهم واسعة في الاستضافة و لكن في اللينوكس كنظام على قدمهم جدا

    الفروقات في ملفات الإعدادات بسيطة و لن تخرج عن معرفتك ,, إنت قدها و قدود

  5. شرح جميل ومبسط..
     
    سَلمت يداك.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *