একটি লিনাক্স ইউটিলিটি তৈরি করা: ব্যবহারকারী / গোষ্ঠী / অনুমতিগুলির সেরা অনুশীলন


1

আমি একটি ইউটিলিটি তৈরি করছি যা লিনাক্স মেশিনে চলবে। এই আলোচনার উদ্দেশ্যগুলির জন্য, আসুন এটির অনুরূপটি তৈরি করতে বলি।

এখানে চুক্তিটি রয়েছে: কখনও কখনও, আপনি যখন ইউটিলিটিটি চালান, তখন আপনি যে ডিরেক্টরিটি চালাচ্ছেন সেগুলিতে এটি ফাইল তৈরি করে এবং এগুলি সরঞ্জাম নির্বাহকারী হিসাবে একই ব্যবহারকারী / গোষ্ঠী হিসাবে তৈরি করা দরকার। এটি হ'ল "মেক মেইন.ও" পরিস্থিতি - মেইন.সি. থেকে মেইন.ও তৈরি করুন। আপনি নিজের ব্যবহারকারী হিসাবে ইউটিলিটি চালানোর সময় এটি ডিফল্ট হবে, যা ঠিক আছে।

কখনও কখনও, আপনি ইউটিলিটি চালানোর সময় এটি / usr / লোকাল / বিন এবং এ জাতীয় ফাইল তৈরি করে, যার মূল: রুট হওয়া দরকার। এটি "সুডো মেক ইনস্টল" দৃশ্য - root / root এর অধীনে / usr / স্থানীয় / বিন / নির্বাহযোগ্য able রুট হিসাবে ইউটিলিটি চালানোর সময় এটি ডিফল্ট হবে, যা ভাল।

সমস্যাটি হ'ল, সমস্ত ক্ষেত্রে ইউটিলিটির কিছু অতিরিক্ত ক্যাশে ফাইল পরিচালনা করতে হবে, / var / cache / ইউটিলিটিতে বলুন। আপনি যখন ইউটিলিটিটি রুট হিসাবে চালান, তখন এই ফাইলগুলি মূল: রুট, যা পরের বার আপনার সাধারণ ব্যবহারকারী হিসাবে ইউটিলিটি চালানোর সময় একটি সমস্যা। এগুলি মুছে ফেলা / পরিবর্তন করা যায় না।

আমি যা ভাবছি তা হ'ল, আপনি যখন এটি ইনস্টল করবেন তখন এই ইউটিলিটির জন্য কোনও উত্সর্গীকৃত ব্যবহারকারী / গোষ্ঠী তৈরি করা কি ভাল ধারণা? আমি অ্যাপাচি, এসএনএন এবং অন্যান্যরা জানি। আমি ভাবতে পারি এটিই একমাত্র পদ্ধতির, তবে আমি অন্যান্য সমাধানের জন্য উন্মুক্ত।

আমার যদি ইউটিলিটির জন্য ডেডিকেটেড ব্যবহারকারী / গোষ্ঠী না থাকে তবে আমি কীভাবে ক্যাশে ফাইল পরিচালনা করার উদ্দেশ্যে সেই ব্যবহারকারীর পরিচয়টি সাময়িকভাবে ধরে নিই এবং তারপরে মৃত্যুদণ্ড কার্যকর করার জন্য অবশিষ্ট ব্যবহারকারীর জন্য পূর্ববর্তী পরিচয়টি আবার চালু করব (ব্যবহারকারী হিসাবে নিয়মিত ফাইল তৈরি করার জন্য) : ব্যবহারকারী এবং সিস্টেম ফাইলগুলি রুট: রুট হিসাবে)?

আমি এ পর্যন্ত যা পেয়েছি তা হ'ল এরকম কিছু:

  • getpwnam (পূর্বনির্ধারিত_ইউটিলিটি_উজার_নাম) // ইউআইডি পান
  • seteuid (utility_uid)
  • setegid (utility_gid)

// / var / cache / ইউটিলিটিতে স্টাফ করুন

  • seteuid (getuid ()) // পূর্ববর্তী আইডি পুনরায় শুরু করুন
  • setegid (getgid ()) // পূর্ববর্তী গ্রুপটি পুনরায় শুরু করুন

সমস্যা: নিজেকে হিসাবে ইউটিলিটি চালানোর সময় পূর্বনির্ধারিত_সংশ্লিষ্টতা ধরে নেওয়া কার্যকর হয় না! আপনি যখন রুট হিসাবে চলবেন তখন এটি কাজ করে (স্পষ্টতই)।

