এই পর্বে যা শিখবেন
- কেন privileged account সবার আগে সুরক্ষা পাবে, আর কোন কোন account এই দলে পড়ে
- Just-in-time আর just-enough access, অনুরোধ থেকে স্বয়ংক্রিয় মেয়াদ শেষ পর্যন্ত
- PAM-এর session brokering, recording আর credential checkout, সাথে আলাদা admin account ও PAW
- নিজের server-এ নিরাপদ
sudoers,sshdআর SSH certificate - Secret vault, rotation, secret sprawl, scanning আর non-human identity-র তালিকা
- Break-glass, privileged কাজের নজরদারি আর ৫০ জনের প্রতিষ্ঠানের শুরু করার পথ
১ · কেন privileged account সবার আগে নিশানা
একটি ব্যাংকের শাখা ভাবুন। ক্যাশিয়ারের কাছে নিজের ড্রয়ারের চাবি আছে। ড্রয়ারের চাবি হারালে ক্ষতি একটি ড্রয়ারের। কিন্তু ভল্টের মাস্টার চাবি হারালে পুরো শাখা ঝুঁকিতে পড়ে। তাই ভল্টের চাবি একজনের পকেটে থাকে না। দুজন লাগে, রেজিস্টার খাতায় সই লাগে, আর কাজ শেষে চাবি ফেরত যায়।
Privileged account হলো সেই মাস্টার চাবি। এই account সাধারণ কাজের বাইরে যায়: user তৈরি করে, অনুমতি বদলায়, log মুছতে পারে, সব ডেটা পড়তে পারে, backup নষ্ট করতে পারে। Privileged access মানে এমন অধিকার, যা নিরাপত্তা নিয়ন্ত্রণ নিজেই বদলাতে পারে বা অনেক সিস্টেমে একসাথে পৌঁছায়।
রক্ষকের হিসাব: কেন এখানেই আগে খরচ
আক্রমণকারী সাধারণত প্রথমেই admin হয়ে ঢোকে না। সে একটি সাধারণ account দিয়ে শুরু করে, তারপর আরও বড় অধিকার খোঁজে। পর্ব ৫-এর ভাষায় privilege escalation, lateral movement আর persistence, এই তিন ধাপ প্রায়ই একটি বৈধ privileged account-এর ওপর নির্ভর করে। MITRE ATT&CK-এ Valid Accounts (T1078) আলাদা technique হিসেবে আছে। কারণ বৈধ login দেখতে স্বাভাবিক কাজের মতো লাগে, malware-এর মতো নয়।
রক্ষকের দিক থেকে তিনটি যুক্তি:
- Blast radius বড়: একটি domain admin বা cloud root-এর ভুল বা চুরি পুরো প্রতিষ্ঠানে পৌঁছায়। সংখ্যায় এরা অল্প, ঝুঁকিতে অনেক বেশি।
- প্রমাণও এদের হাতে: যে log মুছতে পারে, তার কাজ ধরা কঠিন। তাই log-কে admin-এর নাগালের বাইরে পাঠানো জরুরি।
- খরচ কম, লাভ বেশি: ৫০ জনের প্রতিষ্ঠানে privileged মানুষ হয়তো ৮ জন। ৫০ জনের চেয়ে ৮ জনকে ভালোভাবে রক্ষা করা সহজ।
Privileged access সুরক্ষার চারটি প্রশ্ন: কে পারে, কতটুকু পারে, কতক্ষণ পারে, আর কী করল তা কে দেখে। পর্ব ৩-এর least privilege প্রথম দুটি উত্তর দেয়, আর তার বাস্তব রূপ পর্ব ১৯-এ দেখেছেন। এই পর্ব তাতে সময় আর নজরদারি যোগ করে।
২০২১ সালে Colonial Pipeline-এর ঘটনায় প্রধান নির্বাহীর মার্কিন সিনেট সাক্ষ্য অনুযায়ী, ঢোকার পথ ছিল একটি পুরোনো VPN profile, যাতে MFA ছিল না। Password সহজ ছিল না, তবুও তা কোনোভাবে ফাঁস হয়েছিল। প্রতিষ্ঠানের লিখিত বিবৃতি অনুযায়ী profile-টি ব্যবহারের জন্য রাখা ছিল না, তবু সেটি কাজ করছিল। ব্যর্থতাটি password-এর শক্তিতে নয়। রক্ষকের শিক্ষা হলো তালিকা: যে account কারও নজরে নেই, তার সুরক্ষাও কেউ করে না। নিচের সবকিছুর শুরু তাই একটি তালিকা থেকে।
২ · কারা privileged — পাঁচ ধরন আর non-human identity
“Admin” বললে সাধারণত একজন মানুষের কথা মনে আসে। বাস্তবে privileged পরিচয়ের বড় অংশ মানুষ নয়। পাঁচটি ধরন আলাদা করে চিনে নিন, কারণ প্রতিটির ঝুঁকি আলাদা।
| ধরন | উদাহরণ | প্রধান ঝুঁকি | প্রধান নিয়ন্ত্রণ |
|---|---|---|---|
| মানুষ admin | System, database, cloud admin | Phishing, দৈনন্দিন ব্রাউজিংয়ে ফাঁস | আলাদা account, phishing-প্রতিরোধী MFA, JIT |
| Service account | Backup job, app-এর database user | পুরোনো password, বেশি অধিকার, মালিক নেই | মালিক, সীমিত scope, মানুষের login বন্ধ |
| Break-glass | জরুরি অবস্থার account | Standing অধিকার, ব্যবহার হয় কম | সিলগালা, প্রতিটি login-এ alert, মহড়া |
| Shared account | root, admin, router-এর login | কে করল বোঝা যায় না, কর্মী চলে গেলেও জানা থাকে | ব্যক্তিগত login-এ ভাঙা; না গেলে broker-এর পেছনে |
| API key ও token | Payment, SMS, cloud-এর key | কোডে, chat-এ বা log-এ ছড়ানো | Vault, স্বল্প মেয়াদ, scope, scanning |
Non-human identity-র তালিকা
Non-human identity (NHI) মানে মানুষ নয় এমন পরিচয়: service account, API key, OAuth app (পর্ব ১৮), CI/CD token, certificate, bot, AI agent. এদের MFA থাকে না, ছুটিও হয় না, আর চাকরি ছাড়ার মতো কোনো দিনও আসে না। তাই এগুলো নীরবে থেকে যায়। OWASP Non-Human Identities Top 10 (২০২৫) তালিকার প্রথম ঝুঁকিই Improper Offboarding, অর্থাৎ অপ্রয়োজনীয় NHI সরিয়ে না ফেলা। একই তালিকায় আছে secret leakage, overprivileged NHI, long-lived secret আর Human Use of NHI. শেষেরটি মানে মানুষের service account দিয়ে login করা।
Inventory-র প্রতিটি সারিতে অন্তত এগুলো থাকবে:
- নাম ও ধরন: কোন secret, কোন সিস্টেমের
- মালিক: একজন মানুষ বা দল, যিনি জবাব দেবেন
- উদ্দেশ্য ও অধিকার: কী কাজে, কতটুকু scope
- ব্যবহারকারী: কোন কোন app এটি পড়ে
- শেষ rotation ও শেষ ব্যবহার: বয়স আর ঘুমন্ত কি না
- মেয়াদ: কবে বদলাবে বা বাতিল হবে
Inventory একবার বানিয়ে রেখে দিলে কয়েক মাসেই পুরোনো হয়। খোঁজার পথও একাধিক রাখুন: cloud-এর IAM তালিকা, vault-এর log, repository scan আর database-এর user তালিকা। এমন ঘটনার শিক্ষা হলো, মানুষের স্মৃতি দিয়ে বানানো তালিকায় ঠিক সেই পুরোনো account-টিই বাদ পড়তে পারে, যেটি বিপজ্জনক।
৩ · Standing privilege সরানো — just-in-time আর just-enough
Standing privilege মানে যে অধিকার সবসময় চালু থাকে, কাজ থাকুক বা না থাকুক। ব্যাংকের উদাহরণে এটি হলো ভল্টের চাবি সারাবছর ম্যানেজারের পকেটে থাকা। ম্যানেজার ঘুমাচ্ছেন, বিয়েবাড়িতে আছেন, তখনও চাবিটি চুরি হলে ভল্ট খোলে।
দুটি ধারণা এই সমস্যা কমায়। এরা আলাদা, আবার একসাথেই সবচেয়ে কার্যকর:
Just-in-time (JIT)
কখন অধিকার থাকবে তার উত্তর। Just-in-time access অধিকার দেয় শুধু কাজের সময়টুকুর জন্য, তারপর নিজে থেকে শেষ করে।
সময় কমায়Just-enough (JEA)
কতটুকু অধিকার থাকবে তার উত্তর। Just-enough access মানে পুরো admin নয়, শুধু এই কাজের অনুমতি। যেমন শুধু nginx restart.
পরিধি কমায়একই সপ্তাহ, দুই রকম চিত্র
Standing privilege vs just-in-time grants across seven days
হিসাব করে দেখা
একজন admin-এর standing অধিকার বছরে 24 × 365 = ৮,৭৬০ ঘণ্টা। ধরা যাক ৮ জন admin. মোট ৮ × ৮,৭৬০ = ৭০,০৮০ privileged ঘণ্টা। JIT-এ ধরা যাক প্রতি জন সপ্তাহে কয়েকবার অল্প সময়ের জন্য অধিকার নেন। নিচের calculator সব সংখ্যাই অনুমান ধরে চলে। দ্বিতীয় ভাগে দেখুন, মানুষ যদি প্রতিবার ৮ গুণ লম্বা সময় চান, তাহলে কী হয়।
// Standing-privilege exposure: privileged hours per year, before and after JIT.
// All numbers are assumptions for a made-up organisation of about 50 people.
const YEAR_HOURS = 24 * 365, WEEKS = 52;
const groups = [
{ name: 'server admins', people: 4, grantsPerWeek: 3, hoursPerGrant: 1 },
{ name: 'database admins', people: 2, grantsPerWeek: 2, hoursPerGrant: 2 },
{ name: 'cloud admins', people: 2, grantsPerWeek: 2, hoursPerGrant: 1 },
];
function report(label, stretch) {
let before = 0, after = 0;
console.log(`--- ${label}`);
for (const g of groups) {
const b = g.people * YEAR_HOURS;
const a = g.people * g.grantsPerWeek * WEEKS * g.hoursPerGrant * stretch;
before += b; after += a;
console.log(`${g.name.padEnd(16)} before ${String(b).padStart(6)}h after ${String(a).padStart(6)}h`);
}
const pct = (1 - after / before) * 100;
console.log(`total before ${String(before).padStart(6)}h after ${String(after).padStart(6)}h`);
console.log(`reduction ${pct.toFixed(1)}%, active at a random moment ${(after / before * 100).toFixed(1)}%`);
}
report('short grants, as planned', 1);
report('people always ask for 8x longer', 8);প্রথম ভাগের total সারিতে before 70080h আর after 1248h, তাই reduction 98.2%. ৭০,০৮০ থেকে ১,২৪৮ মানে ১,২৪৮ ÷ ৭০,০৮০ ≈ ০.০১৮, তাই active at a random moment 1.8%. অর্থাৎ যেকোনো একটি মুহূর্তে কোনো admin-এর অধিকার খোলা থাকার গড় সম্ভাবনা ১.৮%. দ্বিতীয় ভাগ সতর্ক করে: মানুষ অভ্যাসে লম্বা সময় চাইলে after 9984h, আর হ্রাস নেমে আসে 85.8%-এ। তাই সর্বোচ্চ মেয়াদ নীতিতেই বেঁধে দিন, আর কত সময় চাওয়া হলো তা মাপুন।
এই হিসাবের সীমা: JIT যা কমায় তা হলো সুযোগের সময়, পুরো ঝুঁকি নয়। Grant চলার সময় admin-এর laptop বা session দখল হলে JIT আটকাবে না। তাই JIT-এর সাথে phishing-প্রতিরোধী MFA (পর্ব ১৬), নিরাপদ workstation আর session-এর নজরদারি লাগে। আর privileged ঘণ্টা ৯৮% কমলে ঝুঁকিও ৯৮% কমেছে, এমন দাবি করবেন না।
৪ · JIT কীভাবে চলে — অনুরোধ থেকে মেয়াদ শেষ
JIT-এর লক্ষ্য zero standing privilege: স্বাভাবিক সময়ে কারও কাছে উঁচু অধিকার থাকে না, থাকে শুধু অনুরোধ করার যোগ্যতা। অনুমোদন পর্ব ৩-এর maker-checker নীতি মানে: যিনি চাইছেন, তিনি নিজে অনুমোদন করতে পারেন না। নিচে একটি কাল্পনিক অনলাইন বাজারের ঘটনা। Rumi-কে সকালে একটি database সমস্যা ঠিক করতে হবে।
| সময় | |
| ধাপ | |
| db-admin অধিকার | |
| বাকি মেয়াদ | |
| Audit-এর লাইন |
- অনুরোধ। ০৯:০০-এ Rumi চাইলেন
db-admin, ৩০ মিনিট, কারণ টিকিট ৪৮২১। অধিকার এখনো নেই। Audit-এ প্রথম লাইন লেখা হলো: কে, কী, কেন, কতক্ষণ। - নীতি যাচাই। সিস্টেম দেখল Rumi এই role-এর যোগ্য, ৩০ মিনিট ৬০ মিনিটের সীমার মধ্যে, আর টিকিটটি খোলা আছে। Rumi আবার MFA দিলেন। সংবেদনশীল কাজের আগে এই নতুন যাচাইকে step-up বলে। অধিকার এখনো নেই।
- অনুমোদন। ০৯:০৩-এ Tania টিকিট পড়ে অনুমোদন করলেন। তিনি অনুরোধকারী নন, তাই maker-checker মানা হলো। নিচু ঝুঁকির কাজে নীতি নিজেই অনুমোদন করতে পারে, তবে উৎপাদন database-এ মানুষের চোখ থাকে।
- Grant. ০৯:০৪-এ অধিকার চালু হলো, ৩০ মিনিটের জন্য। শেষ সময় আগেই ঠিক করা: ০৯:৩৪. কাউকে মনে করে বন্ধ করতে হবে না।
- ব্যবহার। ০৯:১০-এ Rumi কাজ করছেন। বাকি ২৪ মিনিট। Session আর query log SIEM-এ যাচ্ছে। শুধু টিকিটের কাজের সীমায় থাকা দরকার, আর তা পরে যাচাই করা যাবে।
- মেয়াদ শেষ। ০৯:৩৪-এ অধিকার নিজে থেকে সরে গেল। খোলা session-ও বন্ধ হওয়া ভালো, কারণ অনেক সিস্টেম শুধু login-এর সময় অধিকার দেখে। কাজ বাকি থাকলে Rumi নতুন অনুরোধ করবেন, মেয়াদ চুপচাপ বাড়বে না।
- পর্যালোচনা। পরের সপ্তাহে access review-এ টিকিট আর log মিলিয়ে দেখা হলো। মোট ৭টি audit লাইনে পুরো গল্পটি আছে: অনুরোধ, যাচাই, অনুমোদন, grant, ব্যবহার, শেষ, পর্যালোচনা।
এবার একই নিয়ম কোডে দেখুন। নিচের broker একটি খেলনা। ঘড়িও নকল (মিনিটে), আর কোনো আসল সিস্টেমে হাত দেয় না। লক্ষ করুন, মেয়াদ শেষের কাজ কোনো মানুষের ওপর নির্ভর করে না।
// Toy JIT broker on a simulated clock (minutes). Touches no real system.
const POLICY = { maxMinutes: 60, approvers: { 'db-admin': ['tania', 'sohel'] } };
const grants = [], audit = [];
const log = (t, msg) => audit.push(`t=${String(t).padStart(3)} ${msg}`);
function expire(now) { // automatic expiry: nobody has to remember
for (const g of grants) {
if (!g.ended && g.expires <= now) {
g.ended = true;
log(g.expires, `EXPIRE ${g.user} ${g.role}`);
}
}
}
function request(t, user, role, minutes, approver) {
expire(t);
const tag = `${user} ${role} ${minutes}m`;
if (approver === user) return log(t, `DENY ${tag}: self-approval`);
if (!POLICY.approvers[role].includes(approver)) return log(t, `DENY ${tag}: not an approver`);
if (minutes > POLICY.maxMinutes) return log(t, `DENY ${tag}: over ${POLICY.maxMinutes}m limit`);
grants.push({ user, role, expires: t + minutes, ended: false });
log(t, `GRANT ${tag}: by ${approver}, until t=${t + minutes}`);
}
function use(t, user, role) {
expire(t);
const ok = grants.some(g => g.user === user && g.role === role && !g.ended);
log(t, `${ok ? 'ALLOW ' : 'BLOCK '} ${user} uses ${role}`);
}
request(0, 'rumi', 'db-admin', 30, 'rumi');
request(1, 'rumi', 'db-admin', 240, 'tania');
request(2, 'rumi', 'db-admin', 30, 'tania');
use(10, 'rumi', 'db-admin');
use(20, 'farid', 'db-admin');
use(31, 'rumi', 'db-admin');
use(33, 'rumi', 'db-admin');
console.log(audit.join('\n'));t= 0 DENY rumi db-admin 30m: self-approval: নিজের অনুরোধ নিজে অনুমোদন করা গেল না। over 60m limit আটকাল ২৪০ মিনিটের চাওয়া। তৃতীয়টি পেল until t=32. t= 20 BLOCK farid: Farid-এর grant নেই, তাই Rumi-র অধিকার তাঁর কাজে লাগে না। t= 31-এ Rumi ALLOW, তারপর t= 32 EXPIRE, আর t= 33-এ একই Rumi BLOCK. প্রতিটি লাইন audit-এ জমেছে, এমনকি প্রত্যাখ্যানও। প্রত্যাখ্যাত অনুরোধও detection-এর জন্য দামি তথ্য।
যা নিয়ে সতর্ক থাকবেন
- না দেখেই অনুমোদন: দিনে ৩০টি অনুরোধ এলে approver না পড়েই হ্যাঁ চাপেন। একে approval fatigue বলে, মানে অনুমোদনের ক্লান্তি। নিচু ঝুঁকির কাজ নীতি দিয়ে স্বয়ংক্রিয় করে দিলে মানুষের চোখ বাকি কাজে থাকে।
- Approver না থাকলে: সবাই ছুটিতে থাকলে বা সবাই JIT-নির্ভর হলে কেউ অনুমোদন করতে পারে না। তাই বিকল্প approver আর break-glass লাগে (অংশ ৮)।
- Grant-এর ফাঁকে অধিকার বাড়ানো: এক ঘণ্টার admin নতুন user বা key বানিয়ে রাখতে পারে। তাই grant-এর সময়ে নতুন credential তৈরি হলে alert দিন।
৫ · PAM আর admin-এর আলাদা জগৎ
PAM (privileged access management) কোনো একটি product নয়, একগুচ্ছ নিয়ন্ত্রণের নাম। মোটামুটি তিনটি ধারণা এর কেন্দ্রে। Product ছাড়াও এদের ছোট রূপ বানানো যায়।
| ধারণা | কী করে | ঘরোয়া উপমা | যা আটকায় না |
|---|---|---|---|
| Session brokering | Admin target-এ সরাসরি যান না। মাঝের broker login করে session খুলে দেয়, ফলে password admin-এর হাতে যায় না | হাসপাতালের গেটে দারোয়ান রোগীর ঘর খুলে দেন, চাবি দেন না | Session চলাকালে ভুল বা ক্ষতিকর কাজ |
| Session recording | কী কী command চলল বা পর্দায় কী হলো, তা সংরক্ষণ করে | ব্যাংকের লকার রুমের CCTV | রেকর্ড কেউ না দেখলে কিছুই ধরা পড়ে না |
| Credential checkout | Shared password vault থেকে অল্প সময়ের জন্য তুলে নেওয়া, ফেরত দিলে password বদলে যায় | অফিসের রেজিস্টার খাতায় সই করে চাবি নেওয়া | Checkout-এর সময়ে কপি করে রাখা, যদি ফেরতের পর rotation না হয় |
Recording-এ গোপনীয়তার প্রশ্নও আছে। পর্দায় গ্রাহকের তথ্য থাকলে recording নিজেই সংবেদনশীল ডেটা হয়ে যায়। তাই কে দেখবে, কতদিন থাকবে, আর কর্মীরা এটি জানেন কি না, সবই আগে ঠিক করুন।
আলাদা admin account আর PAW
Phishing আসে email-এ, malware আসে ব্রাউজারে। যে account দিয়ে আপনি email পড়েন, সেটিই যদি domain admin হয়, তাহলে একটি ভুল ক্লিকই পুরো প্রতিষ্ঠানের দরজা। তাই নিয়ম দুটি:
- আলাদা admin account: দৈনন্দিন কাজের জন্য
rumi, admin কাজের জন্যrumi-admin. Admin account-এ email নেই, web ব্রাউজিং নেই। CIS Controls v8-এর Safeguard 5.4 এই কথাই বলে, আর NIST SP 800-53-এর AC-6(2) বলে নিরাপত্তার বাইরের কাজে privileged নয় এমন account ব্যবহার করতে। - Privileged access workstation (PAW): শুধু admin কাজের জন্য শক্ত করে সাজানো কম্পিউটার। Email বা অচেনা software চলে না। ছোট প্রতিষ্ঠানে আলাদা যন্ত্র না থাকলে অন্তত আলাদা browser profile বা শক্ত করা ভার্চুয়াল মেশিন একটি আপস। মনে রাখবেন, এটি পুরো PAW-এর সমান সুরক্ষা নয়, কারণ নিচের যন্ত্রটি দূষিত হলে ওপরটিও ঝুঁকিতে পড়ে।
একটি privileged কাজের নিরাপদ পথ
Separate identity, hardened workstation, broker, target, and logs outside admin reach
৬ · নিজের server-এ — sudo নীতি আর SSH certificate
এই অংশের সব config শুধু নিজের বা অনুমোদিত server-এর জন্য। অন্যের সিস্টেমে হাত দিতে লিখিত অনুমতি লাগে, বিস্তারিত পর্ব ৬-এ। আগে একটি SSH session খোলা রেখে পরিবর্তন করুন, যাতে ভুলে নিজেই বাইরে আটকে না যান।
Sudo-তে just-enough
sudo একজন user-কে অন্য user হিসেবে, সাধারণত root হিসেবে, নির্দিষ্ট command চালাতে দেয়। নিয়ম থাকে sudoers ফাইলে। বিপজ্জনক অভ্যাস হলো ALL=(ALL) ALL, যা কার্যত পুরো root দেয়। নিচের উদাহরণ একটি web দলকে শুধু nginx চালানোর অধিকার দেয়:
# /etc/sudoers.d/90-webops (mode 0440, owner root)
Cmnd_Alias WEB_SVC = /usr/bin/systemctl reload nginx, \
/usr/bin/systemctl restart nginx
Cmnd_Alias WEB_LOGS = /usr/bin/journalctl -u nginx --no-pager -n 200
Defaults:%webops timestamp_timeout=5, use_pty
Defaults:%webops logfile=/var/log/sudo-webops.log
Defaults:%webops log_input, log_output
%webops ALL=(root) WEB_SVC, WEB_LOGSএই snippet-টি sudo 1.9.15-এর visudo -cf দিয়ে parse করে দেখা হয়েছে, আর ফল এসেছে parsed OK. লাইনগুলোর অর্থ:
Cmnd_Alias: command-এর নাম দেওয়া তালিকা। পুরো path আর পুরো argument লেখা আছে, তাই অন্য service বা অন্য argument মিলবে না।timestamp_timeout=5: sudo ৫ মিনিট পরে আবার password চাইবে।use_pty: command আলাদা pseudo-terminal-এ চলে। এতে root প্রক্রিয়া থেকে user-এর terminal-এ হাত বাড়ানোর পথ বন্ধ হয়।logfile: sudo-র ব্যবহার আলাদা ফাইলে লেখে। আসল ব্যবহারে এই log বাইরের সিস্টেমেও পাঠান।log_input, log_output: session-এর ইনপুট আর আউটপুট রেকর্ড করে, যাsudoreplayদিয়ে দেখা যায়। ইনপুট রেকর্ডে টাইপ করা গোপন তথ্যও ধরা পড়তে পারে, তাই দরকার বুঝে চালু করুন।--no-pager: root হিসেবে pager না খোলার জন্য। Pager বা editor-এর মতো program থেকে অন্য command চালানো যায়। তাই sudo-র তালিকায় এদের রাখবেন না। ফাইল সম্পাদনার জন্যsudoeditআছে।
ফাইলটি সবসময় visudo -f দিয়ে সম্পাদনা করুন, কারণ একটি syntax ভুল সবার sudo বন্ধ করে দিতে পারে। /etc/sudoers.d/-তে ফাইলের নামে . থাকলে বা শেষে ~ থাকলে sudo সেটি সাধারণত উপেক্ষা করে। পরে sudo -l -U rumi দিয়ে একজনের চূড়ান্ত অধিকার দেখে নিন।
দীর্ঘস্থায়ী key বনাম SSH certificate
SSH key সুবিধাজনক, কিন্তু সাধারণ public key-এর কোনো মেয়াদ নেই। authorized_keys-এ একবার ঢুকলে কর্মী চলে যাওয়ার পরও সেটি থেকে যেতে পারে। NIST IR 7966 (২০১৫) বড় প্রতিষ্ঠানে এই অনিয়ন্ত্রিত SSH key-এর সমস্যা নিয়েই লেখা। SSH certificate অন্য পথ নেয় (OpenSSH 5.4, ২০১০ থেকে): আপনার নিজের একটি CA user-এর public key-তে সই করে, মেয়াদ আর principal লিখে দেয়। Server শুধু CA-কে বিশ্বাস করে। প্রতিটি server-এ user-এর key ঢোকাতে হয় না। PKI-র ধারণা পর্ব ১১-এ, আর SSH-এর ভেতরের কাজ SSH ও দূরের server পর্বে আছে।
| প্রশ্ন | দীর্ঘস্থায়ী key | SSH certificate |
|---|---|---|
| মেয়াদ | সাধারণত নেই | Certificate-এ লেখা, যেমন ১ ঘণ্টা |
| কর্মী চলে গেলে | প্রতিটি server থেকে মুছতে হয় | নতুন certificate বন্ধ; পুরোনোটি মেয়াদে মরে |
| Server-এর বিশ্বাস | প্রতি key আলাদা | একটি CA public key |
| Log-এ পরিচয় | Key-এর fingerprint | Key ID, যেমন টিকিট নম্বরসহ |
| নতুন ঝুঁকি | Key ছড়িয়ে থাকা | CA key-ই সবচেয়ে দামি secret |
JIT-এর সাথে এটি দারুণ মেলে: grant মানে ১ ঘণ্টার একটি certificate. একটি পরীক্ষার ফোল্ডারে দুটি খেলনা key বানিয়ে OpenSSH 10.2 দিয়ে এটি চালানো হয়েছে, আর পরে private key দুটি মুছে ফেলা হয়েছে:
ssh-keygen -s user_ca -I rumi-TICKET-4821 -n rumi-admin \
-V +1h -z 1001 -O clear -O permit-pty admin_key.pub
ssh-keygen -L -f admin_key-cert.pubadmin_key-cert.pub:
Type: ssh-ed25519-cert-v01@openssh.com user certificate
Key ID: "rumi-TICKET-4821"
Serial: 1001
Valid: from 2026-10-31T19:47:00 to 2026-10-31T20:48:22
Principals:
rumi-admin
Critical Options: (none)
Extensions:
permit-pty
এটি আসল আউটপুট, শুধু public key আর CA-র fingerprint-এর দুটি লাইন ছোট রাখার জন্য বাদ দেওয়া হয়েছে। মেয়াদের শুরু আর শেষের মধ্যে ১ ঘণ্টা ১ মিনিটের একটু বেশি, কারণ ঘড়ির সামান্য অমিল সামলাতে ssh-keygen শুরুর সময় একটু পিছিয়ে দেয়। -O clear -O permit-pty port forwarding-এর মতো বাকি সুবিধা বাদ দিয়েছে। এটিই just-enough.
Server-এর দিকের নিয়ম নিচে। এখানকার keyword-গুলো OpenSSH-এর sshd_config manual-এর, তবে পুরো ফাইলটি কোনো আসল server-এ চালিয়ে পরীক্ষা করা হয়নি। তাই আপনার server-এ বসিয়ে অবশ্যই আগে sudo sshd -t চালান, আর version-ভেদে আচরণ মিলিয়ে নিন।
# /etc/ssh/sshd_config.d/10-admin.conf
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
AuthenticationMethods publickey
AllowGroups ssh-admins
MaxAuthTries 3
LogLevel VERBOSE
# Trust certificates from our own user CA, and nothing else
TrustedUserCAKeys /etc/ssh/user_ca.pub
AuthorizedPrincipalsFile /etc/ssh/principals/%u
AuthorizedKeysFile none
RevokedKeys /etc/ssh/revoked_keys
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding noPermitRootLogin no: সরাসরি root login বন্ধ, তাই log-এ আসল মানুষের নাম আসে।PasswordAuthentication no,KbdInteractiveAuthentication no: password অনুমান করার পথ বন্ধ।AllowGroups: শুধু একটি দলের সদস্য SSH করতে পারেন।LogLevel VERBOSE: কোন key বা certificate দিয়ে login হলো, তা log-এ আসে।TrustedUserCAKeys,AuthorizedPrincipalsFile: CA-র সই থাকতে হবে, আর certificate-এর principal এই ফাইলে থাকতে হবে।%uমানে login user-এর নাম।AuthorizedKeysFile none: পুরোনো ধরনের key দিয়ে login বন্ধ। এটি চালুর আগে নিশ্চিত হোন certificate-এর পথ কাজ করছে।RevokedKeys: বাতিল key-এর তালিকা। ফাইলটি থাকা চাই। sshd পড়তে না পারলে সবার public key login বন্ধ হয়ে যায়।
আরও গভীরে: Certificate মেয়াদ ১ ঘণ্টা হলে revocation-এর দরকার অনেক কমে, যেমন পর্ব ১১-এর short-lived certificate-এ দেখেছেন। CA-র private key থাকুক HSM বা KMS-এ, আর সই করার service চলুক JIT অনুমোদনের পেছনে। NIST SP 800-53 Rev. 5-এর AC-6(5), AC-6(9) আর AC-2(2) যথাক্রমে privileged account সীমিত করা, privileged কাজের log রাখা আর সাময়িক ও জরুরি account স্বয়ংক্রিয়ভাবে সামলানোর কথা বলে। ISO/IEC 27001:2022-এর Annex A 8.2-ও privileged access rights নিয়ে।
৭ · Secret vault, rotation আর secret sprawl
Secret manager, KMS আর envelope encryption-এর পুরো কাজ Secrets ও KMS পর্বে আছে। এখানে শুধু privileged access-এর চোখে দেখব। Key-এর জীবনচক্র আগেই পর্ব ১৪-এ পেয়েছেন।
Secret sprawl মানে একই secret ছড়িয়ে থাকা: কোডে, .env ফাইলে, chat-এ, wiki-তে, CI-এর log-এ, কারও browser-এ। মহল্লায় একটি বাড়ির ডুপ্লিকেট চাবি ছয় জনের কাছে থাকলে, তালা যত ভালোই হোক, চাবির হিসাব আর থাকে না। Secret vault সব চাবি এক জায়গায় আনে, আর চারটি জিনিস দেয়:
- অনুমতি: কে কোন secret পড়তে পারে, তা নীতিতে লেখা
- Log: কে কখন পড়ল, তার হিসাব
- Rotation: নিয়ম করে নতুন মানে বদল
- Dynamic secret আর lease: চাওয়ার মুহূর্তে বানানো স্বল্পমেয়াদি credential, যা মেয়াদ শেষে নিজে থেকে বাতিল হয়। একে JIT-এর যন্ত্র-সংস্করণ বলা যায়।
মেয়াদের হিসাব
ধরুন একটি secret নীরবে ফাঁস হলো, আর কেউ টের পেল না। ফাঁসের সময়টি rotation চক্রের যেকোনো জায়গায় হতে পারে। Rotation-ই তখন একমাত্র যা চোরের সময় শেষ করে। চক্রের দৈর্ঘ্য T হলে সবচেয়ে খারাপ ক্ষেত্রে চুরি করা secret T সময় চলবে, আর ফাঁসের সময় সমান সম্ভাবনায় ছড়ানো ধরলে গড়ে T/2 সময়।
- ৯০ দিনের rotation: সবচেয়ে খারাপ ৯০ দিন = ২,১৬০ ঘণ্টা, গড়ে ৪৫ দিন = ১,০৮০ ঘণ্টা
- ১ ঘণ্টার dynamic secret: সবচেয়ে খারাপ ১ ঘণ্টা, গড়ে ৩০ মিনিট
- সবচেয়ে খারাপ ক্ষেত্রে পার্থক্য: ২,১৬০ ÷ ১ = ২,১৬০ গুণ
এই হিসাব ধরে নেয় চোর secret দিয়ে নিজের জন্য নতুন পথ বানায়নি। বানালে rotation একা যথেষ্ট নয়। আর নতুন ঝুঁকিও আছে: সব চাবি এক vault-এ মানে vault-ই নতুন মাস্টার চাবি। তার admin, backup আর প্রথম প্রবেশের চাবি, যাকে secret zero বলে, সবচেয়ে কঠোরভাবে রক্ষা করতে হয়।
কোন secret-এর আগে কাজ
নিচের report একটি খেলনা inventory পড়ে। দিনগুলো নকল ক্যালেন্ডারের সংখ্যা, নামগুলো বানানো। এটি বয়স, মালিক, ঘুমন্ত অবস্থা আর একাধিক ব্যবহারকারী দেখে সিদ্ধান্তের তালিকা বানায়।
// Secret-age report on a toy inventory. Names and days are made up.
// lastRotated and lastUsed are day numbers on a simulated calendar.
const TODAY = 400;
const inventory = [
{ name: 'pay-gateway-key', owner: 'payments', lastRotated: 330, lastUsed: 400, maxAge: 90, consumers: 3 },
{ name: 'db-report-user', owner: 'data', lastRotated: 180, lastUsed: 399, maxAge: 90, consumers: 1 },
{ name: 'old-sms-token', owner: '', lastRotated: 12, lastUsed: 240, maxAge: 90, consumers: 1 },
{ name: 'ci-deploy-role', owner: 'platform', lastRotated: 395, lastUsed: 400, maxAge: 30, consumers: 1 },
{ name: 'backup-svc-key', owner: 'platform', lastRotated: 250, lastUsed: 398, maxAge: 180, consumers: 2 },
];
function findings(s) {
const age = TODAY - s.lastRotated, out = [];
if (!s.owner) out.push('NO-OWNER');
if (age > s.maxAge) out.push(`OVERDUE+${age - s.maxAge}d`);
if (TODAY - s.lastUsed > 60) out.push('DORMANT');
if (s.consumers > 1) out.push('SHARED');
return { age, out };
}
const rows = inventory.map(s => ({ s, ...findings(s) }))
.sort((a, b) => b.out.length - a.out.length || b.age - a.age);
for (const { s, age, out } of rows) {
const owner = (s.owner || '-').padEnd(9);
console.log(`${s.name.padEnd(16)} ${owner} age ${String(age).padStart(3)}d ${out.join(' ') || 'ok'}`);
}
const bad = rows.filter(r => r.out.length).length;
console.log(`${bad} of ${rows.length} secrets need action`);সবার ওপরে old-sms-token, যার পাশে NO-OWNER OVERDUE+298d DORMANT: মালিক নেই, মেয়াদ পেরিয়েছে ২৯৮ দিন (৩৮৮ − ৯০), আর ১৬০ দিন ব্যবহার হয়নি। ঘুমন্ত secret-এর বেলায় rotation নয়, আগে যাচাই করে বাতিল করাই ভালো। db-report-user rotation বাকি। SHARED মানে একাধিক app একই secret পড়ে, তাই বদলাতে সমন্বয় লাগে। ci-deploy-role শুধু ok. শেষ লাইন 4 of 5 secrets need action. তবে অগ্রাধিকার শুধু flag-এর সংখ্যায় নয়, secret-টি কী রক্ষা করছে তাতেও ঠিক হবে।
Downtime ছাড়া shared secret বদলানো
দুই version একসাথে বৈধ রাখার মূল কৌশল Secrets ও KMS পর্বে database password দিয়ে দেখানো আছে। এখানে দেখুন একটি vendor-এর API key, যা ধরা যাক দিনে ৯,০০০ call-এ ব্যবহার হয়: orders ৪,০০০, billing আর notify মিলে ৪,৬০০, আর একটি ভুলে যাওয়া report-job ৪০০।
| Vendor-এ বৈধ | |
| orders | |
| billing, notify | |
| report-job | |
| K1-এ দৈনিক call | |
| ব্যর্থ call |
- শুরু। সবাই K1 ব্যবহার করে। Inventory-তে আছে তিনটি ব্যবহারকারী: orders, billing, notify. দৈনিক call ৯,০০০।
- K2 তৈরি। Vendor-এ দ্বিতীয় key বানানো হলো, vault-এ রাখা হলো। দুটিই বৈধ। কেউ এখনো বদলায়নি, তাই K1-এ call আগের মতোই ৯,০০০।
- orders বদলাল। ৪,০০০ call K2-তে গেল। K1-এ বাকি ৯,০০০ − ৪,০০০ = ৫,০০০। K1 বৈধ থাকায় বাকিরা নিরাপদ।
- billing আর notify বদলাল। আরও ৪,৬০০ সরে গেল। K1-এ থাকার কথা শূন্য, কিন্তু আছে ৫,০০০ − ৪,৬০০ = ৪০০।
- Log-এর দিকে তাকানো। এই ৪০০ call কার? Vendor-এর usage log দেখাল report-job, যা inventory-তে ছিল না। এখানে অনুমানে K1 বন্ধ করলে ওই কাজ ভাঙত। Inventory ঠিক করা হলো, মালিক লেখা হলো।
- report-job বদলাল। এবার K1-এ call শূন্য। একটি পুরো ব্যবসায়িক চক্র অপেক্ষা করুন, কারণ মাসে একবার চলা কাজও থাকতে পারে।
- K1 বন্ধ, মোছা নয়। বন্ধ করা ফেরানো যায়। ব্যর্থ call শূন্য থাকছে কি না নজর রাখুন।
- K1 মোছা। নিরাপদ সময় পরে K1 মুছে দেওয়া হলো। পরের rotation-এর তারিখ inventory-তে লেখা হলো। পারলে পরেরবার প্রতিটি app-এর আলাদা key নিন, যাতে এক key ফাঁসে সবাইকে বদলাতে না হয়।
কোডের ভেতরের secret ধরা
Secret কোডে ঢুকলে history-তে থেকে যায়, মুছলেও। পর্ব ১৪-এ এটি দশটি সাধারণ ভুলের একটি। স্তরে স্তরে ঠেকানোর পুরো পথ, pre-commit থেকে push protection, Git নিরাপত্তা পর্বে আছে। Secret scanning ফাইলের ভেতর পরিচিত secret-এর আকৃতি খোঁজে। নিচের খেলনা scanner নিজের বানানো ফাইলে শুধু নকল example-token খোঁজে। কোনো আসল credential বা আসল repository-তে হাত দেয় না।
# Toy secret scanner. The block makes its own files; every value is fake.
dir=$(mktemp -d)
trap 'rm -rf "$dir"' EXIT
cd "$dir" || exit 1
mkdir app tests
cat > app/config.py <<'CFG'
DB_HOST = "db.example.com"
API_TOKEN = "example-token-7f3a91"
CFG
cat > app/deploy.sh <<'CFG'
curl -H "X-Key: example-token-c04e22" https://api.example.com/v1/ping
CFG
cat > app/README.md <<'CFG'
Read API_TOKEN from the vault. Never paste the value here.
CFG
cat > tests/test_login.py <<'CFG'
password = "not-a-real-password"
CFG
echo "--- rule 1: known token shape"
grep -rnE 'example-token-[0-9a-f]{6}' app tests |
sed -E 's/(example-token-)[0-9a-f]{6}/\1******/'
echo "--- rule 2: generic password assignment"
grep -rnE 'password *= *"' app tests
hits=$(grep -rlE 'example-token-[0-9a-f]{6}' app tests | wc -l)
echo "--- files with a token: $hits"
if [ "$hits" -gt 0 ]; then
echo "RESULT: block the merge, then revoke and rotate"
fiRule 1 ধরল দুটি ফাইল: app/config.py:2 আর app/deploy.sh:1. আউটপুটে মানটি example-token-****** হয়ে এসেছে। এটি জরুরি অভ্যাস: scanner-এর report যেন নিজেই secret ফাঁস না করে। README.md-তে API_TOKEN শব্দটি আছে, কিন্তু মান নেই, তাই ধরা পড়েনি। Rule 2 ধরল tests/test_login.py:1, যা আসলে পরীক্ষার ভুয়া মান, অর্থাৎ একটি false positive. আকৃতি-ভিত্তিক নিয়মে ভুল কম, কিন্তু অজানা আকৃতি মিস করে। সাধারণ নিয়ম বেশি ধরে, ভুলও বেশি করে। শেষ লাইনটি ক্রম মনে করায়: আগে revoke, পরে কোড পরিষ্কার। ফাঁস হওয়া secret মুছলেই নিরাপদ হয় না।
৮ · Break-glass আর privileged কাজের নজরদারি
সব JIT যদি একটি login সিস্টেমের ওপর নির্ভর করে, আর সেটিই বন্ধ হয়ে যায়? তখন admin-ও ঢুকতে পারেন না, অথচ ঠিক তখনই admin দরকার। পর্ব ৩-এর break-glass এই সমস্যার সমাধান। লিফটের পাশে কাচে ঢাকা ফায়ার অ্যালার্মের মতো: সবসময় হাতের নাগালে, কিন্তু ভাঙলেই সবাই জানে।
Microsoft-এর emergency access নির্দেশিকা (সিস্টেমভেদে বিবরণ আলাদা, তবে ধারণা সাধারণ) থেকে কয়েকটি শিক্ষা:
- অন্তত দুটি account, যাতে একটির সমস্যায় অন্যটি চলে
- স্বাভাবিক login ব্যবস্থার ওপর নির্ভর নয়, আর MFA-র পদ্ধতিও সাধারণ admin-এর থেকে আলাদা
- FIDO2 security key-এর মতো phishing-প্রতিরোধী পদ্ধতি, আলাদা নিরাপদ জায়গায় রাখা
- প্রতিটি login-এ alert
- অন্তত ৯০ দিনে একবার মহড়া, আর অনুমোদিত মানুষের তালিকা যাচাই
- ব্যবহারের পরে সবসময় পর্যালোচনা
| সময় | |
| সিল | |
| Account | |
| Alert | |
| দায়িত্বে |
- ০২:১০ — জরুরি অবস্থা। Login সেবা বন্ধ। On-call admin ঢুকতে পারছেন না, আর সাধারণ পথ চেষ্টা করে ব্যর্থ। ফোনে দায়িত্বপ্রাপ্ত ম্যানেজারকে জানালেন। সিল এখনো অক্ষত।
- ০২:১৪ — সিল ভাঙা। দুজন মিলে নিরাপদ বাক্স থেকে security key বের করলেন। রেজিস্টার খাতায় সময়, নাম আর কারণ লেখা হলো। দুজন থাকা separation of duties-এর ছোট রূপ।
- ০২:১৬ — Login, সাথে alert. নির্দিষ্ট workstation থেকে login হলো। সাথে সাথে alert গেল নিরাপত্তা দল আর সব admin-এর কাছে। জরুরি account-এর নিজের সেই alert চুপ করানোর ক্ষমতা নেই।
- ০২:২০ — শুধু দরকারি কাজ। দ্বিতীয়জন পাশে থেকে দেখছেন, আর প্রতিটি কাজ লেখা হচ্ছে। লক্ষ্য শুধু login সেবা ফেরানো। অন্য কোনো “সুযোগে সেরে নেওয়া” কাজ নয়।
- ০৩:০৫ — Logout. সাধারণ পথ ফিরেছে, তাই সবাই আবার সাধারণ পথে। জরুরি account থেকে বেরিয়ে আসা হলো।
- পরের দিন — আবার সিল। Password থাকলে বদলানো হলো, key যাচাই করে নতুন নম্বরের সিলে রাখা হলো। পুরোনো সিল নম্বর খাতায় বাতিল।
- তিন দিনের মধ্যে — পর্যালোচনা। তিনটি প্রশ্ন: এটি মহড়া, আসল জরুরি অবস্থা, না অপব্যবহার? Log আর খাতা কি মেলে? সাধারণ পথ কেন ব্যর্থ হলো, আর সেটি কীভাবে ঠিক হবে? উত্তর লেখার পর alert-টি মীমাংসিত হিসেবে বন্ধ হলো।
কী কী নজরে রাখবেন
Privileged কাজের log তখনই কাজের, যখন সেটি admin-এর নাগালের বাইরে থাকে আর কেউ তা দেখে। পুরো log-এর পরিকল্পনা পর্ব ৫৫ আর ৫৬-এ পাবেন। এখানে ন্যূনতম তালিকা:
| ঘটনা | কেন সন্দেহজনক | প্রথম কাজ |
|---|---|---|
| Break-glass login | স্বাভাবিক সময়ে হওয়ারই কথা নয় | কাউকে ফোন করে নিশ্চিত হওয়া |
| নতুন admin বা role যোগ | Persistence-এর চিহ্ন হতে পারে | টিকিট মিলিয়ে দেখা |
| JIT ছাড়া privileged কাজ | নিয়ন্ত্রণের পাশ দিয়ে যাওয়া পথ | পথটি খুঁজে বন্ধ করা |
| মানুষের login-এ service account | OWASP-এর Human Use of NHI | Credential বদল, মালিককে জিজ্ঞাসা |
| নতুন key বা token তৈরি | অধিকার টিকিয়ে রাখার চেষ্টা হতে পারে | কার grant-এর সময় হলো দেখা |
| Log বন্ধ বা মোছা | প্রমাণ নষ্টের চেষ্টা হতে পারে | Incident হিসেবে গণ্য করা |
| ঘুমন্ত account হঠাৎ সচল | পুরোনো credential-এর ব্যবহার | Account থামিয়ে যাচাই |
প্রথম সারিটি একটি Sigma নিয়মে লেখা যায়। নিচের উদাহরণে account-এর নাম আর field কাল্পনিক। আপনার log-এর field অনুযায়ী বদলে নিতে হবে:
title: Break-glass account sign-in
id: 6f1e3b7a-2c44-4d10-9b55-0a7c3e5d1f20
status: experimental
description: Any sign-in by an emergency account must reach a human at once.
logsource:
category: authentication
detection:
selection:
user:
- bg-admin-1
- bg-admin-2
condition: selection
falsepositives:
- Announced quarterly drill
level: critical৯ · ৫০ জনের প্রতিষ্ঠান কোথা থেকে শুরু করবে
PAM product অনেক প্রতিষ্ঠানের জন্যই বড় ও ব্যয়বহুল। সেটি ছাড়াও বড় অংশ করা যায়। নিচের ধাপগুলো একটি ৫০ জনের কাল্পনিক প্রতিষ্ঠানের জন্য সাজানো, যেখানে নিরাপত্তার পূর্ণকালীন লোক হয়তো নেই। সময়গুলো অনুমান, আপনার অবস্থা অনুযায়ী বদলাবে। অগ্রাধিকারের ক্রমটিই আসল।
| সময় | কাজ | যা দিয়ে সম্ভব |
|---|---|---|
| সপ্তাহ ১ | মানুষ ও NHI-এর তালিকা, মালিকসহ; ঘুমন্ত account বন্ধ | একটি সুরক্ষিত spreadsheet |
| সপ্তাহ ২ | সব admin-এ phishing-প্রতিরোধী MFA, অন্তত security key | বিদ্যমান login সেবার সুবিধা |
| সপ্তাহ ৩ | আলাদা admin account, email ছাড়া | বিদ্যমান directory |
| সপ্তাহ ৪ | Shared password দলের password manager-এ, কর্মী গেলে বদলের নিয়ম | Password manager |
| মাস ২ | দুটি break-glass, সিল, alert, প্রথম মহড়া | Security key, খাম, নিরাপদ বাক্স |
| মাস ২ | Secret scanning, প্রথমে pre-commit ও CI-তে | Open source scanner |
| মাস ৩ | ছোট sudo নিয়ম, root login বন্ধ, SSH certificate | OS-এর sudo আর OpenSSH |
| মাস ৩ | Log একটি আলাদা জায়গায়, ৫টি ন্যূনতম alert | Central log সার্ভিস বা সংগ্রহ-সার্ভার |
| মাস ৪ | ছোট JIT: টিকিট, অনুমোদন, সময়-সীমিত group বা role | Cloud-এর সময়-সীমিত role, script, টিকিট সিস্টেম |
| প্রতি ৩ মাসে | Access review আর break-glass মহড়া | Calendar আর একটি লিখিত checklist |
Manual JIT-এর দুর্বলতা হলো “পরে সরিয়ে দেব”। সরানোর কাজ মানুষের স্মৃতিতে রাখবেন না। Cloud-এর সময়-সীমিত assignment, ১ ঘণ্টার SSH certificate বা নির্ধারিত script, এমন কিছু ব্যবহার করুন, যা নিজে থেকে শেষ হয়। পাশাপাশি যে ধাপ আপনি এখনো নেননি, সেটিকে পর্ব ২-এর residual risk হিসেবে লিখে রাখুন।
পরীক্ষা ও ইন্টারভিউতে:
- Standing privilege কী? কাজ থাকুক বা না থাকুক, সবসময় চালু থাকা অধিকার।
- JIT আর JEA-র পার্থক্য? JIT সময় সীমিত করে, JEA পরিধি সীমিত করে।
- Break-glass account থেকে JIT কেন সরানো হয় না? JIT ব্যবস্থা ব্যর্থ হলেও এটি কাজ করতে হয়; তাই সুরক্ষা আসে সিল, alert আর মহড়া থেকে।
- Secret ফাঁস হলে আগে কী? Revoke ও rotate, তারপর কোড পরিষ্কার আর log তদন্ত।
- SSH certificate-এর লাভ? মেয়াদ নিজেই লেখা, server-এ key ছড়াতে হয় না, log-এ পরিচয় পরিষ্কার।
১০ · AI-এর যুগে privileged access
AI এখন সাহায্যকারীর চেয়ে বেশি কিছু। AI agent নিজেই command চালায়, cloud-এ কাজ করে। অর্থাৎ সে নিজেও একটি non-human identity, আর privileged হতে পারে। তাকে admin অধিকার দেওয়া মানে prompt injection-এর মতো ঝুঁকিকে সরাসরি production-এ পৌঁছে দেওয়া, যা পর্ব ৫১-এ আসবে। Agent-কেও তাই least privilege, স্বল্পমেয়াদি credential, audit আর বিপজ্জনক কাজে মানুষের অনুমোদন লাগে।
| AI-এর সাধারণ ভুল | কেন বিপজ্জনক | যেভাবে যাচাই করবেন |
|---|---|---|
Error সারাতে NOPASSWD: ALL বা chmod 777 | এক লাইনে পুরো root | নিজে least privilege ঠিক করুন, sudo -l দিয়ে দেখুন |
Cloud policy-তে * বসানো | Blast radius পুরো account | Policy simulator, log দেখে অধিকার ছাঁটা |
| উদাহরণে আসল চেহারার secret কোডে বসানো | নকল ভেবে আসল মান রয়ে যায় | Scanner চালান, secret-এর জায়গায় vault-এর নাম |
| নেই এমন sshd option বা পুরোনো নিয়ম | Service বন্ধ হতে পারে, বা নিয়মটি কাজই করে না | sshd -t, visudo -c, আসল manual |
পুরোনো crypto (MD5, ECB) বা verify=False | Error সরে, কিন্তু সুরক্ষাও সরে | পর্ব ১৪-এর তালিকায় মেলান |
| বানানো standard নম্বর বা CVE | ভুল নথি, ভুল সিদ্ধান্ত | মূল উৎসে খুঁজে পড়ুন |
| Alert দেখে অতিরিক্ত আত্মবিশ্বাসে “স্বাভাবিক” বলা | আসল ঘটনা চাপা পড়ে | মানুষের সিদ্ধান্ত, log মিলিয়ে দেখা |
AI-কে config দেখানোর আগে আসল hostname, user আর secret সরান। পর্যালোচনা চান, আর উত্তর নিজে পরীক্ষা করুন:
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন, তারপর “→ উত্তর” চাপুন।
প্র ০১Colonial Pipeline-এর password শক্ত ছিল বলে জানা যায়। তাহলে সেখানে আসল ব্যর্থতা কোথায়?
২০২১ সালের জুনে প্রতিষ্ঠানটির প্রধান নির্বাহী মার্কিন সিনেটে বলেন, ঢোকার পথ ছিল একটি পুরোনো VPN profile, যেখানে MFA ছিল না। তিনি জোর দিয়ে বলেন, password-টি সহজ ছিল না। এটি কীভাবে ফাঁস হলো, তা তখনও নিশ্চিত জানা যায়নি। প্রতিষ্ঠানের লিখিত বিবৃতি অনুযায়ী profile-টি ব্যবহারের জন্য রাখা ছিল না, তবু সেটি বন্ধও হয়নি।
এখান থেকে তিনটি শিক্ষা নেওয়া যায়। প্রথমত, password-এর শক্তি শুধু অনুমান আটকায়। ফাঁস, পুনর্ব্যবহার বা চুরি আটকায় না। MFA ঠিক এই ফাঁকের জন্যই, আর phishing-প্রতিরোধী MFA আরও বেশি। দ্বিতীয়ত, যে পুরোনো পথ আর কেউ ব্যবহার করে না, সেটি বন্ধ করাই সবচেয়ে সস্তা নিয়ন্ত্রণ। অথচ “কেউ ব্যবহার করে না” বলে সেটিই নজরের বাইরে থাকে। তৃতীয়ত, সুরক্ষার গড় নয়, দুর্বলতম পথই বেশি গুরুত্বপূর্ণ। আপনার ৯৯টি পথে MFA থাকলে আক্রমণকারীর প্রয়োজন শুধু শততমটি।
তাই প্রতিরোধের ক্রমটি সহজ: সব প্রবেশপথ আর account-এর তালিকা, নিয়মিত যন্ত্র দিয়ে যাচাই, ব্যবহার না হওয়া account বন্ধ, আর সব দূরবর্তী প্রবেশে MFA. Detection-এর দিক থেকে ঘুমন্ত account হঠাৎ সচল হলে alert পাওয়া উচিত। উল্লেখ্য, এই ঘটনাটি নিজে ransomware হিসেবে পরিচিত, কিন্তু ব্যবসা থামানোর সিদ্ধান্ত আর ক্ষতির আলোচনা আলাদা। এখানে আমরা শুধু প্রবেশপথের শিক্ষাটুকু নিচ্ছি। নিজের প্রতিষ্ঠানে একটি সহজ প্রশ্ন দিয়ে পরীক্ষা করুন: গত তিন মাসে ব্যবহার হয়নি এমন কতগুলো দূরবর্তী প্রবেশের account আছে, আর সেগুলোর দায়িত্ব কার? উত্তর দিতে না পারাটাই একটি বড় ফাঁক।
মূল উপলব্ধি: নিরাপত্তা শুরু হয় জানা থেকে। যে account তালিকায় নেই, তার ওপর কোনো নিয়ন্ত্রণই কাজ করে না, তা সেটি যত শক্তিশালীই হোক।
প্র ০২Admin-কে সন্দেহ করা কি অপমান? ২০১৩ সালের NSA নথি ফাঁসের পর two-person rule কেন এলো?
২০১৩ সালে একজন ঠিকাদার system administrator-এর মাধ্যমে মার্কিন NSA-র বিপুল নথি বাইরে আসে। প্রকাশিত বিবৃতি ও খবর অনুযায়ী, সংস্থাটি পরে সংবেদনশীল কিছু কাজে দুজনের উপস্থিতি, অর্থাৎ two-person rule, চালু করার কথা জানায়, আর system administrator-এর সংখ্যা কমানোর পরিকল্পনাও জানায়। ঘটনাটির রাজনৈতিক ও নৈতিক দিক নিয়ে মতভেদ আছে। এখানে আমরা শুধু নিয়ন্ত্রণের শিক্ষাটি দেখছি: সবচেয়ে সুরক্ষিত প্রতিষ্ঠানেও একজন admin-এর হাতে অতিরিক্ত অধিকার জমা হতে পারে।
দুজনের নিয়ম কোনো ব্যক্তিকে সন্দেহ করার ঘোষণা নয়। এটি বরং admin-কেও রক্ষা করে। পরমাণু অস্ত্র নিয়ন্ত্রণে দুজনের নিয়ম বহুদিনের চর্চা। ব্যাংকের ভল্টেও তাই। কারণ প্রশ্ন “মানুষটি ভালো কি না” নয়, প্রশ্ন হলো “একজনের একটি ভুল বা একজনের চুরি যাওয়া account কতদূর যেতে পারে”। Saltzer ও Schroeder ১৯৭৫ সালেই separation of privilege-কে নকশার নীতি হিসেবে লিখেছিলেন।
Admin-এর account চুরি হলে আক্রমণকারী আর admin আলাদা করা কঠিন। কোনো ঘটনা ঘটলে নিয়ন্ত্রণ থাকা admin-কে প্রমাণ দেয় যে কাজটি তিনি করেননি। তাই ভালো সংস্কৃতিতে নিয়মটি ব্যক্তিকে নয়, ব্যবস্থাকে লক্ষ্য করে। দোষারোপ নয়, মানুষের অধিকার আর দায়িত্বের স্পষ্টতা। দাম হলো গতি কমে, আর ছোট দলে দ্বিতীয় মানুষ পাওয়াই কঠিন। ছোট প্রতিষ্ঠানে তাই সবচেয়ে ঝুঁকির কাজেই শুধু দুজনের নিয়ম রাখা যায়, আর বাকি জায়গায় পরে পর্যালোচনা ও আলাদা log দিয়ে পূরণ করা যায়।
মূল উপলব্ধি: নিয়ন্ত্রণ মানুষের চরিত্রের রায় নয়। এটি এমন ব্যবস্থা, যেখানে একজনের ভুল, চাপ বা হারানো account পুরো প্রতিষ্ঠানের ক্ষতিতে পরিণত হয় না।
প্র ০৩Okta আর Cloudflare-এর ২০২৩ সালের ঘটনা non-human identity সম্পর্কে কী শেখায়?
Okta-র প্রকাশিত root cause প্রতিবেদন (নভেম্বর ২০২৩) অনুযায়ী, তাদের customer support সিস্টেমে অনুপ্রবেশে একটি service account ব্যবহৃত হয়। সেই account-এর username ও password একজন কর্মীর ব্যক্তিগত Google account-এ সেভ হয়ে গিয়েছিল। কর্মীটি প্রতিষ্ঠানের laptop-এ Chrome-এর ব্যক্তিগত profile-এ লগইন করেছিলেন। Okta-র মতে সবচেয়ে সম্ভাব্য পথ ছিল সেই ব্যক্তিগত account বা যন্ত্রটির ঝুঁকিতে পড়া। Okta পরে যে ব্যবস্থা নেয়, তার মধ্যে আছে account বন্ধ করা, ব্যক্তিগত Google profile বন্ধ করা আর নজরদারির নিয়ম যোগ করা।
শিক্ষাটি OWASP-এর Human Use of NHI-এর সাথে হুবহু মেলে। Service account-এর password যদি মানুষের ব্রাউজারে ঢোকে, তাহলে সেটি মানুষের সব দুর্বলতা পেয়ে যায়, অথচ MFA-র মতো মানুষের সুরক্ষা পায় না। সমাধান হলো service account-এ interactive login বন্ধ করা, আর সম্ভব হলে password-এর বদলে workload identity ব্যবহার করা।
Cloudflare তাদের ২০২৩ সালের Thanksgiving ঘটনার প্রকাশিত পর্যালোচনায় জানায়, Okta ঘটনার পর তারা হাজারো credential বদলালেও একটি service token আর তিনটি service account বদলায়নি। তারা ভুলভাবে ধরে নিয়েছিল এগুলো অব্যবহৃত। সেই চারটি credential-ই পরে প্রবেশের পথ হয়। এটিই rotation-এর কঠিন সত্য: হাজারটির মধ্যে চারটি বাদ পড়লেই যথেষ্ট। “অব্যবহৃত” ধারণা log দিয়ে যাচাই করতে হয়, আর সত্যিই অব্যবহৃত হলে বাতিল করতে হয়, রেখে দেওয়া নয়। দুটি ঘটনা মিলিয়ে একটি বাস্তব অভ্যাস পাওয়া যায়: বড় rotation-এর শেষে একটি তালিকা ধরে প্রতিটি সারি “বদলানো হয়েছে” বা “বাতিল হয়েছে” বলে চিহ্নিত করুন, আর পুরোনো মান দিয়ে login-এর চেষ্টায় alert রাখুন। এতে বাদ পড়ে যাওয়া সারি নিজেই চোখে পড়ে।
মূল উপলব্ধি: NHI-এর কাছে ছুটি নেই, MFA নেই, আর কেউ চলে গেলে সে নিজে থেকে যায় না। তাই তালিকা, মালিক আর প্রমাণ-ভিত্তিক অবসরের ব্যবস্থাই তার আসল সুরক্ষা।
প্র ০৪সব secret এক vault-এ রাখলে কি একটি বড় একক ঝুঁকিই তৈরি হয় না?
হ্যাঁ, হয়। এটি একটি সত্যিকারের বিনিময়। Secret ছড়ানো থাকলে একটি জায়গা ফাঁস হলে অল্প ক্ষতি, কিন্তু কোথায় কী আছে কেউ জানে না। এক জায়গায় থাকলে সুরক্ষা, log আর rotation সহজ, কিন্তু সেই জায়গা ফাঁস হলে ক্ষতি বিশাল। ২০২৩ সালের জানুয়ারিতে CI সেবা CircleCI তাদের সব গ্রাহককে secret বদলাতে বলে। তাদের প্রকাশিত ঘটনা-প্রতিবেদন অনুযায়ী, একজন প্রকৌশলীর laptop-এ malware একটি বৈধ SSO session চুরি করে, আর সেখান থেকে production-এর একটি অংশে পৌঁছে গ্রাহকদের সংরক্ষিত secret, token আর key বের করে নেওয়া হয়। ডেটা encrypted ছিল, কিন্তু চলমান process থেকে encryption key-ও তুলে নেওয়া হয়। তারা যে শুরুতেই সবাইকে rotate করতে বলতে পেরেছে, সেটিও শেখার মতো।
তবুও বেশিরভাগ প্রতিষ্ঠানে কেন্দ্রীয় পথই ভালো। কারণ একটি জায়গা রক্ষা করা অনেক জায়গা রক্ষার চেয়ে বেশি সম্ভব, আর ফাঁস ঘটলে “কী কী ফাঁস হয়েছে” উত্তর দেওয়া যায়। তবে কেন্দ্রীকরণ করলে এর ঝুঁকি কমানোর কাজও করতে হবে।
- স্তর ভাগ করুন: Production আর development-এর vault বা অন্তত namespace আলাদা
- দামি secret-কে বাইরে রাখুন: Root key HSM-এ, break-glass secret vault-এর ওপর নির্ভর নয়
- Vault-এর admin-কে privileged ধরুন: JIT, MFA, audit, আলাদা log
- স্বল্পমেয়াদি secret: Dynamic হলে চুরি হওয়া মান দ্রুত অকেজো
- পুনরুদ্ধার অনুশীলন: Vault বন্ধ হলে কী হবে, তা মহড়ায় দেখুন, কারণ এটি এখন একক ব্যর্থতার বিন্দু
মূল উপলব্ধি: ঝুঁকি শেষ হয় না, স্থান বদলায়। কেন্দ্রীকরণ অনিয়ন্ত্রিত অনেক ঝুঁকিকে নিয়ন্ত্রিত একটি বড় ঝুঁকিতে বদলে দেয়, আর সেটির সুরক্ষায় তখন আসল মনোযোগ দেওয়া যায়।
প্র ০৫Zero standing privilege কি সত্যিই শূন্য হতে পারে? Microsoft-এর ২০২৪ সালে প্রকাশিত পুরোনো test account-এর ঘটনা কী বলে?
পুরোপুরি শূন্য সাধারণত সম্ভব নয়। কেউ না কেউ JIT ব্যবস্থাটি চালায়, broker-এর নিজের অধিকার আছে, আর break-glass ইচ্ছা করেই standing থাকে। Microsoft-এর নির্দেশিকা আরও একটি ফাঁদ দেখায়: সব admin role “eligible” করে রাখলে আর approver না থাকলে পুরো সিস্টেম প্রশাসনের বাইরে চলে যেতে পারে। তাই জরুরি account-কে সেখানে স্থায়ী active রাখতে বলা হয়, সাথে কঠোর নজরদারি। অর্থাৎ লক্ষ্য হলো standing অধিকার যতটা সম্ভব কম রাখা, আর যা থেকে যায় তা জেনেশুনে, তালিকাভুক্ত করে, নজরে রাখা।
এবার পুরোনো জিনিসের ঝুঁকি দেখুন। Microsoft ২০২৪ সালের জানুয়ারিতে প্রকাশিত নির্দেশনায় Midnight Blizzard নামে একটি দলের অনুপ্রবেশ বর্ণনা করে। সেখানে বলা হয়, MFA ছাড়া একটি পুরোনো non-production test tenant account থেকে শুরু, আর সেখান থেকে একটি পুরোনো test OAuth application ব্যবহৃত হয়, যার corporate পরিবেশে উঁচু অধিকার ছিল। মানে “test”, “legacy” আর “non-production” শব্দগুলো কোনো সুরক্ষা নয়। একটি সিস্টেম কতটা privileged, তা নাম দিয়ে নয়, সে কোথায় পৌঁছাতে পারে তা দিয়ে ঠিক হয়।
তাই standing অধিকারের হিসাবে শুধু মানুষ গুনলে চলবে না। OAuth app, পুরোনো tenant, CI token আর third-party integration-ও গুনতে হবে। প্রতিটির জন্য তিনটি প্রশ্ন: এটি কী কী পড়তে বা বদলাতে পারে? এর মালিক কে? আজ বন্ধ করলে কী ভাঙবে? শেষ প্রশ্নের উত্তর কেউ না জানলে, সেটিই সবচেয়ে জরুরি কাজ। আর অধিকার সরাতে হলে অল্প অল্প করে, log দেখে, ফেরার পথ রেখে এগোতে হয়।
মূল উপলব্ধি: Zero standing privilege একটি দিকনির্দেশ, চূড়ান্ত গন্তব্য নয়। সবচেয়ে বিপজ্জনক standing অধিকার সাধারণত সেটি, যেটিকে কেউ privileged বলে গণ্যই করেনি।
অনুশীলন
হিসাব, পর্যালোচনা আর ফল অনুমান, সবই নিজের বা কাল্পনিক সিস্টেমে।
-
হিসাব করুন: একটি প্রতিষ্ঠানে ১০ জন admin আছেন, সবার standing অধিকার। JIT-এ প্রতিজন সপ্তাহে ৪ বার, প্রতিবার ৩০ মিনিট অধিকার নেবেন। বছরে ৫২ সপ্তাহ আর ৩৬৫ দিন ধরুন। আগে ও পরে privileged ঘণ্টা কত? হ্রাস কত শতাংশ?
আগে: ১০ × ৮,৭৬০ = ৮৭,৬০০ ঘণ্টা। পরে: ১০ × ৪ × ৫২ × ০.৫ = ১,০৪০ ঘণ্টা। অনুপাত ১,০৪০ ÷ ৮৭,৬০০ ≈ ০.০১১৯, তাই হ্রাস প্রায় ৯৮.৮%. এটি সময়ের হ্রাস, ঝুঁকির সমান হ্রাস নয়। Grant চলার সময়ের আক্রমণ এখনো সম্ভব।
-
পর্যালোচনা করুন: একটি কাল্পনিক server-এ এই দুটি নিয়ম আছে:
%devs ALL=(ALL) NOPASSWD: ALLএবংdeploy ALL=(root) NOPASSWD: /usr/bin/vim /etc/nginx/nginx.conf. প্রতিটির সমস্যা বলুন, আর নিরাপদ নকশা দিন।প্রথমটি: Password ছাড়াই পুরো root, তাই একজন developer-এর laptop দখল মানেই server দখল। সমাধান:
NOPASSWDবাদ,ALL-এর বদলে নির্দিষ্টCmnd_Alias, আর production-এ developer-এর জন্য JIT.দ্বিতীয়টি: Editor-এর ভেতর থেকে অন্য command চালানো যায়, ফলে “শুধু একটি ফাইল” আসলে পুরো root হতে পারে। সমাধান:
sudoeditব্যবহার, অথবা ভালো হয় deploy pipeline থেকে যাচাই করা config বসানো, যাতে হাতে সম্পাদনাই না লাগে। তারপরnginx -tদিয়ে যাচাই আরsystemctl reload nginx-এর সীমিত অধিকার। -
ফল অনুমান করুন: JIT broker-এর নিয়ম: approver ও অনুরোধকারী এক হলে DENY, ৬০ মিনিটের বেশি হলে DENY, মেয়াদ শেষের মুহূর্তে অধিকার সরে যায়। এই ক্রমে কী ঘটবে? (ক) t=5-এ sohel নিজে অনুমোদন করে ৩০ মিনিট চাইলেন। (খ) t=6-এ sohel, tania-র অনুমোদনে ৪০ মিনিট চাইলেন। (গ) t=45-এ sohel ব্যবহার করলেন। (ঘ) t=46-এ sohel ব্যবহার করলেন। Audit-এ মোট কয়টি লাইন হবে?
(ক) DENY, self-approval. (খ) GRANT, শেষ t=46. (গ) t=45 < 46, তাই ALLOW. (ঘ) t=46-এ আগে EXPIRE লেখা হয়, তারপর BLOCK. মোট ৫টি লাইন: DENY, GRANT, ALLOW, EXPIRE, BLOCK. উপরের সিমুলেটরে শেষের
requestআরuseলাইনগুলো বদলে এটি মিলিয়ে নিতে পারেন। -
নিজের সিস্টেমে দেখুন: নিজের পরীক্ষার Linux-এ
sudo -lচালান, আর~/.ssh/authorized_keys-এ কতটি key আছে গুনুন। তারপর নিজের ছোট প্রকল্পের জন্য একটি কাল্পনিক NHI তালিকা বানান: নাম, মালিক, উদ্দেশ্য, শেষ rotation, কে পড়ে। কোন সারিগুলো আপনাকে চিন্তায় ফেলল?sudo -lবলে আপনি কী কী চালাতে পারেন।(ALL : ALL) ALLদেখলে আপনি কার্যত root.authorized_keys-এ কোনো key-এর উৎস মনে না থাকলে সেটি নিজেই একটি finding. সাধারণত তালিকায় দেখা যায় পুরোনো CI token, মালিকহীন API key, আর “শুধু পরীক্ষার জন্য” বানানো অথচ production-এ পৌঁছায় এমন key. মান সরিয়ে শুধু নাম লিখবেন, তালিকায় কখনো আসল secret নয়।
নিজেকে যাচাই করুন
ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।
ক্রমএকটি just-in-time grant-এর ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)
- কারণ আর সময় লিখে অনুরোধ
- যোগ্যতা, সীমা আর MFA যাচাই
- অন্য একজনের অনুমোদন
- নির্দিষ্ট মেয়াদের অধিকার চালু
- মেয়াদ শেষে অধিকার নিজে থেকে বন্ধ
- Log আর টিকিট মিলিয়ে পর্যালোচনা
“Standing privilege” বলতে কী বোঝায়?
- শুধু দাঁড়িয়ে থেকে অফিসের যন্ত্রে করা login
- কাজ থাকুক বা না থাকুক, সবসময় চালু থাকা উঁচু অধিকার
- নির্দিষ্ট সময়ের জন্য অনুমোদিত অধিকার
- শুধু পড়ার অনুমতি
৪ জন admin-এর standing অধিকার ছিল। JIT-এ প্রতিজন সপ্তাহে ৫ বার ১ ঘণ্টা করে অধিকার নেন। বছরে ৫২ সপ্তাহ ও ৩৬৫ দিন ধরলে privileged ঘণ্টা আগে ও পরে কত?
- ৮,৭৬০ থেকে ২৬০
- ৩৫,০৪০ থেকে ৫২০
- ৩৫,০৪০ থেকে ১,০৪০
- ৩৫,০৪০ থেকে ১,৪৬০
Session brokering-এর প্রধান সুবিধা কোনটি?
- Admin target-এর password না জেনেই কাজ করতে পারেন, আর সব session এক পথে যায়
- Session চলাকালে সব ভুল কাজ নিজে থেকে আটকে যায়
- Broker থাকলে আর MFA বা log লাগে না
- Break-glass account-এর দরকার শেষ হয়ে যায়
৯০ দিন পরপর rotation হওয়া একটি secret নীরবে ফাঁস হলো। ফাঁসের সময় চক্রের যেকোনো জায়গায় সমান সম্ভাবনায় পড়ে, আর চোর নিজের জন্য নতুন পথ বানায়নি। চুরি করা secret গড়ে আর সবচেয়ে খারাপ ক্ষেত্রে কতদিন কাজ করবে?
- গড়ে ৯০ দিন, সবচেয়ে খারাপ ৯০ দিন
- গড়ে ৯০ দিন, সবচেয়ে খারাপ ১৮০ দিন
- গড়ে ০ দিন, কারণ rotation সব আটকায়
- গড়ে ৪৫ দিন, সবচেয়ে খারাপ ৯০ দিন
Break-glass account সম্পর্কে কোন কথাটি সবচেয়ে সঠিক?
- প্রতিদিনের জরুরি কাজের জন্য এটি সবার হাতের কাছে রাখা ভালো
- সাধারণ login ব্যবস্থার ওপর নির্ভর করে না; প্রতিটি ব্যবহারে alert, পর্যালোচনা আর নিয়মিত মহড়া লাগে
- একবার বানিয়ে আর কখনো পরীক্ষা করা উচিত নয়
- এর login log রাখার দরকার নেই, কারণ এটি খুব কম ব্যবহৃত হয়
Repository-তে একটি production API key পাওয়া গেল। প্রথম কাজ কোনটি হওয়া উচিত?
- ফাইল থেকে key মুছে আরেকটি commit করা, ব্যস
- Repository private করে দিয়ে key একই রাখা
- Key বাতিল ও বদলের কাজ শুরু করা, তারপর ব্যবহারের log তদন্ত
- পরের নিয়মিত rotation-এর জন্য অপেক্ষা করা
দীর্ঘস্থায়ী SSH key-এর তুলনায় ১ ঘণ্টার SSH certificate-এর একটি আসল ঝুঁকি কোনটি?
- CA-র private key একটি অত্যন্ত দামি একক লক্ষ্য হয়ে যায়
- Certificate-এর মেয়াদ কখনো শেষ হয় না
- কে login করল তা log-এ দেখা যায় না
- প্রতিটি server-এ প্রতি user-এর key আলাদা বসাতে হয়
শব্দকোষ
লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন, অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:
মনে রাখুন
- Privileged account-ই সবচেয়ে দামি চাবি। মানুষ, service account, shared account, break-glass আর API key, সবই তালিকায় মালিকসহ থাকবে।
- JIT সময় কমায়, JEA পরিধি কমায়। পথ: অনুরোধ, অনুমোদন, মেয়াদ, স্বয়ংক্রিয় শেষ, audit.
- আলাদা admin account, PAW, broker আর admin-এর নাগালের বাইরের log একসাথে কাজ করে। Privileged ঘণ্টা কমা মানে পুরো ঝুঁকি কমা নয়।
- Secret থাকবে vault-এ, মেয়াদ হবে ছোট, ফাঁস হলে আগে revoke. নিজের server-এ ছোট sudo নিয়ম আর SSH certificate.
- Break-glass-এ সিল, alert, পর্যালোচনা আর ৯০ দিনে অন্তত একবার মহড়া। শুরু করতে দামি product নয়, তালিকা আর শৃঙ্খলা লাগে।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পর্ব ২১ · Network-এর ঝুঁকি — eavesdropping, spoofing, MITM আর রক্ষাপরবর্তী পর্বNetwork-এর পথে কী কী ভুল হতে পারে।
- সাইবার নিরাপত্তা · কোর্স হোম৮০টি পর্বপুরো কোর্সের রোডম্যাপ।
- Secrets ও KMS — Cloud & DevOpsগভীরে যানSecret manager, dynamic credential আর downtime ছাড়া rotation-এর পুরো কাজ।
- Git নিরাপত্তাপাশের ট্র্যাকSecret commit ঠেকানো আর হয়ে গেলে করণীয়।
- IAM policy evaluation — Cloud & DevOpsপাশের ট্র্যাকCloud-এ অনুমতির সিদ্ধান্ত কীভাবে হয়।