এই মডিউল কী করে #
আপনার ইনস্ট্যান্সের প্রায় প্রতিটি সার্ভিসের একটি সিক্রেট প্রয়োজন: ডাটাবেসের পাসওয়ার্ড, কোনো ইন্টিগ্রিটি টুলের passphrase, একটি API কী… এগুলো হাতে হাতে রাখা—বা আরও খারাপ, ডিফল্ট অবস্থায় ছেড়ে দেওয়া—একটি মেশিন কম্প্রোমাইজড হওয়ার অন্যতম সাধারণ উপায়।
secrets মডিউলটি লোকালে এই জীবনচক্র সামলায়: প্রতিটি সিক্রেটকে একটি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত জেনারেটর (CSPRNG) দিয়ে তৈরি করে, 0600 অনুমতিতে সংরক্ষণ করে (কেবল root সেটি পড়তে পারে), একটি pipe-এ চেইন করার জন্য প্রস্তুত পরিষ্কার আউটপুট দিয়ে সেটি ফেরত দেয়, এবং প্রয়োজনে সেটিকে রোটেট করে। সবকিছু ডোমেইন অনুযায়ী সাজানো হয় (উদাহরণস্বরূপ mariadb বা tripwire), এবং প্রতিটি ডোমেইনের একাধিক ফিল্ড থাকতে পারে।
generate আইডেমপোটেন্ট: যদি কোনো ডোমেইনের সিক্রেট ইতিমধ্যে বিদ্যমান থাকে, এটি সেটিকে স্পর্শ করে না। এভাবে একই ইমেজ প্রতিটি ইনস্ট্যান্সের প্রথম বুটে তার সিক্রেটগুলো তৈরি করতে পারে, আর দুটি মেশিন একই পাসওয়ার্ড শেয়ার করে না। মানগুলো কখনও লগ করা হয় না বা list-এ দেখানো হয় না।
সাধারণ কাজ #
আপনি যা করতে চান তা বেছে নিন। প্রতিটি রেসিপিতে কমান্ডটি আগে থেকেই লেখা থাকে — শুধু ডোমেইনটি আপনার নিজেরটি দিয়ে বদলান এবং কপি করুন-এ চাপ দিন।
1
কোনো সার্ভিসের সিক্রেট তৈরি করা
একটি ডোমেইনের জন্য একটি শক্তিশালী পাসওয়ার্ড তৈরি করে, কেবল যদি সেটি এখনও বিদ্যমান না থাকে।
ubuntu ইউজার দিয়ে SSH-এর মাধ্যমে আপনার সার্ভারে সংযুক্ত হন।
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» এর আউটপুট সহ আমাদের লিখুন, আমরা দ্রুত উত্তর দেব।