আমি নিজেকে এবং অন্যান্য ব্যবহারকারীদের ইউটিলিটির সাথে যুক্ত গ্রুপে যুক্ত করছি। তবে, এটি কাজ করে না। সুতরাং - আমি কিভাবে এই কাজ করব? এটা কি একটি খারাপ ধারণা?

সম্পাদনা: নীচের পরামর্শের প্রতিক্রিয়া

আমি আরও কিছু পঠন করেছি এবং আমি মনে করি যে # 2 ব্যবহার করে আমার কাছে একটি ভাল সমাধান রয়েছে যা আপনি পরামর্শ দিয়েছেন এটি এর মতো দেখাচ্ছে

ইউটিলিটির এক্সিকিউটেবলটি ইউটিলিটির মালিকানাধীন: ইউটিলিটি এবং উভয়ই ইউ + এস এবং জি + এস অনুমতি রয়েছে। অতএব, আমি যখন চালানো শুরু করি ঠিক তখনই আমার যথাক্রমে ইউটিলিটি এবং ইউটিলিটি ইইড / এজিড থাকে। আমি যে কোনও ব্যবহারকারী প্রোগ্রামটি চালিয়েছি তার রুজি / আরজিআইডি করেছি। সুতরাং, আমি যা করতে পারি তা হ'ল আমি যখন এক্সিকিউট করা শুরু করি, সেটজিড (গেটগিড ()) এবং সিটিউইড (গেটুইড ())। এটি প্রক্রিয়াটিকে যে কেউ প্রোগ্রামটি কার্যকর করেছে তার পরিচয় ধরে নিতে সহায়তা করে। আমি প্রোগ্রামের পুরো সময়কালের জন্য এটি বজায় রাখব, / var / cache / ইউটিলিটির সাথে কথা বলার সময়, আমি একই কৌশলটি ইউটিলিটি: ইউটিলিটি পরিচয়টি ধরে নিতে ব্যবহার করি।

আমার সফ্টওয়্যারটি বিভাজন করার দরকার নেই, এমন কোনও গ্রুপ নেই যার সাথে আপনার ব্যবহারকারীর অন্তর্ভুক্ত থাকতে হবে, এক্সিকিউটেবলের কেবল তার নিজস্ব ব্যবহারকারী / গোষ্ঠী এবং ইউ + এস এবং জি + এস প্রয়োজন। আমি অনুমান করি যে আপনাকে বিশ্বাস করতে হবে যে প্রোগ্রামটি দূষিত নয়, তবে আপনাকে এটি ধরে নিতে হবে যদি আপনি এটি চালিয়ে যাচ্ছেন। থটস?


হাই টড এটি একটি ভাল সমাধান মত শোনাচ্ছে। আমি মনে করি সুরক্ষা কোনও সমস্যা নয়, কারণ যখন কোনও ব্যবহারকারী ইউটিলিটিটি আহ্বান করেন এটি যেভাবেই তাদের সমস্ত অ্যাক্সেস গ্রহণ করে।
কেভিন এ নাউদি

উত্তর:


0

স্পষ্টতার জন্য, আপনার কোডের সাথে সমস্যাটি হল যে অনিয়ন্ত্রিত ব্যবহারকারীরা কেবলমাত্র কার্যকর করতে পারেন তা কীভাবে চালানো হয়েছিল তার উপর ভিত্তি করে কয়েকটি ক্ষেত্রেই এটি পৃথক করা যায়। সুতরাং আমাদের আরেকটি সমাধান দরকার।

