ইউনিক্স / লিনাক্স: বাস্তব ব্যবহারকারী আইডি, কার্যকর ব্যবহারকারী আইডি এবং সংরক্ষিত ব্যবহারকারী আইডি মধ্যে পার্থক্য


107

আমি ইতিমধ্যে বাস্তব ব্যবহারকারী আইডি সম্পর্কে সচেতন । এটি সিস্টেমের কোনও ব্যবহারকারীর জন্য অনন্য নম্বর।

আমার সিস্টেমে, আমার uidহয়

$ echo $UID
1014
$                 

অন্য দুটি আইডির স্ট্যান্ড কি?
এবং কার্যকর ব্যবহারকারী আইডি এবং সেভ করা ইউজার আইডি কী ব্যবহার করে এবং আমরা এটি সিস্টেমে কোথায় ব্যবহার করি?


: - অবগতির জন্য রয়েছে ফাইল সিস্টেম ব্যবহারকারী আইডি, হিসাবে উইকিপিডিয়া পৃষ্ঠাতে রূপরেখা en.wikipedia.org/wiki/User_identifier
উইলেম ভ্যান Ketwich

আমি মনে করি তিনি এটি উল্লেখ করেননি কারণ (আপনার উইকির লিঙ্ক থেকে): "কার্নেল ২.০ থেকে fsuid এর অস্তিত্ব আর প্রয়োজন নেই কারণ লিনাক্স সিগন্যাল প্রেরণের জন্য SUSv3 বিধি মেনে চলে, তবে fsuid সামঞ্জস্যতার কারণে অবশেষে রয়ে গেছে।"
RtmY

উত্তর:


151

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

সুতরাং, আসল ব্যবহারকারীর আইডি হ'ল আপনি প্রকৃতপক্ষে কে আছেন (যিনি এই প্রক্রিয়াটির মালিক) এবং কার্যকর ব্যবহারকারী আইডি হ'ল আপনাকে কিছু করার অনুমতি দেওয়া হয়েছে কি না (বেশিরভাগ সময় , কিছু ব্যতিক্রম আছে)।

আপনি যখন লগ ইন করেন, লগইন শেলটি পাসওয়ার্ড ফাইল দ্বারা সরবরাহিত একই মান (আপনার আসল ব্যবহারকারী আইডি) তে সত্য এবং কার্যকর উভয় আইডি সেট করে।

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

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

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

সংরক্ষিত সেট-ব্যবহারকারী আইডি এটির জন্য।


7
সেভড-সেট ব্যবহারকারী আইডি সম্পর্কে সেই শেষ পয়েন্টের আরও স্পষ্টতার জন্য, উইকিপিডিয়া দেখুন।
জিডিপি 2

আপনি কি আমাকে এমন কিছু পাঠকের দিকে নির্দেশ করতে পারেন যেখানে আমি দেখতে পাই যে কোন সাইল কলের পরিবর্তে রিয়েল ইউড চেক করুন? আপনাকে ধন্যবাদ
mik1904

4
@ mik1904: আপনি সম্ভবত সবচেয়ে গুরুত্বপূর্ণ ব্যবহার করতে পারেন যা সত্যই ইউআইডি পরীক্ষা করেaccess । এটি এর 99.9%। এছাড়াও setfsuid(তবে খুব কম প্রয়োজন), এবং কিছু খুব নিম্ন স্তরের ফানকস এবং আপনার অগ্রাধিকার বা সময়সূচী অর্জন / নির্ধারণের জন্য প্রকৃত ব্যবহারকারীর আইডি (তবে এটির জন্য পরীক্ষা করা হয় না), এবং আইডিগুলি সিগন্যাল হ্যান্ডলারের কাছে প্রেরণ করা হয়েছে বা এটি waitএল দ্বারা ফিরে এসেছে । হয় বাস্তব ID- র। execveচেক করে না, তবে আপনি যদি সত্যিকারের ব্যবহারকারী আইডি পরিবর্তন করেছেন তবে ব্যর্থ হতে পারে । এছাড়াও forkপরীক্ষা করে না, তবে আপনি যদি সত্যিকারের ইউআইডিতে সর্বাধিক প্রক্রিয়া কোটায় পৌঁছান তবে ব্যর্থ হতে পারে । সাথে গুগল site:man7.orgএখানে আপনার বন্ধু।
দামন

"পিং কমান্ডের একটি সকেট খোলার প্রয়োজন এবং লিনাক্স কার্নেল এর জন্য মূল অধিকার দাবি করে।" এটি আসলে সঠিক নয়। pingএকটি কাঁচা সকেট প্রয়োজন। যেকোনো ব্যবহারকারী করতে পারেন (সাধারণত) একটি সকেট খুলুন, এবং শোনার জন্য, 1024. উপরে
ড্যানিয়েল Farrell

44

আমি কয়েকটি উদাহরণ সহ ধাপে ধাপে ব্যাখ্যা করার চেষ্টা করব।

সংক্ষিপ্ত পটভূমি

প্রতিটি প্রসেসের নিজস্ব 'প্রক্রিয়া পরিচয়পত্র' যা মত বৈশিষ্ট্য অন্তর্ভুক্ত করা হয়েছে হয়েছে PID, PPID, PGID, session IDএবং বাস্তব ও কার্যকর ব্যবহারকারী এবং গ্রুপ আইডি: RUID, EUID, RGID, EGID

