জিআইডি, বর্তমান, প্রাথমিক, পরিপূরক, কার্যকর এবং বাস্তব গ্রুপ আইডি?


22

নিম্নলিখিত লিঙ্কগুলি বিভিন্ন প্রসঙ্গে এই ধারণাগুলি নিয়ে আলোচনা করে। আমি তাদের সংজ্ঞাগুলি পড়েছি, তবে সেগুলি কীভাবে সম্পর্কিত তা আমি এখনও বলতে পারছি না বা তাদের কয়েকটি ঠিক একইরকম হয় কিনা।

আমার বিভ্রান্তির উত্সের একটি উদাহরণ এখানে:

অনুসারে man id, আমি যদি টাইপ idকরি তবে তাদের উচিত কার্যকর এবং সত্যিকারের গ্রুপ আইডি বলে।

id uid=501(joe) gid=501(joe) groups=501(joe), 100(users)

তবে, উইকিপিডিয়া প্রাথমিক এবং পরিপূরক আইডির idমধ্যে পার্থক্য করার আউটপুটকে বোঝায় । অধিকন্তু, উইকিপিডিয়া প্রাথমিক বনাম পরিপূরক এবং কার্যকর বনাম বাস্তব গ্রুপ আইডির মধ্যে পার্থক্য করে । এই ধারণাগুলি কীভাবে একে অপরের সাথে সম্পর্কিত?

এছাড়াও, এটি কি সত্য যে প্রাথমিক গ্রুপ আইডি = গ্রুপ আইডি = বর্তমান গ্রুপ আইডি?


প্রশ্নটি অস্পষ্ট: আপনার দেওয়া লিঙ্কগুলি অনেক তথ্য দেয় much এটার কি হবে না?
psusi

উত্তর:


24

আপনি এখানে দুটি ভিন্ন স্বাতন্ত্র্য মিশ্রণ করুন:

  1. মধ্যে বাস্তব এবং কার্যকর গ্রুপ আইডি
  2. মধ্যে প্রাথমিকসম্পূরক ব্যবহারকারীদের গ্রুপ

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

দ্বিতীয় পার্থক্য ব্যবহারকারীদের বোঝায় । প্রতিটি ব্যবহারকারীর তার প্রাথমিক গোষ্ঠী রয়েছে । ব্যবহারকারীর জন্য কেবল একজনই থাকে এবং কমান্ডের আউটপুটটিতে তাকে গিড হিসাবে উল্লেখ করা হয় id। তা ছাড়াও প্রতিটি ব্যবহারকারীর বেশ কয়েকটি পরিপূরক গোষ্ঠীর অন্তর্ভুক্ত থাকতে পারে - এবং এগুলিকে idআউটপুট শেষে তালিকাভুক্ত করা হয় ।

[সম্পাদনা]:

আমি সম্মত হই যে এর জন্য ম্যানপেজটি idএখানে কিছুটা বিভ্রান্তিকর। এটি সম্ভবত কারণ এটি তথ্য নথির দ্বারা সরবরাহিত বিবরণের স্ট্রিপড ডাউন সংস্করণ। এটি আরও স্পষ্ট দেখতে, চালান info coreutils "id invocation"( idম্যানুয়ালটির শেষে পরামর্শ হিসাবে )।


ধন্যবাদ @ জোরসিট্রিজেভিয়াজ এটা খুব সহায়ক ছিল। আমি কি তাহলে বর্তমান গ্রুপ আইডি = প্রাথমিক গ্রুপটি ধরে নিতে পারি ?
অ্যামিলিও ওয়াজকেজ-রেইনা

1
সাধারণভাবে, না। newgrpকমান্ডটি ব্যবহার করে বর্তমান "আসল" গোষ্ঠীটি পরিবর্তন করা যেতে পারে - আপনার প্রথম লিঙ্কটিতে ম্যানুয়ালটির দ্বিতীয় অনুচ্ছেদটি দেখুন!
rozcietrzewiacz

18

কার্নেল ভিউ

