আমাদের পূর্ববর্তী নিবন্ধে, পরিবেশের ভেরিয়েবলের জন্য রুবিস্টের গাইড, আমরা আপনাকে দেখিয়েছি যে কীভাবে পরিবেশ পরিবর্তনশীল সিস্টেম কাজ করে এবং কিছু সাধারণ পৌরাণিক কাহিনীকে উড়িয়ে দিয়েছি। কিন্তু একজন সহায়ক পাঠক যেমন উল্লেখ করেছেন, আমরা নিরাপত্তা সম্পর্কে তেমন কিছু বলিনি৷
৷যেহেতু গোপন API কী এবং অন্যান্য মূল্যবান তথ্য সংরক্ষণের জন্য env vars ব্যবহার করা সাধারণ হয়ে উঠেছে, তাই নিরাপত্তার প্রভাব বোঝা গুরুত্বপূর্ণ। চলুন দেখে নেওয়া যাক:
সবচেয়ে খারাপ পরিস্থিতি
কল্পনা করুন যে একজন হ্যাকার আপনার সার্ভারে রুট হিসাবে বা আপনার ওয়েব অ্যাপ্লিকেশনগুলির মালিক ব্যবহারকারী হিসাবে অ্যাক্সেস পেয়েছে৷ সেক্ষেত্রে, আপনার পরিবেশের ভেরিয়েবলের সাথে আপোস করা হবে, অন্য সব কিছুর সাথে যা খুব বেশি এনক্রিপ্ট করা হয়নি।
এখানে সমাধান হল লোকেদের আপনার সার্ভারে রুট অ্যাক্সেস পাওয়া থেকে বিরত রাখা। :)
দ্য ট্রোজান হর্স
ডকের কাছে একটি গলিতে আপনার দেখা কিছু লোক আপনাকে ইমেজ ম্যাজিকের একটি বিশেষ স্যুপ-আপ সংস্করণ দিয়েছে। তিনি দাবি করেন যে এটি স্টক ইমেজ ম্যাজিকের চেয়ে দ্বিগুণ গতিতে চলবে৷
...সুতরাং আপনি তাই করেন যা কেউ করবে। আপনি উৎপাদনে এটি ইনস্টল করুন। একমাত্র সমস্যা হল এটি আপনার পরিবেশের ভেরিয়েবল চুরি করার জন্য ডিজাইন করা হয়েছে৷
৷এখানে, আমি ব্যাক-টিক্স সিনট্যাক্স ব্যবহার করে রুবি থেকে আমাদের "দূষিত" মগ্রিফাই কমান্ড চালাচ্ছি। Mogrify তারপর আমার পরিবেশের ভেরিয়েবল চুরি করে, এবং একটি কটূক্তিমূলক বার্তা প্রিন্ট করে।
এনভায়রনমেন্ট ভেরিয়েবল প্যারেন্ট প্রসেস (irb) থেকে চাইল্ড পসেস (mogrify) এ কপি করা হয়।
এটি সত্যিই একটি "হ্যাক" নয়। পরিবেশের ভেরিয়েবলগুলি এইভাবে কাজ করে। তারা পিতামাতার প্রক্রিয়া থেকে শিশু প্রক্রিয়ায় অনুলিপি করা হয়। আপনি যদি ম্যালওয়্যার চালাচ্ছেন, তাহলে তারা অন্য যেকোন অ্যাপের মতোই এনভায়রনমেন্ট ভেরিয়েবলের উত্তরাধিকারী হবে।
এটি হওয়ার জন্য দুটি উপায় রয়েছে:
-
কেউ আপনাকে আপনার টুলচেইনে একটি দূষিত সফ্টওয়্যার ইনস্টল করতে রাজি করান
৷ -
আপনার টুলচেইনের একটি "সৌম্য" অংশের একটি দুর্বলতা রয়েছে এবং আপনার পরিবেশের ভেরিয়েবলগুলি প্রকাশ করার জন্য ব্যবহার করা হয়৷
আসল সমাধান হল যে কোন একটিকে ঘটতে বাধা দিতে সক্রিয় হওয়া। কিন্তু কিছু ENV চুরিকারী দস্যু আপনার টুলচেইনে ঢুকে পড়লে ক্ষতি সীমাবদ্ধ করতে আপনি একটি সতর্কতামূলক পদক্ষেপ নিতে পারেন।
পরিবেশ স্যানিটাইজ করা
যখনই আপনি imagemagick বা অন্য কোন প্রোগ্রাম চালানোর জন্য রুবি থেকে শেল আউট করেন, সেই প্রোগ্রামটি আপনার অ্যাপের ENV-এর একটি কপি উত্তরাধিকার সূত্রে পায়। আপনার যদি ENV-তে কোন গোপনীয়তা থাকে, তবে এটি সেগুলিও পাবে। যদি না আপনি তাদের বের করে দেন।
আপনি সিস্টেম পদ্ধতিতে একটি হ্যাশ পাস করে নতুন প্রক্রিয়া তৈরি করার সময় নির্দিষ্ট পরিবেশের ভেরিয়েবলগুলিকে ওভাররাইড করতে পারেন:
রুবির সিস্টেম পদ্ধতিতে কাস্টম এনভায়রনমেন্ট ভেরিয়েবল কীভাবে পাস করবেন
আপনি শেল আউট করার সময় কোনো পরিবেশ ভেরিয়েবল পাঠানো বন্ধ করতে চাইলে, আপনি নীচের উদাহরণের মতো কিছু করতে পারেন। এখানে আমরা একটি হ্যাশ তৈরি করি যা ENV কে মিরর করে, এর সমস্ত মান শূন্যতে সেট করা হয়েছে। এটি সুন্দর নয়, কিন্তু শেল কমান্ড চালানোর সময় আমি সমস্ত env vars মুছে ফেলার একমাত্র উপায় খুঁজে পেয়েছি৷
আপনি যখন রুবি থেকে শেল কমান্ড চালান তখন কীভাবে কোনও পরিবেশের ভেরিয়েবল পাঠানো বন্ধ করবেন
শিশুকে গোসলের পানি দিয়ে বাইরে ফেলবেন না
উত্তরাধিকার হল ENV ভেরিয়েবলের সবচেয়ে দরকারী বৈশিষ্ট্যগুলির মধ্যে একটি।
ধরুন আপনাকে একটি কমান্ড চালাতে হবে যা S3 এ লিখবে। এনভায়রনমেন্ট ভেরিয়েবল ইনহেরিটেন্স মানে হল যে কমান্ডটি আপনার রুবি অ্যাপ থেকে এপিআই কীগুলিকে নির্বিঘ্নে শেয়ার করতে পারে। আপনি যদি উত্তরাধিকারের অনুমতি না দেন তবে আপনি সেই ক্ষমতা হারাবেন৷
অধ্যবসায়
প্রতিটি প্রক্রিয়ার নিজস্ব এনভায়রনমেন্ট ভেরিয়েবলের সেট রয়েছে যা প্রক্রিয়াটি মারা গেলে মারা যায়। আপনি আপনার রুবি অ্যাপে এনভায়রনমেন্ট ভেরিয়েবল সেট করতে পারেন, কিন্তু সেই অ্যাপটি ছাড়ার সাথে সাথেই সেগুলি অদৃশ্য হয়ে যাবে।
আপনি যদি রিবুট করার পরে চারপাশে লেগে থাকার জন্য একটি এনভায়রনমেন্ট ভেরিয়েবলের প্রয়োজন হয় তবে এটি কোথাও সংরক্ষণ করা দরকার। এটি কোথাও সাধারণত ফাইল সিস্টেমে থাকে৷
৷আপনার অ্যাপের গিট রেপো ব্যবহার করবেন না
আমি নিশ্চিত যে গিথুবের লোকেরা আমাদের বাকিদের মতোই সৎ, কিন্তু আপনি কি সত্যিই চান যে আপনার সোর্স কোডে অ্যাক্সেস আছে এমন প্রত্যেকে আপনার API কীগুলি পেতে এবং $10,000 AWS বিল চালাতে পারে?
গোপনের জন্য .bashrc বা .bash-প্রোফাইল ব্যবহার করা এড়িয়ে চলুন
আপনি যখন .bashrc-এর মতো ফাইলগুলিতে গোপনীয়তা সংরক্ষণ করেন, তখন আপনি সেই ব্যবহারকারী হিসাবে চালানো প্রতিটি প্রোগ্রামে পরিবেশ ভেরিয়েবল হিসাবে সেগুলি প্রেরণ করা হয়। এই প্রোগ্রামগুলির বেশিরভাগেরই আপনার গোপনীয়তা জানার দরকার নেই। তাহলে তাদের দেওয়া কেন?
শুধুমাত্র সেই প্রক্রিয়াগুলির কাছে আপনার গোপনীয়তা প্রকাশ করুন যেগুলির জন্য তাদের প্রয়োজন
আপনার HONEYBADGER_API_KEY জানার জন্য যদি আপনার Rails অ্যাপটিই একমাত্র প্রক্রিয়া হয়, তাহলে এটি শুধুমাত্র সেই প্রক্রিয়ার জন্য উপলব্ধ করা একটি ভাল ধারণা৷
বেশ কয়েকটি রত্ন রয়েছে যা আপনাকে একটি ফাইলে পরিবেশের ভেরিয়েবল যোগ করতে দেয় যা রেল শুরু হওয়ার সময় লোড হয়। এই env vars শুধুমাত্র আপনার Rails প্রক্রিয়ার জন্য উপলব্ধ, এবং এর চাইল্ড প্রসেস। The Rubyist's Guide To Environment Variables-এর নীচে ফিগারো এবং ডোটেনভ রত্নগুলির একটি বিভাগ রয়েছে৷
আপনার কনফিগারেশন ফাইল সুরক্ষিত করুন
আপনি যদি একটি কনফিগারেশন ফাইল থেকে আপনার পরিবেশ লোড করছেন, আপনি নিশ্চিত করতে চাইবেন যে এটির অনুমতিগুলি সেট করা আছে যাতে এটি শুধুমাত্র আপনার ওয়েব অ্যাপ চালানো ব্যবহারকারীর দ্বারা পাঠযোগ্য হয়৷
এখানে, আমি আমার কনফিগার ফাইলটি শুধুমাত্র সেই ব্যবহারকারীর দ্বারা পাঠযোগ্য এবং লেখার যোগ্য করে তুলছি যে এটি তৈরি করেছে। এই ক্ষেত্রে, এটি একই ব্যবহারকারী যে আমার রেল অ্যাপ্লিকেশনটির মালিক:
কনফিগারেশন ফাইলগুলিকে শুধুমাত্র সেই ব্যবহারকারীর দ্বারা পাঠযোগ্য করুন যার তাদের পড়তে হবে
যেহেতু আপনি এটিকে গিথুবে চেক করছেন না, তাই আপনাকে সার্ভারে SSH করতে হবে এবং ম্যানুয়ালি সম্পাদনা করতে হবে অথবা আপনার জন্য এটি পরিচালনা করতে শেফের মতো একটি টুল ব্যবহার করতে হবে।
যেখানে সম্ভব "ফায়ারওয়াল" তৈরি করুন
AWS সম্পর্কে সত্যিই দুর্দান্ত জিনিসগুলির মধ্যে একটি হল এটি আপনাকে অ্যাক্সেস নিয়ন্ত্রণ নীতিগুলি তৈরি করতে দেয় যা অতি দানাদার। অনেক পরিষেবা প্রদানকারীর এই ধরনের বৈশিষ্ট্য রয়েছে৷
৷ওটার মানে কি? এর মানে হল যে আপনার কাছে এপিআই কীগুলির একটি সেট থাকতে পারে যা কেবলমাত্র যার কাছে আছে তাকে S3 এ একটি একক বালতিতে আপলোড করার অনুমতি দেবে। আপনার আলাদা ক্রিয়াকলাপের জন্য আলাদা কী-পেয়ার তৈরি করা উচিত। ছবি আপলোড করার জন্য এক কী-পেয়ার। আপনার ডাটাবেস ব্যাকআপের জন্য আরেকটি। ইত্যাদি।
এইভাবে কাজ করে আপনি যে কোনো একটি নিরাপত্তা লঙ্ঘনের ক্ষতি সীমিত করতে পারেন।