আমরা তাদের উপর ফোকাস করব।


পর্ব 1: ইউআইডি এবং জিআইডি বুঝুন

এখন আমি আমার শংসাপত্রগুলি দিয়ে একটি শেলের মধ্যে লগইন করব এবং চালাব:

$ grep $LOGNAME /etc/passwd
rotem:x:1000:1000:rotem,,,:/home/rotem:/bin/bash

আপনি আমার লগনাম (রোটেম), ইউআইডি এবং জিআইডি যা উভয়ই 1000, এবং আমি যে শেলটি লগ ইন করেছি তার মতো অন্যান্য বিবরণ দেখতে পাবেন।


পার্ট 2: আরআইডি এবং আরজিআইডি বুঝতে

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

এটি পরীক্ষা করার জন্য একটি সাধারণ কমান্ড চালাতে দিন:

$ sleep 10 & ps aux | grep 'sleep'

এবং ইউআইডি এবং জিআইডি প্রক্রিয়াটি পরীক্ষা করুন:

$ stat -c "%u %g" /proc/$pid/
1000 1000

এরাই সত্যিকারের ব্যবহারকারী আইডি ( RUID) এবং বাস্তব গোষ্ঠী ID ( RGIDএর) প্রক্রিয়া

(*) ইউআইডি এবং জিআইডি দেখার জন্য অন্যান্য বিকল্পগুলি এবং এটি ওয়ান-লাইনারে পাওয়ার উপায়গুলি দেখুন

আপাতত, এই সত্যটি স্বীকার করুন যে EUIDএবং এর EGIDবৈশিষ্ট্যগুলি 'রিডানডান্ট' এবং কেবল পর্দার সমান RUIDএবং RGIDপিছনে als

পার্ট 3: EID এবং EGID বোঝা Unders

pingকমান্ডটি উদাহরণ হিসাবে নেওয়া যাক ।

whichকমান্ডটি দিয়ে বাইনারি অবস্থানের জন্য অনুসন্ধান করুন এবং তারপরে চালান ls -la:

-rwsr-xr-x  1 root root   64424 Mar 10  2017  ping

আপনি দেখতে পাচ্ছেন যে ফাইলটির মালিক এবং গ্রুপ root। এটি কারণ হ'ল pingকমান্ডটি একটি সকেট খুলতে হবে এবং লিনাক্স কার্নেল এর rootজন্য বিশেষাধিকার দাবি করে।

তবে আমার pingযদি rootসুবিধা না থাকে তবে কীভাবে ব্যবহার করব ?
লক্ষ্য করুন 'S' ফাইল অনুমতি মালিক অংশে 'X পরিবর্তে চিঠি।
এটি নির্দিষ্ট বাইনারি এক্সিকিউটেবল ফাইলগুলির জন্য (যেমন pingএবং sudo) সেটউইড হিসাবে পরিচিত জন্য একটি বিশেষ অনুমতি বিট ।

এখানেই EUIDএবং EGIDখেলতে আসে।
যখন একটি কী হবে হয় setuid বাইনারি মত ping, executes প্রক্রিয়া তার কার্যকরী ব্যবহারকারী আইডি (পরিবর্তনগুলি EUIDডিফল্ট থেকে) RUIDএই বিশেষ বাইনারি এক্সিকিউটেবল ফাইল যা এই ক্ষেত্রে হয় মালিককে -root
এই ফাইলটি setuidকিছুটা সরল সত্য দ্বারা সম্পন্ন হয়েছে ।

কার্নেল এই প্রক্রিয়াটির প্রক্রিয়াটির দিকে তাকিয়ে বিশেষাধিকার পেয়েছে কিনা তা সিদ্ধান্ত নিয়েছে EUID। কারণ এখন EUIDপয়েন্টগুলি root, অপারেশন কার্নেল দ্বারা প্রত্যাখ্যাত হবে না।

লক্ষ্য করুন : জনপ্রিয় সাম্প্রতিক উপর লিনাক্স রিলিজের আউটপুট pingকমান্ড কারণ এটা সত্য যে তারা গৃহীত বিভিন্ন দেখবে লিনাক্স কেপেবিলিটিস এই পরিবর্তে কাছে setuid পদ্ধতির - পড়া - যারা পরিচিত নন জন্য এখানে

পার্ট 4: এসইউডি এবং এসজিআইডি সম্পর্কে কী?

সংরক্ষিত ব্যবহারকারীর আইডি ( SUID) ব্যবহার করা হচ্ছে যখন কোনও সুবিধাযুক্ত প্রক্রিয়া চলছে ( rootউদাহরণস্বরূপ) এবং এটিতে কিছু অনিবদ্ধ কাজ করা দরকার।

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



4
এসইডিতে শেষ প্যারা ব্যতীত পরিষ্কার উত্তর Clear সুবিধাপ্রাপ্ত ও সুবিধাপূর্ণ কার্যগুলিতে বিভ্রান্ত হয়ে পড়ে। একটি উদাহরণ সরবরাহ করা হয় যদি দরকারী। ধন্যবাদ
উপেন্দ্র

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