العربية

حماية مجلد بكلمة مرور عبر htpasswd على VPS

2 min
استضافة VPS/VDS

المصادقة الأساسية هي أسرع طريقة لإخفاء موقع تجريبي أو مجلد إدارة أو أداة خاصة خلف نافذة تسجيل دخول. يغطي هذا الدليل Apache وNginx على VPS Linux Infrawire الخاص بك، باستخدام ملف كلمات مرور ينشئه الأمر htpasswd.

📋 المتطلبات

  • خادم Linux VPS (Ubuntu 24.04 / Debian 12 أو AlmaLinux 9 / Rocky 9) مع وصول SSH بصلاحية root. عنوان IP وكلمة مرور root في منطقة العميل.
  • Apache أو Nginx يخدم موقعًا بالفعل.
  • شهادة HTTPS صالحة للنطاق example.com. ترسل المصادقة الأساسية كلمة المرور مرمّزة بـ Base64 وهذا ليس تشفيرًا: لا تستخدمها أبدًا عبر HTTP العادي.

📦 تثبيت أداة htpasswd

يأتي الأمر htpasswd من حزمة صغيرة حتى لو كنت تستخدم Nginx:

Bash
# Debian / Ubuntu sudo apt install -y apache2-utils # AlmaLinux / Rocky sudo dnf install -y httpd-tools

🔐 إنشاء ملف كلمات المرور

احفظ الملف خارج أي جذر ويب كي لا يتمكن أحد من تنزيله:

Bash
sudo mkdir -p /etc/htpasswd sudo htpasswd -c -B /etc/htpasswd/example.com USER

يستخدم -B خوارزمية bcrypt. ينشئ -c الملف: استعمله للمستخدم الأول فقط، لأنه يكتب فوق ملف موجود ويمحو كل شيء (عملية مدمّرة). أضف المستخدمين الآخرين دون -c:

Bash
sudo htpasswd -B /etc/htpasswd/example.com USER2

يجب أن يستطيع خادم الويب قراءة الملف:

Bash
# Debian / Ubuntu (يعمل Apache وNginx بالمستخدم www-data) sudo chown root:www-data /etc/htpasswd/example.com # AlmaLinux / Rocky: المجموعة apache (Apache) أو nginx (Nginx) sudo chmod 640 /etc/htpasswd/example.com

لحذف مستخدم: sudo htpasswd -D /etc/htpasswd/example.com USER2.

🪶 الخيار أ: Apache مع .htaccess

ضع ملف .htaccess في المجلد المراد حمايته، مثل /var/www/example.com/private/.htaccess:

Apache
AuthType Basic AuthName "منطقة مقيّدة" AuthUserFile /etc/htpasswd/example.com Require valid-user

تُتجاهل ملفات .htaccess ما لم يسمح بها المضيف الافتراضي. في كتلة <Directory> (ملف في /etc/apache2/sites-available/ على Debian/Ubuntu، و/etc/httpd/conf.d/ على AlmaLinux/Rocky):

Apache
<Directory /var/www/example.com> AllowOverride AuthConfig </Directory>

ثم اختبر وأعد التحميل:

Bash
sudo apachectl configtest sudo systemctl reload apache2 # Debian / Ubuntu sudo systemctl reload httpd # AlmaLinux / Rocky

إن فضّلت عدم استخدام .htaccess فضع أسطر المصادقة الأربعة مباشرة داخل كتلة <Directory> أو <Location>: فهذا أسرع وأكثر أمانًا.

🚀 الخيار ب: Nginx مع auth_basic

لا يقرأ Nginx ملفات .htaccess. أضف التوجيهات إلى كتلة server:

Nginx
1server { 2 listen 443 ssl; 3 server_name example.com; 4 # أسطر ssl_certificate هنا 5 6 location /private/ { 7 auth_basic "منطقة مقيّدة"; 8 auth_basic_user_file /etc/htpasswd/example.com; 9 } 10}

لحماية الموقع كله ضع هذين السطرين في كتلة server. ولإبقاء مسار عام داخل موقع محمي (مثل webhook) أضف auth_basic off; في location الخاص به. ثم:

Bash
sudo nginx -t && sudo systemctl reload nginx

✅ الاختبار

بدون بيانات اعتماد يجب أن تحصل على 401، ومعها على 200:

Bash
curl -I https://example.com/private/ curl -I -u USER https://example.com/private/

الاستجابة الأولى المتوقعة:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="منطقة مقيّدة"

يطلب curl كلمة المرور عندما تكتب -u USER وحده، فلا تبقى في سجل الصدفة.

🛠️ استكشاف الأخطاء

لا تظهر نافذة الدخول في Apache. ما زال AllowOverride على None أو أن .htaccess في المجلد الخطأ. أعد فحص كتلة <Directory> ثم أعد التحميل.

401 دائمًا رغم صحة كلمة المرور. لا يستطيع خادم الويب قراءة الملف (افحص chown وchmod)، أو أن المسار في AuthUserFile أو auth_basic_user_file خاطئ. يوضح سجل الأخطاء ذلك: /var/log/apache2/error.log أو /var/log/httpd/error_log أو /var/log/nginx/error.log.

خطأ 500 بعد إضافة .htaccess. توجيه غير صالح أو وحدة ناقصة. شغّل sudo apachectl configtest واقرأ الرسالة.

طلب كلمة المرور عبر HTTP. أعد توجيه HTTP إلى HTTPS أولًا حتى لا تمر بيانات الاعتماد بنص واضح أبدًا.


🎉 يطلب مجلدك الخاص الآن تسجيل دخول، مع كلمات مرور مجزّأة محفوظة بعيدًا عن المتناول ومقدَّمة عبر HTTPS فقط.

ابقَ على اطلاع بأحدث العروض والخصومات والعروض الترويجية الخاصة.

عرض العروض الترويجية

نستخدم ملفات تعريف الارتباط

نستخدم كوكيز تحليلية لتحسين تجربتك. لا نبيع البيانات لأطراف ثالثة. المزيد في سياسة الخصوصية.