আমি একটি ইউটিলিটি তৈরি করছি যা লিনাক্স মেশিনে চলবে। এই আলোচনার উদ্দেশ্যগুলির জন্য, আসুন এটির অনুরূপটি তৈরি করতে বলি।
এখানে চুক্তিটি রয়েছে: কখনও কখনও, আপনি যখন ইউটিলিটিটি চালান, তখন আপনি যে ডিরেক্টরিটি চালাচ্ছেন সেগুলিতে এটি ফাইল তৈরি করে এবং এগুলি সরঞ্জাম নির্বাহকারী হিসাবে একই ব্যবহারকারী / গোষ্ঠী হিসাবে তৈরি করা দরকার। এটি হ'ল "মেক মেইন.ও" পরিস্থিতি - মেইন.সি. থেকে মেইন.ও তৈরি করুন। আপনি নিজের ব্যবহারকারী হিসাবে ইউটিলিটি চালানোর সময় এটি ডিফল্ট হবে, যা ঠিক আছে।
কখনও কখনও, আপনি ইউটিলিটি চালানোর সময় এটি / usr / লোকাল / বিন এবং এ জাতীয় ফাইল তৈরি করে, যার মূল: রুট হওয়া দরকার। এটি "সুডো মেক ইনস্টল" দৃশ্য - root / root এর অধীনে / usr / স্থানীয় / বিন / নির্বাহযোগ্য able রুট হিসাবে ইউটিলিটি চালানোর সময় এটি ডিফল্ট হবে, যা ভাল।
সমস্যাটি হ'ল, সমস্ত ক্ষেত্রে ইউটিলিটির কিছু অতিরিক্ত ক্যাশে ফাইল পরিচালনা করতে হবে, / var / cache / ইউটিলিটিতে বলুন। আপনি যখন ইউটিলিটিটি রুট হিসাবে চালান, তখন এই ফাইলগুলি মূল: রুট, যা পরের বার আপনার সাধারণ ব্যবহারকারী হিসাবে ইউটিলিটি চালানোর সময় একটি সমস্যা। এগুলি মুছে ফেলা / পরিবর্তন করা যায় না।
আমি যা ভাবছি তা হ'ল, আপনি যখন এটি ইনস্টল করবেন তখন এই ইউটিলিটির জন্য কোনও উত্সর্গীকৃত ব্যবহারকারী / গোষ্ঠী তৈরি করা কি ভাল ধারণা? আমি অ্যাপাচি, এসএনএন এবং অন্যান্যরা জানি। আমি ভাবতে পারি এটিই একমাত্র পদ্ধতির, তবে আমি অন্যান্য সমাধানের জন্য উন্মুক্ত।
আমার যদি ইউটিলিটির জন্য ডেডিকেটেড ব্যবহারকারী / গোষ্ঠী না থাকে তবে আমি কীভাবে ক্যাশে ফাইল পরিচালনা করার উদ্দেশ্যে সেই ব্যবহারকারীর পরিচয়টি সাময়িকভাবে ধরে নিই এবং তারপরে মৃত্যুদণ্ড কার্যকর করার জন্য অবশিষ্ট ব্যবহারকারীর জন্য পূর্ববর্তী পরিচয়টি আবার চালু করব (ব্যবহারকারী হিসাবে নিয়মিত ফাইল তৈরি করার জন্য) : ব্যবহারকারী এবং সিস্টেম ফাইলগুলি রুট: রুট হিসাবে)?
আমি এ পর্যন্ত যা পেয়েছি তা হ'ল এরকম কিছু:
- getpwnam (পূর্বনির্ধারিত_ইউটিলিটি_উজার_নাম) // ইউআইডি পান
- seteuid (utility_uid)
- setegid (utility_gid)
// / var / cache / ইউটিলিটিতে স্টাফ করুন
- seteuid (getuid ()) // পূর্ববর্তী আইডি পুনরায় শুরু করুন
- setegid (getgid ()) // পূর্ববর্তী গ্রুপটি পুনরায় শুরু করুন
সমস্যা: নিজেকে হিসাবে ইউটিলিটি চালানোর সময় পূর্বনির্ধারিত_সংশ্লিষ্টতা ধরে নেওয়া কার্যকর হয় না! আপনি যখন রুট হিসাবে চলবেন তখন এটি কাজ করে (স্পষ্টতই)।
আমি নিজেকে এবং অন্যান্য ব্যবহারকারীদের ইউটিলিটির সাথে যুক্ত গ্রুপে যুক্ত করছি। তবে, এটি কাজ করে না। সুতরাং - আমি কিভাবে এই কাজ করব? এটা কি একটি খারাপ ধারণা?
সম্পাদনা: নীচের পরামর্শের প্রতিক্রিয়া
আমি আরও কিছু পঠন করেছি এবং আমি মনে করি যে # 2 ব্যবহার করে আমার কাছে একটি ভাল সমাধান রয়েছে যা আপনি পরামর্শ দিয়েছেন এটি এর মতো দেখাচ্ছে
ইউটিলিটির এক্সিকিউটেবলটি ইউটিলিটির মালিকানাধীন: ইউটিলিটি এবং উভয়ই ইউ + এস এবং জি + এস অনুমতি রয়েছে। অতএব, আমি যখন চালানো শুরু করি ঠিক তখনই আমার যথাক্রমে ইউটিলিটি এবং ইউটিলিটি ইইড / এজিড থাকে। আমি যে কোনও ব্যবহারকারী প্রোগ্রামটি চালিয়েছি তার রুজি / আরজিআইডি করেছি। সুতরাং, আমি যা করতে পারি তা হ'ল আমি যখন এক্সিকিউট করা শুরু করি, সেটজিড (গেটগিড ()) এবং সিটিউইড (গেটুইড ())। এটি প্রক্রিয়াটিকে যে কেউ প্রোগ্রামটি কার্যকর করেছে তার পরিচয় ধরে নিতে সহায়তা করে। আমি প্রোগ্রামের পুরো সময়কালের জন্য এটি বজায় রাখব, / var / cache / ইউটিলিটির সাথে কথা বলার সময়, আমি একই কৌশলটি ইউটিলিটি: ইউটিলিটি পরিচয়টি ধরে নিতে ব্যবহার করি।
আমার সফ্টওয়্যারটি বিভাজন করার দরকার নেই, এমন কোনও গ্রুপ নেই যার সাথে আপনার ব্যবহারকারীর অন্তর্ভুক্ত থাকতে হবে, এক্সিকিউটেবলের কেবল তার নিজস্ব ব্যবহারকারী / গোষ্ঠী এবং ইউ + এস এবং জি + এস প্রয়োজন। আমি অনুমান করি যে আপনাকে বিশ্বাস করতে হবে যে প্রোগ্রামটি দূষিত নয়, তবে আপনাকে এটি ধরে নিতে হবে যদি আপনি এটি চালিয়ে যাচ্ছেন। থটস?