ماذا تفعل هذه الوحدة #
تحتاج كل خدمة تقريبًا في نسختك إلى سر: كلمة مرور قاعدة البيانات، وعبارة المرور لأداة تحقق من السلامة، ومفتاح API… حفظها يدويًا —أو الأسوأ، تركها على القيم الافتراضية— هو واحد من أكثر الأسباب شيوعًا لتعرّض جهاز للاختراق.
تتكفّل وحدة secrets بدورة الحياة هذه محليًا: تولّد كل سر بمولّد آمن تشفيريًا (CSPRNG)، وتحفظه بأذونات 0600 (يستطيع root وحده قراءته)، وتعيده بمخرجات نظيفة جاهزة للسَّلسلة في pipe، وتدوّره عند الحاجة. يُنظَّم كل شيء حسب المجالات (مثل mariadb أو tripwire)، ويمكن أن يحتوي كل مجال على عدة حقول.
generate خامل التكرار: إن كان سر مجال ما موجودًا بالفعل فإنه لا يمسّه. وهكذا يمكن للصورة نفسها أن تنشئ أسرارها عند أول إقلاع لكل نسخة دون أن يتشارك جهازان كلمة المرور نفسها. لا تُسجَّل القيم أبدًا ولا تُعرَض في list.
المهام الشائعة #
اختر ما تريد فعله. تأتي كل وصفة بالأمر مكتوبًا مسبقًا — كل ما عليك هو تغيير المجال إلى مجالك والضغط على نسخ.
1
توليد سر لخدمة
ينشئ كلمة مرور قوية لمجال، فقط إن لم تكن موجودة بعد.
اتصل عبر SSH بخادمك باستخدام المستخدم ubuntu.
ولّد سر المجال mariadb. بما أنه خامل التكرار، يمكنك تشغيله كما تشاء دون خوف من الكتابة فوقه:
$ sudo imaxe secrets generate mariadbهل تحتاج إلى عبارة مرور طويلة لأداة أخرى وفي حقل محدد؟ اضبط --format و--len و--field:
$ sudo imaxe secrets generate tripwire --field local.passphrase --format passphrase --len 400600. إن كان موجودًا من قبل فلم يتغير — وينتهي الأمر بنجاح على أي حال.2
قراءة سر لاستخدامه
احصل على القيمة الخام، جاهزة للسَّلسلة في أمر آخر.
get يطبع القيمة فقط، دون زخارف ولا أسطر زائدة، حتى تتمكن من تمريرها إلى عملية أخرى عبر pipe:
$ sudo imaxe secrets get mariadbهل السر في حقل محدد من المجال؟ حدّده بـ --field:
$ sudo imaxe secrets get tripwire --field local.passphrasePASS="$(sudo imaxe secrets get mariadb)" واستخدامها مباشرة في سكربتك.3
تدوير سر
يستبدل القيمة بأخرى جديدة ويضع علامة على المجال بأنه مُدوَّر.
ولّد قيمة جديدة للمجال. على خلاف generate، فإن rotate يستبدل السر الموجود بالفعل:
$ sudo imaxe secrets rotate mariadblist). تذكّر أن تحدّث الخدمة التي تستخدم ذلك السر بالقيمة الجديدة من get.4
عرض المجالات الموجودة
استعلم عن البيانات الوصفية دون كشف أي قيمة.
اسرد المجالات مع بياناتها الوصفية (متى أُنشئت ومتى دُوّرت). لا يعرض السر نفسه أبدًا:
$ sudo imaxe secrets listهل تحتاجه لسكربت أو لفحص آلي؟ اطلب المخرجات بصيغة JSON:
$ sudo imaxe secrets list --jsonلا يستطيع قراءة السر إلا root ما دام موجودًا على القرص. لكن بمجرد قراءته بـ get ينتقل إلى طرفيتك وإلى الصدفة لديك: تجنّب تركه في السجلّ التاريخي (history)، أو في متغيرات بيئة مُصدَّرة بلا داعٍ، أو في السجلّات. فضّل الاستبدالات النقطية للأوامر مثل "$(sudo imaxe secrets get mariadb)".
صيغة الاستخدام #
imaxe secrets <subcomando> [<dominio>] [--field CLAVE] [flags]تتطلب جميع الأوامر الفرعية امتيازات root (استخدم sudo) لأنها تقرأ وتكتب ملفات 0600 تحت /etc/imaxe/. أضف --json إلى list للحصول على مخرجات قابلة للقراءة آليًا، مناسبة لكتابة السكربتات. تذكّر: get يُصدر القيمة خامًا، دون تزيين، جاهزة لـ pipe.
الأوامر الفرعية #
| الأمر الفرعي | ماذا يفعل | الرايات المعنية |
|---|---|---|
| generate | ينشئ سر مجال إن لم يكن موجودًا (خامل التكرار، CSPRNG). دون مجال، يولّد أسرار generate_on_first_boot. | --len, --format, --field |
| get | يعيد قيمة سر بمخرجات نظيفة، مناسبة لـ pipe. | --field |
| rotate | يولّد سرًا جديدًا ويضع علامة على المجال بأنه مُدوَّر. | --field |
| list | يسرد المجالات وبياناتها الوصفية (أُنشئ، دُوّر). لا يعرض القيم أبدًا. | --json |
الوسائط والرايات #
| الراية | النوع | الافتراضي | الوصف |
|---|---|---|---|
| <dominio> | string | — | مجال السر (مثل mariadb، tripwire). إلزامي في get وrotate. في generate، الفارغ = مجالات generate_on_first_boot. |
| --field | string | value | حقل داخل المجال. يتيح حفظ عدة أسرار لكل مجال (مثل local.passphrase). |
| --len | int | 32 | في generate: طول السر بالأحرف. |
| --format | enum | password | في generate: صيغة القيمة — password أو passphrase أو hex. |
| --json | bool | false | في list، يُصدر البيانات الوصفية كـ JSON مُهيكل في stdout. |
الملفات والمسارات #
| المسار | المحتوى |
|---|---|
| /etc/imaxe/secrets.yml | إعدادات الوحدة: القيم الافتراضية (length، format)، والمجالات وقائمة generate_on_first_boot. يُحفَظ بأذونات 0600. |
مثال على secrets.yml:
defaults:
length: 32
format: password
domains: {}
generate_on_first_boot:
- mariadb
- tripwireبهذه الإعدادات، فإن sudo imaxe secrets generate دون مجال عند أول إقلاع ينشئ أسرار mariadb وtripwire بالطول والصيغة الافتراضيين.
رموز الخروج والسجلّات #
يعيد كل تشغيل رمزًا يمكنك التحقق منه بـ echo $? — مفيد للسَّلسلة في السكربتات:
get دون مجال).استخدام نموذجي في سكربت، مستفيدًا من المخرجات النظيفة لـ get:
$ sudo imaxe secrets generate mariadb \
&& sudo imaxe secrets get mariadb | some-tool --stdin-password \
|| echo "falló con código $?"حل المشكلات #
| العَرَض | السبب المحتمل | الحل |
|---|---|---|
| يظهر NOTFOUND (الرمز 3) | المجال أو --field لم يُولَّد بعد. | أنشئه أولًا بـ secrets generate <dominio> (وبنفس --field). |
| يظهر USAGE (الرمز 2) | تشغيل get أو rotate دون تحديد المجال. | مرّر المجال كوسيط؛ فهو إلزامي في هذه الأوامر الفرعية. |
generate لا يغيّر القيمة | السر موجود من قبل: generate خامل التكرار بالتصميم. | إن أردت قيمة جديدة، استخدم secrets rotate <dominio>. |
Permission denied عند القراءة | الملف 0600 وقد شغّلته دون امتيازات. | نفّذ الأمر بـ sudo؛ فقط root يصل إلى السر. |
هل واجهتك مشكلة مع وحدة الأسرار؟
راسلنا مرفقًا مخرجات «imaxe <module> status --json» وسنرد عليك بسرعة.