ধারণাগতভাবে, গ্রুপগুলির তিনটি সেট রয়েছে যা একটি প্রক্রিয়াটির সদস্য। প্রতিটি সেট নিম্নলিখিত একের একটি উপসেট।

  1. প্রক্রিয়াটির ডিফল্ট গোষ্ঠী এমন একক গোষ্ঠী, এই প্রক্রিয়াটি তৈরি করা ফাইলগুলির অন্তর্ভুক্ত।
  2. গ্রুপগুলির একটি সেট যা পরীক্ষা করা হয় যখন গ্রুপটি কোনও ফাইল খোলার অনুমতি চায়।
  3. অতিরিক্ত সুবিধাগুলি সহ একটি প্রক্রিয়া চলমান এমন গোষ্ঠীগুলির সেটটি আঁকতে পারে।

Reasonsতিহাসিক কারণে, এই সেটগুলি যথাক্রমে:

  1. কার্যকর গোষ্ঠী ID (egid);
  2. কার্যকর গ্রুপ আইডি প্লাস পরিপূরক গ্রুপ আইডি ;
  3. উপরের সমস্ত প্লাস রিয়েল গ্রুপ আইডি এবং সেভ করা গোষ্ঠী-আইডি

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

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

ব্যবহারকারী ডাটাবেস দেখুন

কোনও ব্যবহারকারীর অনুমোদনের পরে, লগইন প্রক্রিয়াটি ব্যবহারকারীর শেলটি চালু করার (বা ব্যবহারকারী যে কোনও প্রোগ্রামের অনুরোধ করে) চালু করার ঠিক আগে সেই ব্যবহারকারীর দিকে স্যুইচ করে। পছন্দসই ব্যবহারকারীর (এবং মূল সুযোগগুলি হারাতে) স্যুইচ করার ঠিক আগে লগইন প্রক্রিয়া পছন্দসই দলগুলিতে স্যুইচ করে।

প্রাথমিক ইউনিক্স সংস্করণগুলিতে, একটি প্রক্রিয়া কেবলমাত্র একটি গোষ্ঠীতে থাকতে পারে। এই গোষ্ঠীটি ব্যবহারকারীর প্রাথমিক গ্রুপ আইডি, ব্যবহারকারীর ডাটাবেসে সঞ্চিত (সাধারণত /etc/passwd)। এই গোষ্ঠীটি লগইন প্রক্রিয়া দ্বারা চালিত শেল বা অন্যান্য প্রোগ্রামের আসল এবং কার্যকর গ্রুপ আইডি হয়ে ওঠে।

আজকাল, একটি প্রক্রিয়া একাধিক গ্রুপে থাকতে পারে, তাই ব্যবহারকারীরাও একাধিক গ্রুপে থাকতে পারেন। গ্রুপ ডাটাবেস (সাধারণত /etc/group) প্রতিটি দলের জন্য ব্যবহারকারীর একটি তালিকা রয়েছে। এই গোষ্ঠীগুলি লগইন প্রক্রিয়া দ্বারা চালু করা প্রোগ্রামটির পরিপূরক গোষ্ঠী আইডি হয়ে যায়।


ধন্যবাদ। আপনার উত্তরটি বুঝতে আমার কিছু প্রশ্ন রয়েছে। unix.stackexchange.com/questions/466742/…
টিম

1

এখানে আরও অনেক দুর্দান্ত উত্তর, তবে আপনি এখনও আমার মতো বিভ্রান্ত থাকলে, এখানে অন্য পদ্ধতি's দয়া করে মনে রাখবেন যে আমি এই স্টাফের কেবল একজন ছাত্র, কোনও মাস্টার নই , সুতরাং এই উত্তরটি একটি অগ্রগতিমূলক কাজ, এবং একটি দৃ answer় উত্তর হিসাবে বিবেচনা করা উচিত নয়, কমপক্ষে এখনও হয়নি। এই উত্তর v0.2 বিবেচনা করুন।

গ্রুপগুলি একই সাথে সহজ এবং জটিল।

নীচে ব্যবহৃত আইডিগুলির কী:

