عندما تُنشئ خادم أوبونتو 18.04 لأول مرة، فهناك بعض خطوات الإعداد التي ينبغي عليك اتخاذها مبكّرًا كجزء من الإعداد الأساسي. سيزيد ذلك من أمان الخادم وسهولة استخدامه وسيمنحك أساسًا قويًا لاتخاذ إجراءات لاحقة.
رغم أنه يمكنك إكمال هذه الخطوات يدويًا، إلا أنه في بعض الأحيان يكون من الأسهل برمجة العمليات عبر سكربت لتوفير الوقت وتفادي الأخطاء البشرية. يشرح هذا الدليل كيفية أتمتة الخطوات الموجودة في دليل إعداد الخادم الأولي في سكربت.
ماذا يفعل السكربت؟
يعدّ هذا السكربت بديلًا للتشغيل اليدوي من خلال الطريقة الموضحة في دليل إعداد خادم أوبونتو 18.04 الأولي ودليل إعداد مفاتيح SSH على أوبونتو 18.04.
تؤثر المتغيرات التالية على كيفية عمل السكربت:
-
USERNAME
: اسم حساب المستخدم العادي الذي ستُنشأ وتمنح له صلاحياتsudo
. -
COPY_AUTHORIZED_KEYS_FROM_ROOT
: تحدّد ما إذا كنت تريد نسخ أصول مفتاح SSH من الحساب الجذريroot
إلى حسابsudo
الجديد. -
OTHER_PUBLIC_KEYS_TO_ADD
: مجموعة من السلاسل النصية التي تمثل مفاتيح عامة أخرى تُضاف إلى الحسابsudo
. يمكن استخدام هذه بالاختيار بين إضافتها أو جعلها بديلًا لنسخ المفاتيح من الحساب الجذري root.
يجب عليك تحديث هذه المتغيرات حسب الحاجة قبل تشغيل السكربت. عند تنفيذ السكربت، تُنفّذ الإجراءات التالية:
-
إنشاء حساب مستخدم عادي مع امتيازات
sudo
باستخدام الاسم الذي يحدده المتغيرUSERNAME
. -
إعداد إطار لكلمة المرور الأولية للحساب الجديد:
-
إذا كان الخادم معدًّا لمصادقة الهوية بكلمة المرور، فستُنقل كلمة المرور الإدارية الأصلية التي وُلِّدت لحساب root إلى حساب
sudo
الجديد. حينها تكون كلمة المرور للحساب الجذري مقفلة. -
إذا كان الخادم معدًّا لمصادقة الهوية بمفتاح SSH، فستُعيّن كلمة مرور فارغة لحساب
sudo
.
-
إذا كان الخادم معدًّا لمصادقة الهوية بكلمة المرور، فستُنقل كلمة المرور الإدارية الأصلية التي وُلِّدت لحساب root إلى حساب
-
تُعلّم كلمة مرور المستخدم
sudo
بعلامة "منتهي الصلاحية" مما يوجب تغييرها عند أول تسجيل للدخول. -
يُنسخ ملف
Authorized_keys
من الحساب الجذري إلى مستخدمsudo
إذا عُيِّن المتغيرCOPY_AUTHORIZED_KEYS_FROM_ROOT
على "صحيح". -
تُضاف أي مفاتيح معرّفة في
OTHER_PUBLIC_KEYS_TO_ADD
إلى ملفAuthorized_keys
للمستخدمsudo
. - يُعطّل التصديق SSH المستند إلى كلمة المرور في الحساب الجذري root.
- يُفعّل جدار الحماية UFW مع السماح باتصالات SSH.
كيف يُستخدَم السكربت؟
يمكن تنفيذ السكربت بطريقتين: عن طريق إضافته إلى حقل بيانات مستخدم الخادم أثناء الإنشاء أو عن طريق تسجيل الدخول بحساب root وتنفيذه بعد التشغيل.
عبر بيانات المستخدم
عند إنشاء Droplet على DigitalOcean، يمكنك تحديد بيانات المستخدم، وهو سكربت يُنفّذ أثناء تشغيل الخادم الأولي من أجل إجراء إعدادٍ إضافي.
إذا كنت تُنشئ Droplet من لوحة التحكم، فيمكنك تحديد خانة الاختيار "بيانات المستخدم" في قسم تحديد خيارات إضافية. سيظهر لك مربع نصي حيث يمكنك لصق السكربت:
إذا كنت تُنشئ Droplet باستخدام واجهة برمجة تطبيقات DigitalOcean، فيمكنك تمرير السكربت باستخدام سمة user_data
بدلاً من ذلك.
إذا كنت تُنشئ Droplet باستخدام أداة سطر الأوامر doctl
، فيمكنك تمرير السكربت باستخدام خيار --user-data-file
:
$ doctl compute droplet create ... --user-data-file /path/to/script
بغض النظر عن الطريقة التي تستخدمها لإضافة بيانات المستخدم، سيُنفّذ السكربت في أول مرة يُشغّل فيها الخادم الجديد. قد تضطر إلى الانتظار لبضع دقائق حتى تكتمل العملية، ولكن بعد ذلك، يمكنك تسجيل الدخول إلى الخادم الخاص بك عبر حساب المستخدم sudo
للحصول على أي إعداد إضافي.
عند تسجيل الدخول لأول مرة، سيُطلب منك تغيير كلمة المرور الخاصة بك. سينهي الخادم جلسة SSH الحالية بمجرد تقديم بيانات الاعتماد الجديدة الخاصة بك وتأكيدها. بعد ذلك، يمكنك إعادة SSH مرة أخرى مثل العادة.
تنفيذ السكربت بعد التشغيل
إذا كنت لا ترغب في استخدام بيانات المستخدم، يمكنك أيضًا تشغيل السكربت يدويًا عبر SSH بمجرد تشغيل الخادم.
إذا نزّلت السكربت على جهاز الكمبيوتر المحلي الخاص بك، يمكنك تمرير السكربت مباشرةً إلى SSH بكتابة ما يلي:
$ ssh root@servers_public_IP "bash -s" -- < /path/to/script/file
ينبغي أن تكون الآن قادرًا على تسجيل الدخول باستخدام حساب sudo
الخاص بك من أجل أي إعداد إضافي.
إذا لم تُنزّل السكربت على جهاز الحاسوب المحلي، فابدأ بتسجيل الدخول إلى الحساب root على الخادم الخاص بك:
$ ssh root@servers_public_IP
بعد ذلك، نزِّل السكربت الأولي على الخادم:
$ curl -L https://raw.githubusercontent.com/do-community/automated-setups/master/Ubuntu-18.04/initial_server_setup.sh -o /tmp/initial_setup.sh
افحص السكربت للتأكد من تنزيله بشكل صحيح و حدِّث أي متغيرات ترغب في تغييرها:
$ nano /tmp/initial_setup.sh
عندما تكون راضيًا عن المعطيات، شغّل السكربت يدويًا باستخدام bash
:
$ bash /tmp/initial_setup.sh
ينبغي أن تكون الآن قادرًا على تسجيل الدخول باستخدام الحساب ذي الصلاحيات sudo
لإتمام أي إعدادٍ إضافي.
محتويات السكربت
يمكنك العثور على السكربت لإعداد الخادم الأولي في مخزن الإعداد التلقائي لمؤسسة DigitalOcean Community GitHub. لنسخ محتويات السكربت أو تنزيلها مباشرةً، انقر فوق الزر (Raw) أعلى النص، أو انقر هنا لعرض المحتويات الأولية مباشرة.
لقد أدرجت المحتويات كاملة أيضًا هنا لتسهيل العملية:
#!/bin/bash
set -euo pipefail
########################
### SCRIPT VARIABLES ###
########################
# اسم حساب المستخدم العادي الذي ستُنشأ وتمنح له صلاحيات
# Name of the user to create and grant sudo privileges
USERNAME=sammy
# الجديد sudo إلى حساب root من الحساب الجذري SSH تحدّد ما إذا كنت تريد نسخ أصول مفتاح
# Whether to copy over the root user's `authorized_keys` file to the new sudo
# user.
COPY_AUTHORIZED_KEYS_FROM_ROOT=true
# sudo مجموعة من السلاسل النصية التي تمثل مفاتيح عامة أخرى تُضاف إلى الحساب
# Additional public keys to add to the new sudo user
# OTHER_PUBLIC_KEYS_TO_ADD=(
# "ssh-rsa AAAAB..."
# "ssh-rsa AAAAB..."
# )
OTHER_PUBLIC_KEYS_TO_ADD=(
)
####################
### SCRIPT LOGIC ###
####################
# ومنحه الصلاحيات sudo إنشاء حساب المستخدم
# Add sudo user and grant privileges
useradd --create-home --shell "/bin/bash" --groups sudo "${USERNAME}"
# تحقق من توفّر الحساب الجذري على كلمة مرور
# Check whether the root account has a real password set
encrypted_root_pw="$(grep root /etc/shadow | cut --delimiter=: --fields=2)"
if [ "${encrypted_root_pw}" != "*" ]; then
# تُنقل كلمة المرور الإدارية الأصلية التي وُلِّدت لحساب الجذري إلى الحساب الجديد. حينها تُقفل كلمة المرور للحساب الجذري
# Transfer auto-generated root password to user if present
# and lock the root account to password-based access
echo "${USERNAME}:${encrypted_root_pw}" | chpasswd --encrypted
passwd --lock root
else
# حذف كلمة مرور غير صالحة للمستخدم في حالة استخدام المفاتيح بحيث يمكن تعيين كلمة مرور جديدة دون تقديم قيمة سابقة
# Delete invalid password for user if using keys so that a new password
# can be set without providing a previous value
passwd --delete "${USERNAME}"
fi
# إنهاء صلاحيات المستخدم العادي لإجباره على تغييرها
# Expire the sudo user's password immediately to force a change
change --lastday 0 "${USERNAME}"
# sudo للمستخدم SSH إنشاء مجلد
# Create SSH directory for sudo user
home_directory="$(eval echo ~${USERNAME})"
mkdir --parents "${home_directory}/.ssh"
# نسخ ملف المفاتيح من الحساب الجذري إذا كان ضروريًا
# Copy `authorized_keys` file from root if requested
if [ "${COPY_AUTHORIZED_KEYS_FROM_ROOT}" = true ]; then
cp /root/.ssh/authorized_keys "${home_directory}/.ssh"
fi
# إضافة المفاتيح الإضافية المتوفرة
# Add additional provided public keys
for pub_key in "${OTHER_PUBLIC_KEYS_TO_ADD[@]}"; do
echo "${pub_key}" >> "${home_directory}/.ssh/authorized_keys"
done
# SSH ضبط تكوينات ملكية وصلاحيات
# Adjust SSH configuration ownership and permissions
chmod 0700 "${home_directory}/.ssh"
chmod 0600 "${home_directory}/.ssh/authorized_keys"
chown --recursive "${USERNAME}":"${USERNAME}" "${home_directory}/.ssh"
# إيقاف تسجيل الدخول للحساب الجذري باستعمال كلمة المرور
# Disable root SSH login with password
sed --in-place 's/^PermitRootLogin.*/PermitRootLogin prohibit-password/g' /etc/ssh/sshd_config
if sshd -t -q; then
systemctl restart sshd
fi
# SSH بعد إضافة استثناءات UFW تفعيل جدار الحماية
# Add exception for SSH and then enable UFW firewall
ufw allow OpenSSH
ufw --force enable
خاتمة
يمكن أن يوفر لك إعداد الخادم الأولي تلقائيًا بعض الوقت ويمنحك أساسًا جيدًا لمزيد من الإعداد. إذا كانت هناك خطوات إضافية ترغب في اتخاذها، فيمكنك إما تسجيل الدخول بعد تشغيل السكربت للمتابعة يدويًا، أو إضافة الخطوات في نهاية السكربت لأتمتة العملية.
ترجمة -وبتصرف- للمقال Automating Initial Server Setup with Ubuntu 18.04 لصاحبه Justin Ellingwood
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.