یہ ماڈیول کیا کرتا ہے #
آپ کے انسٹینس کی تقریباً ہر سروس کو ایک راز درکار ہوتا ہے: ڈیٹابیس کا پاس ورڈ، کسی انٹیگریٹی ٹول کی passphrase، کوئی API کلید… انہیں ہاتھ سے محفوظ کرنا —یا اس سے بھی بدتر، طے شدہ چھوڑ دینا— ان سب سے عام طریقوں میں سے ایک ہے جن سے کوئی مشین آخرکار سمجھوتہ شدہ ہو جاتی ہے۔
secrets ماڈیول اس زندگی کے دور کو مقامی طور پر سنبھالتا ہے: ہر راز کو ایک خفیہ نگاری کے لحاظ سے محفوظ جنریٹر (CSPRNG) کے ساتھ تیار کرتا ہے، اسے 0600 اجازتوں کے ساتھ محفوظ کرتا ہے (صرف root اسے پڑھ سکتا ہے)، اسے ایک صاف نتیجے کے ساتھ واپس دیتا ہے جو pipe میں جوڑنے کے لیے تیار ہوتا ہے، اور جب آپ کو ضرورت ہو تو اسے بدل دیتا ہے۔ سب کچھ ڈومینز کے حساب سے منظم ہوتا ہے (مثلاً mariadb یا tripwire)، اور ہر ڈومین کے کئی فیلڈز ہو سکتے ہیں۔
generate آئیڈیمپوٹنٹ ہے: اگر کسی ڈومین کا راز پہلے سے موجود ہو تو اسے نہیں چھیڑتا۔ یوں، ایک ہی امیج اپنے راز ہر انسٹینس کے پہلے بوٹ پر بنا سکتی ہے، بغیر اس کے کہ دو مشینیں ایک ہی پاس ورڈ شیئر کریں۔ اقدار کبھی درج نہیں کی جاتیں اور نہ ہی list میں دکھائی جاتی ہیں۔
عام کام #
جو کرنا چاہتے ہیں وہ منتخب کریں۔ ہر نسخہ پہلے سے لکھی کمانڈ لاتا ہے — بس ڈومین کو اپنے ڈومین سے بدلیں اور کاپی کریں دبائیں۔
1
کسی سروس کا راز تیار کریں
کسی ڈومین کے لیے مضبوط پاس ورڈ بنائیں، صرف اسی صورت جب ابھی موجود نہ ہو۔
SSH کے ذریعے ubuntu صارف کے ساتھ اپنے سرور سے جڑیں۔
mariadb ڈومین کا راز تیار کریں۔ آئیڈیمپوٹنٹ ہونے کے باعث، آپ اسے جتنی بار چاہیں چلا سکتے ہیں، اووررائٹ ہونے کے خوف کے بغیر:
$ sudo imaxe secrets generate mariadbکیا آپ کو کسی اور ٹول کے لیے اور ایک مخصوص فیلڈ میں لمبی passphrase چاہیے؟ --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 سے پڑھتے ہیں یہ آپ کے ٹرمینل اور آپ کے shell میں چلا جاتا ہے: اسے ہسٹری (history) میں، ضرورت سے زیادہ ایکسپورٹ شدہ ماحول کے متغیرات میں یا لاگز میں چھوڑنے سے بچیں۔ "$(sudo imaxe secrets get mariadb)" جیسی موقع پر مبنی کمانڈ متبادلات کو ترجیح دیں۔
نحو #
imaxe secrets <subcomando> [<dominio>] [--field CLAVE] [flags]تمام ذیلی کمانڈز کو root کے مراعات درکار ہیں (sudo استعمال کریں) کیونکہ وہ /etc/imaxe/ کے تحت 0600 فائلیں پڑھتی اور لکھتی ہیں۔ مشین کے قابلِ فہم نتیجے کے لیے، جو scripting کے لیے موزوں ہو، list میں --json شامل کریں۔ یاد رکھیں: 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 میں، میٹا ڈیٹا کو stdout پر ساختہ JSON کے طور پر خارج کرتا ہے۔ |
فائلیں اور راستے #
| راستہ | مواد |
|---|---|
| /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» کے آؤٹ پٹ کے ساتھ ہمیں لکھیں اور ہم فوراً جواب دیں گے۔