KEY  Full name --------  Description---------------------------------------------

 u   User                 uID = User  ID (a unique # associated with each user)
 g   Group                gID = Group ID (a unique # associated with each group)
                            While each /etc/passwd entry has one uID and one gID,
                            additional gIDs can be associated with a users via
                            /etc/group.


 L   Login          IDs - uID and gID produced from the Login process.  
                            ('L' is not exactly standard Linux terminology, but
                            useful for explanations below.)

 F   File           IDs - uID and gID retrieved from a file's ownership.
                            ('F' is not exactly standard Linux terminology, but
                            useful for explanations below.)


 R   Real           IDs - Who actually                      runs a process 
 E   Effective      IDs - Who spoofed via setuid or setgid, runs a process
 O   Original Eff.  IDs - Place to save the original Effective ID when changing 
                          it (e.g. temporarily downgrading it) so can later 
                          restore it.  Also called "Saved ID"; (but 'S' was not 
                          used for here to help avoid confusion with the 'S' in  
                          'SetUserID' & SetGroupID.)
 +   Supplimentary gIDs - Optional, additional groups (none or more) running 
                          this process which can be used to test for permissions.

ব্যবহারকারী এবং গ্রুপ আইডি নাম:

Category          USER  GROUP  Notes  
----------------- ----  -----  -------------------------------------------  
 From login:      LuID  LgID   From /etc/passwd lookup

 From files:      FuID  FgID   Each file has these. Set by creator process.


 For each running process:

            Real  RuID  RgID   Actual   user starting the program
       Effective  EuID  EgID   Assigned user starting the program*
           Saved  OuID  OgID   Saves original effective ID.
   Supplementary        +gID1  (optional, additional groups)
                        +gID2     
                         ...  

প্রক্রিয়াগুলি কীভাবে আইডি অর্জন করে:

1) লগইন ব্যবহারকারীর নাম এবং রিটার্ন প্রমাণীকরণ করে LuIDএবং LgIDথেকে /etc/passwd

2) প্রথম প্রক্রিয়াটি কার্যকর = আসল = লগইন সেট আপ করে

EuID=RuID=LuID 
EgID=RgID=LgID

3) Forked শিশু উত্তরাধিকারী RuID, EuID, RgID, এবং EgID, (& সম্ভবত সংরক্ষন ও supp) অবশ্য

  • গুলি যদি তোমার দর্শন লগ করা আইডি বিট (গুলি) চালানো নতুন প্রোগ্রাম ফাইল সেট করা হয়, তারপরে ফাইলটিকে থেকে কার্যকর সেট করুন:

    EuID = FuID

  • যদি এস জি আই বিট (গুলি) কার্যকর করতে নতুন প্রোগ্রামের ফাইলে সেট করা থাকে তবে ফাইল থেকে কার্যকর সেট করুন:

    EgID = FgID

নোট: অন্তর্নিহিত ফাইলসিস্টেম এর SUID এবং nosuid মাউন্ট বিকল্পগুলি প্রয়োগ করুন।

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

4 বি) যদি s জি আইডি সেট করতে ব্যবহৃত হয় EgID, তবে EgIDঅস্থায়ীভাবে পরিবর্তন করা যেতে পারে (উদাহরণস্বরূপ মূল থেকে ডাউনগ্রেড করা) তবে প্রথমে এর আসল মানটি সংরক্ষণ করা হয় OgIDতাই যদি ইচ্ছা হয় তবে এটি পুনরুদ্ধার করা যেতে পারে।


যখন একটি ফাইল তৈরি করতে হবে:

File's new id's are set from effective id's: FuID=EuID and FgID=EgID
(Permissions are set from umask.)

পড়ার জন্য খুলতে:

If FuID = EuID  and  user-read bit is set, or  
If FgID = EgID  and group-read bit is set, or  
If FgID = +gID1 and group-read bit is set, or  
If FgID = +gID2 and group-read bit is set, ...  
then allow reading.

লেখার জন্য খুলতে:

(Same as above but write bit set to allow writing.)

মৃত্যুদন্ড কার্যকর করার জন্য:

(Same as above but execute bit set to allow execution.)

যখন কোনও বার্তা প্রেরণ করা দরকার:

Use RuID and RgID.  (Not EuID or EgID). *(Not sure where I read this.)*

তথ্যসূত্র: ম্যান শংসাপত্র

অতিরিক্ত: আপনার / ইত্যাদি / গ্রুপ ফাইলটি প্রিন্ট করার জন্য এখানে একটি ইউটিলিটি রয়েছে:

cat /etc/group | sort -t: -k3n | awk  -F ':' \
  'BEGIN{printf "\n%-20s %-3s %-8s %s", \
           "Group name","pw", "Group ID ", "User list"}\
   BEGIN{printf "\n%-20s %-3s %-8s %s\n", \
           "----------","--", "---------", "---------"} \
        { printf "%-20s %-3s %8d %s\n", $1, $2, $3, $4 }'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.