আমি মনে করি আপনার প্রশ্নের অনেকগুলি বিবরণ একইভাবে প্রয়োগ করতে পারে avahi-daemon
, যা আমি সম্প্রতি দেখেছি। (আমি অন্য একটি বিশদটি মিস করতে পারি যা তার চেয়ে আলাদা)। ক্রুটে অ্যাভিহি-ডেমন চালানোর অনেক সুবিধা রয়েছে, যদি আভি-ডিমন আপোস হয়। এর মধ্যে রয়েছে:
- এটি কোনও ব্যবহারকারীর হোম ডিরেক্টরি পড়তে এবং ব্যক্তিগত তথ্যকে বিশদকরণ করতে পারে না।
- এটি / টিএমপি তে লিখিতভাবে অন্যান্য প্রোগ্রামগুলিতে বাগগুলি ব্যবহার করতে পারে না। এই জাতীয় বাগগুলির কমপক্ষে একটি সম্পূর্ণ বিভাগ রয়েছে। উদাহরণস্বরূপ https://www.google.co.uk/search?q=tmp+race+security+bug
- এটি ক্রোটের বাইরে থাকা কোনও ইউনিক্স সকেট ফাইল খুলতে পারে না, যা অন্যান্য ডিমনরা ম্যাসেজগুলি শুনে ও পড়তে পারে।
পয়েন্ট 3 বিশেষত দুর্দান্ত হতে পারে যখন আপনি ডিবিস বা অনুরূপ ব্যবহার করেন না ... আমার মনে হয় অবাহি-ডেমন ডিবিস ব্যবহার করে, তাই এটি ক্রোটের অভ্যন্তর থেকে এমনকি সিস্টেম ডিবিতে অ্যাক্সেস রাখা নিশ্চিত করে। আপনার যদি সিস্টেম ডিবিএসে বার্তা প্রেরণের দক্ষতার প্রয়োজন না হয় তবে সেই ক্ষমতাটিকে অস্বীকার করা খুব সুন্দর সুরক্ষা বৈশিষ্ট্য হতে পারে।
সিস্টেমড ইউনিট ফাইল সহ এটি পরিচালনা করা
মনে রাখবেন যে যদি অহি-ডেমন পুনরায় লিখিত হয়, তবে এটি সম্ভবত সুরক্ষার জন্য সিস্টেমডের উপর নির্ভর করতে পারে এবং উদাহরণস্বরূপ ব্যবহার করতে পারে ProtectHome
। ক্রোট দ্বারা গ্যারান্টিযুক্ত কিছু অতিরিক্ত সুরক্ষার পাশাপাশি এই সুরক্ষাগুলিকে অতিরিক্ত স্তর হিসাবে যুক্ত করার জন্য আমি অহি-ডেমনকে পরিবর্তনের প্রস্তাব দিয়েছিলাম। আমি এখানে প্রস্তাবিত বিকল্পগুলির সম্পূর্ণ তালিকা দেখতে পাবেন:
https://github.com/lathiat/avahi/pull/181/commits/67a7b10049c58d6afeebdc64ffd2023c5a93d49a
দেখে মনে হচ্ছে এমন আরও বিধিনিষেধ রয়েছে যা আমি যদি অহি-ডেমন নিজেই ক্রুট ব্যবহার না করতাম তবে এর কিছু প্রতিশ্রুতিবদ্ধ বার্তায় উল্লেখ করা হয়েছে। আমি নিশ্চিত না যদিও এটি কতটা প্রযোজ্য।
দ্রষ্টব্য, আমি যে সুরক্ষা ব্যবহার করেছি তাতে ইউমন সকেট ফাইল (উপরের পয়েন্ট 3) খোলার থেকে ডেমনকে সীমাবদ্ধ করা হত না।
আর একটি পদ্ধতি হ'ল SELinux ব্যবহার করা। তবে আপনি এই ধরনের লিনাক্স ডিস্ট্রিবিউশনগুলির উপ-সেটটিতে আপনার অ্যাপ্লিকেশনটি বেঁধে রাখবেন। আমি এখানে সেলইনাক্সকে ইতিবাচকভাবে চিন্তা করার কারণটি হ'ল যে সেলইনাক্স প্রসেস প্রসেসটি ডিবাসে সীমাবদ্ধভাবে অ্যাক্সেসকে সীমাবদ্ধ করে। উদাহরণস্বরূপ, আমি মনে করি আপনি প্রায়শই এটি আশা করতে পারেন যে systemd
: বাসের নামগুলির তালিকায় থাকবে না যা আপনাকে :-) এ বার্তা পাঠাতে সক্ষম হতে হবে।
"আমি ভাবছিলাম, সিস্টেমেড স্যান্ডবক্সিং যদি ক্রুট / সেটুইড / উমাস্ক / ... এর চেয়ে আরও সুরক্ষিত ব্যবহার করা হয়!"
সংক্ষিপ্তসার: কেন উভয়? আসুন উপরেরটি কিছুটা ডিকোড করুন :-)।
আপনি যদি পয়েন্ট 3 সম্পর্কে চিন্তা করেন, ক্রুট ব্যবহার করা আরও আবদ্ধ করে। প্রোটেক্টহোম = এবং এর বন্ধুরা এমনকি ক্রুটের মতো সীমাবদ্ধ হওয়ার চেষ্টা করে না। (উদাহরণস্বরূপ, নামযুক্ত সিস্টেমড বিকল্পগুলির কোনওটিই কালো তালিকাভুক্ত নয় /run
, যেখানে আমরা ইউনিক্স সকেট ফাইল রাখি)
chroot অনুষ্ঠান ফাইলসিস্টেম অ্যাক্সেস সীমাবদ্ধ একটি খুব শক্তিশালী, কিন্তু হতে পারে না সবকিছু লিনাক্স একটি ফাইল :-)। সিস্টেমযুক্ত বিকল্প রয়েছে যা অন্যান্য জিনিসগুলিকে সীমাবদ্ধ করতে পারে, এটি ফাইল নয়। প্রোগ্রামটি আপোস করা থাকলে এটি কার্যকর, আপনি এটিতে উপলব্ধ কার্নেল বৈশিষ্ট্যগুলি হ্রাস করতে পারেন, এটি এটি কোনও দুর্বলতা কাজে লাগানোর চেষ্টা করতে পারে For উদাহরণস্বরূপ, অহহি-ডিমন ব্লুটুথ সকেটের প্রয়োজন নেই এবং আমি অনুমান করি যে আপনার ওয়েব সার্ভারটি নাও হয় :-)। সুতরাং এটি AF_BLUETOOTH ঠিকানা পরিবারকে অ্যাক্সেস দেবেন না। RestrictAddressFamilies=
অপশনটি ব্যবহার করে কেবল এএএনপিএনইটি, এএফপিইটি 6, এবং সম্ভবত এএফ_উনআইএক্স ।
আপনি ব্যবহার প্রতিটি বিকল্পের জন্য দস্তাবেজ পড়ুন। কিছু বিকল্প অন্যের সাথে সংমিশ্রণে আরও কার্যকর হয় এবং কিছু সিপিইউ আর্কিটেকচারে উপলব্ধ হয় না। (সিপিইউ খারাপ হওয়ার কারণে নয়, তবে সেই সিপিইউর জন্য লিনাক্স পোর্টটি এত সুন্দরভাবে ডিজাইন করা হয়নি বলে আমি মনে করি)।
(এখানে একটি সাধারণ নীতি আছে It's আপনি কী অনুমতি দিতে চান তার তালিকা লিখতে পারলে এটি আরও সুরক্ষিত থাকে secure ক্রুট সংজ্ঞায়নের মতো আপনাকে অ্যাক্সেসের অনুমতিপ্রাপ্ত ফাইলগুলির একটি তালিকা দেয় এবং এটি আরও শক্তিশালী বলার চেয়ে আপনি ব্লক করতে চান /home
)।
নীতিগতভাবে, আপনি সেটুয়েড () এর আগে নিজেই সমস্ত একই বিধিনিষেধ প্রয়োগ করতে পারেন। এটি কেবলমাত্র কোড যা আপনি সিস্টেমড থেকে অনুলিপি করতে পারেন। তবে, সিস্টেমেড ইউনিট বিকল্পগুলি লেখার ক্ষেত্রে উল্লেখযোগ্যভাবে সহজ হওয়া উচিত, এবং যেহেতু তারা মানক ফর্ম্যাটে রয়েছে তাদের পড়া এবং পর্যালোচনা করা আরও সহজ হওয়া উচিত।
সুতরাং আমি man systemd.exec
আপনার লক্ষ্য প্ল্যাটফর্মের স্যান্ডবক্সিং বিভাগের মাধ্যমে কেবলমাত্র পড়ার সুপারিশ করতে পারি । কিন্তু আপনি যদি সবচেয়ে নিরাপদ নকশা সম্ভব চাই, আমি চেষ্টা করতে ভয় হবে না chroot
(এবং তারপর ড্রপ root
বিশেষাধিকার) আপনার প্রোগ্রামে পাশাপাশি । এখানে একটি বাণিজ্য আছে। ব্যবহার chroot
আপনার সামগ্রিক নকশায় কিছু বাধা আরোপ করে । যদি ইতিমধ্যে আপনার কাছে এমন নকশা রয়েছে যা ক্রুট ব্যবহার করে এবং আপনার যা প্রয়োজন তা মনে হয়, এটি দুর্দান্ত লাগছে।