লিনাক্সে একটি প্রক্রিয়া অযোগ্যযোগ্য করুন


14

আমি একটি পাসওয়ার্ড ম্যানেজার অ্যাপ্লিকেশন নিয়ে কাজ করছি এবং সুরক্ষার কারণে আমি একটি অযোগ্যযোগ্য প্রক্রিয়া চালু করতে চাই।

এবং পাশাপাশি আমি চাই না যে এই প্রোগ্রামটি একটি ডেমন হোক, কারণ আমাকে স্ট্যান্ডার্ড ইনপুট থেকে পড়তে হবে এবং এটিকে লিখতে হবে।

এই কাজ করতে একটি উপায় আছে কি?


11
"সুরক্ষার কারণে আমি একটি অকাট্য প্রক্রিয়া চালু করতে চাই" " কেবল একটি নোট - যদি এটির অনুমতি দেওয়া হত, লোকেরা খুব সহজেই নেপথ্য কারণে এটির ব্যবহার করতে পারে - যেমন, একটি অবিরাম কাঁটাচামচ বোমা চালু করে।
VLAZ

32
এটি একটি এক্সওয়াই সমস্যার মতো শোনাচ্ছে । আমার সন্দেহ হয় যে আপনি যা অর্জন করার চেষ্টা করছেন তা অনিচ্ছুক প্রক্রিয়া এটি করার উপায় নয়। "সুরক্ষার কারণে" খুব অস্পষ্ট। আপনি ব্যবহারকারীকে ঠিক কী করা থেকে বিরত রাখতে চান? তাদের কী অ্যাক্সেস আছে?
নাট এল্ডারেজ

4
যে কোনও প্রক্রিয়া যা সমস্ত উদ্দেশ্য এবং উদ্দেশ্যগুলির জন্য অযোগ্য is তা ভাইরাস।
নাফটুলি কে

3
@ নেটএলড্রেজ: বরং প্রোগ্রামটি সিগন্যালগুলিকে উপেক্ষা করুন। এটি করার সাধারণ উপায় এটি; অন্যথায়, কেউ টার্মিনাল বাইপাস করে সরাসরি প্রক্রিয়াটিতে একটি সাইন ইন বা সাইন্টিস্টপি পাঠাতে পারে।
নোয়া স্পুরিয়ার

2
@ নোহসপুরিয়ার: আমি এমন একটি পরিস্থিতিটি কল্পনা করছি যেখানে আপনার কোনও ব্যবহারকারী রয়েছেন যারা কনসোলে জিনিস টাইপ করতে পারেন, তবে যিনি অন্যথায় কম্পিউটারে কোড কার্যকর করতে পারবেন না (কিওস্কের মতো)। আপনি এটি সেট আপ করেছেন যাতে তারা টাইপ করতে পারে এমন কোনও কী অপ্রত্যাশিত প্রভাব ফেলবে না। যদি তারা অন্য কোড সম্পাদন করতে পারে তবে সাইন ইন এবং সিগস্টটিপি এবং সিকুইকিটি উপেক্ষা করে কোনও লাভ হয় না; যে কেউ এই প্রক্রিয়াগুলিতে সরাসরি এই সংকেতগুলি প্রেরণ করতে পারে সে সিগকল বা সিগস্টপও প্রেরণ করতে পারে যা আপনি উপেক্ষা করতে পারবেন না।
নাট এল্ডারেজ

উত্তর:


41

একটি পৃথক ব্যবহারকারী এবং হাতল অধীনে পাসওয়ার্ড ম্যানেজার রান করতে / উপেক্ষা / অবরুদ্ধ টার্মিনাল-জেনারেট সংকেত ( SIGINT, SIGQUIT, SIGHUP, SIGTSTP, SIGTTIN, এবং SIGTTOU)।

আপনার কার্যকর আইডি 0 (মূল) না হওয়া পর্যন্ত আপনি কোনও পৃথক ব্যবহারকারীর অধীনে চালিত (= কিল) প্রক্রিয়াগুলিতে সিগন্যাল প্রেরণ করতে পারবেন না (ব্যবহারকারী যাঁর আসল uid এবং সংরক্ষিত-সেট ইউড উভয়ই আপনার কার্যকর uid থেকে পৃথক) যদি না আপনার কার্যকর আইডি 0 (মূল) হয়।

সমস্ত প্রক্রিয়া এখনও রুট দ্বারা কিলযোগ্য হবে।

কাছের বিশদ জন্য, দেখুন হত্যা (2)


15

প্রক্রিয়াটিকে অবিচ্ছেদ্য করার একমাত্র উপায় হ'ল এটিকে কার্নেল থ্রেড হিসাবে প্রয়োগ করা , যা তুচ্ছ কিছু নয়।

আপনি এখনও এটি মেরে ফেলতে পারেন তবে এটি কোনও ওএস শাটডাউন সমান্তরাল ক্ষতি হবে।

