यह मॉड्यूल क्या करता है #
आपके इंस्टेंस की लगभग हर सेवा को एक सीक्रेट की ज़रूरत होती है: डेटाबेस का पासवर्ड, किसी इंटीग्रिटी टूल की passphrase, एक API कुंजी… इन्हें हाथ से सहेजना —या इससे भी बुरा, डिफ़ॉल्ट पर छोड़ देना— किसी मशीन के समझौता होने के सबसे आम तरीकों में से एक है।
secrets मॉड्यूल इस जीवन-चक्र को लोकल स्तर पर संभालता है: प्रत्येक सीक्रेट को एक क्रिप्टोग्राफ़िक रूप से सुरक्षित जनरेटर (CSPRNG) से जनरेट करता है, उसे 0600 अनुमतियों के साथ सहेजता है (केवल root ही उसे पढ़ सकता है), उसे pipe में जोड़ने के लिए तैयार साफ़ आउटपुट के साथ लौटाता है, और ज़रूरत पड़ने पर उसे रोटेट करता है। सब कुछ डोमेन के अनुसार व्यवस्थित होता है (उदाहरण के लिए mariadb या tripwire), और प्रत्येक डोमेन में कई फ़ील्ड हो सकते हैं।
generate idempotent है: यदि किसी डोमेन का सीक्रेट पहले से मौजूद है, तो वह उसे नहीं छूता। इस तरह, एक ही इमेज प्रत्येक इंस्टेंस के पहले बूट पर अपने सीक्रेट बना सकती है, बिना इसके कि दो मशीनें एक ही पासवर्ड साझा करें। मान कभी भी लॉग नहीं होते और list में नहीं दिखते।
सामान्य कार्य #
चुनें कि आप क्या करना चाहते हैं। प्रत्येक रेसिपी में कमांड पहले से लिखा हुआ आता है — बस डोमेन को अपने डोमेन से बदलें और कॉपी करें दबाएँ।
1
किसी सेवा का सीक्रेट जनरेट करें
किसी डोमेन के लिए एक मज़बूत पासवर्ड बनाएँ, केवल तभी जब वह अभी तक मौजूद न हो।
अपने सर्वर से ubuntu उपयोगकर्ता के साथ SSH द्वारा कनेक्ट करें।
mariadb डोमेन का सीक्रेट जनरेट करें। idempotent होने के कारण, आप इसे जितनी बार चाहें चला सकते हैं, ओवरराइट होने के डर के बिना:
$ 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 | किसी डोमेन का सीक्रेट बनाता है यदि वह मौजूद न हो (idempotent, 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 डिज़ाइन के अनुसार idempotent है। | यदि आप एक नया मान चाहते हैं, तो secrets rotate <dominio> का उपयोग करें। |
पढ़ते समय Permission denied | फाइल 0600 है और आपने उसे बिना विशेषाधिकार के चलाया। | कमांड को sudo के साथ चलाएँ; केवल root ही सीक्रेट तक पहुँचता है। |
सीक्रेट्स मॉड्यूल में अटक गए?
हमें «imaxe <module> status --json» का आउटपुट भेजें और हम आपको जल्दी जवाब देंगे।