এটি একটি আকর্ষণীয় সমস্যা। এটি সমাধান করার বিভিন্ন উপায় রয়েছে। আমি জানি না যে কোনও গৃহীত সেরা অনুশীলনের সমাধান আছে কিনা, তবে এখানে কয়েকটি বিকল্প রয়েছে।

  1. স্টিকি-গ্রুপ অনুমতিগুলি সেট করুন /var/cache/utility

    এই পদ্ধতির সাহায্যে আপনার ইউটিলিটিটি প্রাথমিকভাবে অনুমতিগুলির অধীনে চলতে দেয়। ব্যবহারকারী যে মালিকানাধীন গ্রুপে আছেন তা নিশ্চিত হয়ে নিন /var/cache/utilityএবং অনুমতিগুলি পরিবর্তন করুন যাতে গোষ্ঠী নির্ধারণ সমস্ত বিষয়বস্তুর জন্য স্টিকি থাকে। আপনি নিম্নলিখিত দ্বারা এটি সম্পাদন করতে পারেন:

    mkdir /var/cache/utility
    chown -R :user /var/cache/utility
    chmod 2770 /var/cache/utility
    usermod -a -G users joe
    

    এখন, যেহেতু এটিতে joeরয়েছে users, যখন তিনি আপনার ইউটিলিটি চালান সবকিছু ঠিক আছে। এতে যে কোনও পরিবর্তিত ফাইলের গ্রুপ প্রিমেশন /var/cache/utilityথাকবে users। সমস্যাটি হ'ল এমন কোনও গ্রুপ নেই যার সাথে সমস্ত ব্যবহারকারী স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত। সুতরাং এই পদ্ধতিটি সমস্ত ব্যবহারকারীদের জন্য স্বয়ংক্রিয়ভাবে কাজ করবে না। সুরক্ষা সমস্যাও রয়েছে। আপনার ইউটিলিটি ফাইলগুলি /var/cache/utilityএকটি ভাল আচরণের পদ্ধতিতে পরিবর্তন করতে পারে তবে এই পদ্ধতিগুলি ব্যবহারকারল্যান্ডের বন্য পশ্চিমে বন্যার দ্বার উন্মুক্ত করে।

  2. আপনার ইউটিলিটিটি সামনের- এবং ব্যাক-এন্ডে বিভক্ত করুন।

    ইউটিলিটিটিকে সামনের দিকে এবং পিছনের দিকে ভাগ করা অসুবিধাজনক, তবে আপনাকে অপারেশনাল ইন্টারফেসটি আনুষ্ঠানিক করতে বাধ্য করে। অংশগুলির মধ্যে যোগাযোগ দুটি সাধারণ রূপ নিতে পারে:

    • সকেট কমস, ইউনিক্স সকেট বা টিসিপি সকেট কিনা। এটির জন্য আপনার ব্যাক-এন্ডের পরিষেবা হওয়া দরকার।

    • কমান্ড-লাইন সরঞ্জাম। এটি যথেষ্ট সহজ যে সকেটগুলি ব্যবহার করে এবং আপনার ব্যাক-এন্ড অবিচ্ছিন্নভাবে চলমান না।

    আপনার ব্যাক-এন্ডে ইউআইডি-এক্সিকিউটিভ-স্টিকি বিটটি ধারণাটি হ'ল যাতে বর্তমান লগ ইন হওয়া ব্যবহারকারী নির্বিশেষে এটি স্বয়ংক্রিয়ভাবে মালিকের অ্যাকাউন্টে চলে। সম্মুখ-প্রান্তটি এখনও ব্যবহারকারীর শংসাপত্রের আওতায় চলবে।

    আপনি নিজের ইউটিলিটিটি বিভক্ত করতে পারেন কিনা তা দেখুন যাতে ক্যাশে সমস্ত হেরফের ব্যাকএন্ড দ্বারা সম্পাদিত হয় তবে অন্যান্য ক্রিয়াকলাপগুলি সামনের দিকে শেষ হয়। আপনি নীচে হিসাবে back-end এর uid সেট করতে পারেন:

    chmod u+s /usr/bin/utility-back-end
    

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

    find / -xdev \( -perm -4000 \) -type f -print0 | xargs -0 ls -l
    

আশা করি এইটি কাজ করবে.


/ ইত্যাদি / পাসডব্লিউডটি বিশ্ব-পঠনযোগ্য (অন্যথায় সরঞ্জামগুলি lsযথাযথ ব্যবহারকারীর বা গোষ্ঠীর নাম্বারে সংখ্যামূলক uid / gid মানগুলি মানচিত্র করতে পারে না)। / ইত্যাদি / ছায়া পাঠযোগ্যতা সীমাবদ্ধ করেছে, কারণ সিস্টেম ছায়া পাসওয়ার্ড সহ চলমান থাকলে এটি এনক্রিপ্ট করা পাসওয়ার্ড ধারণ করে।
একটি সিভিএন

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

আপনার ধারণার জন্য অনেক ধন্যবাদ। আমার প্রতিক্রিয়া জন্য উপরে দেখুন .. মন্তব্য ক্ষেত্রের জন্য খুব দীর্ঘ।
টড ফ্রি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.