আপনি এমন একটি কাস্টম কার্নেল মডিউলও বিকাশ করতে পারেন যা SIGNAL_UNKILLABLEআপনার প্রক্রিয়াতে পতাকা সেট করে । এই পতাকাটি কেবল init(বা systemd, যে কোনও প্রাথমিক প্রক্রিয়া কার্নেল প্রবর্তনের জন্য) সেট করার জন্য ডিজাইন করা হয়েছে যা একমাত্র শর্তহীন কিল থেকে রক্ষিত কেবলমাত্র ইউজারল্যান্ড প্রক্রিয়া তবে কোনও কিছুই নিয়মিত প্রক্রিয়ার জন্য উপস্থিত থাকতে নিষেধ বলে মনে হয় না।


1
এটি আরম্ভ প্রক্রিয়া হতে পারে
মুহম্মাহটেন

@muhhhhten আপনি ঠিকই বলেছেন, init হল একটি শর্তহীন হত্যার বিরুদ্ধে সুরক্ষিত একটি ইউজারল্যান্ড প্রক্রিয়া। কার্নেল মডিউল এবং থ্রেডগুলির জন্য অবশ্যই একটি এপিআই থাকার সময় এটি কাস্টমাইজ করার জন্য ডিজাইন করা হয়নি।
jlliagre

আমার নিজের উত্তরটি বিস্তারিতভাবে বর্ণনা করার জন্য, আমি ধরে নিচ্ছি যে আপনি কোনও মূল অ্যাকাউন্টে অ্যাক্সেস করতে পারবেন না (যা ঘটনাক্রমে ইঙ্গিত দেয় এটি খেলনার উদাহরণ, একটি কোর্স প্রকল্প বা ম্যালওয়্যার)। আপনি যে উদ্দেশ্যে কার্নেল মডিউলটি তারের করতে পারেন সে ধারণাটি পূর্ববর্তী করে। এছাড়াও মনে রাখবেন যে SIGNAL_UNKILLABLE পতাকাটি সাধারণ প্রক্রিয়াগুলির জন্য উপলভ্য নয় এবং কিছু গুরুত্বপূর্ণ স্বাভাবিক ক্রিয়াকলাপকে (যেমন ভফোর্কিং) বাদ দেয় এবং তাই আমি এটিকে একটি সাধারণ-অবৈধ প্রান্তের কেস হিসাবে বিবেচনা করব।
গ্রেগড

@ জিলিয়াগ্র্রে আসলেই তা হয় না।
Muhuhuhten

@ ডুডেক একটি অনিবার্য প্রক্রিয়া ইতিমধ্যে একটি সাধারণ অবৈধ প্রান্তের কেস।
jlliagre

11

প্রযুক্তিগতভাবে, কোনও প্রক্রিয়া অকেজোযোগ্য করার কোনও উপায় নেই।

অবশ্যই, নন-রুট ব্যবহারকারীদের জন্য তারা কেবল একই প্রসেসগুলিকেই মেরে ফেলতে পারে যার মতো তাদের ব্যবহারকারীর আইডি রয়েছে, তাই আপনি যদি বিভিন্ন অ্যাকাউন্ট তৈরি করতে পারেন তবে আপনি প্রক্রিয়াটির জন্য একটি "অনন্য" ব্যবহারকারীর আইডি ব্যবহার করতে পারেন এবং কেবলমাত্র রুট এটি হত্যা করতে পারে।

একটি সহজ, তবে কম শক্তিশালী, সমাধান হ'ল আপনার প্রক্রিয়া যতটা সম্ভব সংকেত ধরা (সম্ভবত সেগুলি উপেক্ষা করা)। এটি কেবল খেলনা উদাহরণ বা অ-বিদ্বেষপূর্ণ পরিবেশের জন্য উপযুক্ত কারণ কেআইএলএল সংকেত ধরার কোনও উপায় নেই (সংকেত 9), তবে অন্যথায় আপনি তাদের দ্বারা নিহত হওয়া এড়াতে পারবেন।

অবশেষে, আপনি যদি হত্যা করেন তবে আপনার প্রক্রিয়াটি পুনর্বাসনের ব্যবস্থা করতে পারেন। এটি ভঙ্গুরও (খুব ভঙ্গুর) তবে এটি কেটে ফেলা একটু কঠিন করে তুলবে। এটি আপনার নিজের একটি মনিটরের প্রক্রিয়া ব্যবহার করে, বা ইনটিটাব ব্যবহার করে সম্পন্ন করা যায়। কোনও শত্রু যারা জানেন যে তারা কী করছে, এটি একবারে একাধিক প্রক্রিয়া মেরে খুব সহজেই এড়ানো যায়।


1
তবে ( inittabএটি ব্যতীত ) মনিটরের প্রক্রিয়াটিও মেরে ফেলা সম্ভব, না?
রোয়াইমা

না, ডিভাইস ড্রাইভার (কার্নেল মডিউল) এমন প্রক্রিয়া তৈরি করতে পারে যা রুট দ্বারা হত্যা করা যায় না।
নোহ স্পুরিয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.