যখন কোনও প্রক্রিয়া একটি নির্দিষ্ট গ্রুপ হিসাবে চলছে তখন লিনাক্স অনুমতিগুলি কীভাবে কাজ করবে?


12

এটি এমন একটি বিষয় যা আমি খুব বেশি তথ্য সন্ধান করতে পারি নি তাই কোনও সাহায্যের প্রশংসা করা হবে।

আমার বোঝাপড়া এইভাবে। নিম্নলিখিত ফাইলটি নিন:

-rw-r-----  1 root        adm   69524 May 21 17:31 debug.1

ব্যবহারকারী philএই ফাইলটি অ্যাক্সেস করতে পারবেন না:

phil@server:/var/log$ head -n 1 debug.1
cat: debug.1: Permission denied

যদি গ্রুপে philযুক্ত করা হয় তবে admতা করতে পারে:

root@server:~# adduser phil adm
Adding user `phil' to group `adm' ...
Adding user phil to group adm
Done.
phil@server:/var/log$ head -n 1 debug.1
May 21 11:23:15 server kernel: [    0.000000] DMI: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.7.5.1-0-g8936dbb-20141113_115728-nilsson.home.kraxel.org 04/01/2014

তবে, একটি প্রক্রিয়া স্পষ্টভাবে সেটিং থাকাকালীন শুরু হয় user:groupথেকে phil:philফাইল পড়তে পারে না। প্রক্রিয়া এভাবে শুরু হয়েছিল:

nice -n 19 chroot --userspec phil:phil / sh -c "process"

প্রক্রিয়াটি হিসাবে শুরু করা হয় phil:adm, এটি ফাইলটি পড়তে পারে:

nice -n 19 chroot --userspec phil:adm / sh -c "process"

সুতরাং প্রশ্নটি আসলে:

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


নোটটি শেলটির সাথে কিছু করার নেই: শেল দ্বারা অনুমতিগুলি প্রক্রিয়া করা হয় না। যদি তারা নতুন শেল লিখে আপনি রুট পেতে পারেন।
ctrl-alt-delor

উত্তর:


9

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

একটি উদাহরণ দেখুন। আমার কাছে একজন ব্যবহারকারী বলা হয়েছে userএবং সে এই গ্রুপে রয়েছে student:

root@host:~$ id user
uid=10298(user) gid=20002(student) groups=20002(student)

আমার কাছে নিম্নরূপ একটি ফাইল রয়েছে:

root@host:~$ ls -l file
-rw-r----- 1 root root 9 Mai 29 13:39 file

তিনি এটি পড়তে পারবেন না:

user@host:~$ cat file
cat: file: Permission denied 

এখন, আমি catব্যবহারকারী userএবং গোষ্ঠীর প্রসঙ্গে প্রক্রিয়াটি সম্পাদন করতে পারি root। এখন, বিড়াল প্রক্রিয়াটির প্রয়োজনীয় অনুমতি রয়েছে:

root@host:~$ chroot --userspec user:root / sh -c "cat file"
file contents

কী idবলে তা দেখতে আকর্ষণীয় :

root@host:~$ chroot --userspec user:root / sh -c "id"
uid=10298(user) gid=0(root) groups=20002(student),0(root)

এইচএম, তবে ব্যবহারকারী userসেই গোষ্ঠীতে নেই ( root)। কোথা idথেকে এর তথ্য পাওয়া যায়? যদি যুক্তি ছাড়াই ডাকা হয়, idসিস্টেম কলগুলি getuid(), getgid()এবং getgroups()। সুতরাং নিজের প্রক্রিয়া প্রসঙ্গে idমুদ্রিত হয়। সেই প্রসঙ্গে আমরা পরিবর্তন করেছি --userspec

যখন একটি আর্গুমেন্টের সাথে ডাকা হয়, idকেবল ব্যবহারকারীর গ্রুপ অ্যাসাইনমেন্ট নির্ধারণ করে:

root@host:~$ chroot --userspec user:root / sh -c "id user"
uid=10298(user) gid=20002(student) groups=20002(student)

আপনার প্রশ্নের উত্তর:

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

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

সুতরাং, এটি আসলে ব্যবহারকারী নয়, ফাইলটি পড়ার কোনও অনুমতি নেই, এটির প্রক্রিয়াটির অনুমতি ( cat)। তবে প্রক্রিয়াটি কলিং ব্যবহারকারীর ইউআইডি / গিড দিয়ে চলে।

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


2
একটি প্রক্রিয়াটিতে সাধারণত প্রাথমিক গোষ্ঠীর শংসাপত্র থাকে। এটা তোলে মাধ্যমিক দলের পরিচয়পত্র অ্যাক্সেস লাভ করতে পারেন EUIDকল করে অংশ initgroups(3)। তবে initgroups(3)এটি একটি তুলনামূলকভাবে ব্যয়বহুল অপারেশন, যেহেতু এটি সমস্ত গ্রুপকে গণনা করা দরকার। এই কারণে, প্রক্রিয়াগুলি কেবল তখন কল করে initgroups(3)যদি তাদের কাছে এটি করার একটি নির্দিষ্ট কারণ থাকে।
lcd047

6

--userspecঅপশনটি ব্যবহার করে chrootব্যবহারকারী এবং একক গোষ্ঠীকে নির্দিষ্ট করে চলার সময় ব্যবহার করতে হবে chroot। পরিপূরক গোষ্ঠীগুলি সংজ্ঞায়িত করতে আপনাকে --groupsবিকল্পটিও ব্যবহার করতে হবে ।

ডিফল্টরূপে প্রক্রিয়াগুলি তাদের চালিত ব্যবহারকারীর প্রাথমিক এবং পরিপূরক গোষ্ঠীগুলির উত্তরাধিকার সূত্রে প্রাপ্ত হয় তবে --userspecআপনি chmodব্যবহার করে নির্দিষ্ট একক গোষ্ঠীটি ব্যবহার করে ওভাররাইড করতে বলছেন ।

লিনাক্সে অনুমতি সম্পর্কিত বিস্তারিত ডকুমেন্টেশন credentials(7)ম্যানপেজে পাওয়া যায় ।


2

আপনি লিনাক্স এ লগইন করার পরে, লগইন প্রক্রিয়া - তারপরে আপনি phil হিসাবে লগ ইন করতে পারবেন তা যাচাই করে - ফিলের uid এবং এর সাথে সম্পর্কিত গ্রুপগুলি পেয়ে যায় এবং সেগুলি আপনার শেল হিসাবে শুরু হওয়া প্রক্রিয়া হিসাবে সেট করে। Uid, gid এবং পরিপূরক গোষ্ঠীগুলি প্রক্রিয়াটির একটি সম্পত্তি।

এর পরে যে কোনও প্রোগ্রাম শুরু হয়েছিল, এটি সেই শেলের বংশধর এবং কেবল cred শংসাপত্রগুলির একটি অনুলিপি গ্রহণ করে * এটি ব্যাখ্যা করে যে কেন ব্যবহারকারীর অধিকার পরিবর্তন করা চলমান প্রক্রিয়াগুলিকে প্রভাবিত করে না। পরিবর্তনগুলি পরবর্তী লগইনে নেওয়া হবে, তবে।

* ব্যতিক্রম হ'ল এমন প্রোগ্রাম যাঁর সেটুইড বা সেটগিড বিট সেট করা থাকে, যার আলাদা কার্যকর ব্যবহারকারী আইডি থাকবে । এটি su (1) এ উদাহরণস্বরূপ ব্যবহৃত হয় তাই এটি rootকার্যকর করার পরেও অধিকার সহ চালাতে পারে phil

philআপনি এই admগোষ্ঠীতে যোগ করার পরে , তিনি দৌড়াতে পারবেন su philএবং suমূল হিসাবে চালিত হবেন - যাচাই করুন যে তিনি প্রকৃতপক্ষে ফিলের পাসওয়ার্ড সরবরাহ করেছেন এবং তারপরে তাকে ইউইড , জিড এবং পরিপূরক গোষ্ঠী ফিলের সাথে একটি শেলের মধ্যে নামিয়ে দিন il এবং গোষ্ঠীতে ব্যবহারকারী যুক্ত করার পরে এটি করা হয়ে গেলে, শেলটি ইতিমধ্যে admগ্রুপে থাকবে।

আমি পৃথক ব্যবহারকারী হিসাবে চলার জন্য ক্রুট (1) সবচেয়ে উপযুক্ত প্রোগ্রাম হিসাবে বিবেচনা করি না , তবে এটি অবশ্যই কাজটি সম্পাদন করে। প্যারামিটারটি --userspec phil:philএটি uid philএবং এর জিড দিয়ে চালিত করে phil। কোনও অতিরিক্ত গোষ্ঠী সেট করা নেই (তার জন্য আপনি সরবরাহ করবেন --groups)। সুতরাং, বাচ্চাদের প্রক্রিয়া admদলে নেই।

আপনার প্রক্রিয়াটিকে ফিল হিসাবে চালানোর জন্য আরও সাধারণ উপায় su phil -c "process"। হিসাবে suলোড ইউআইডি, ব্যবহারকারী ডাটাবেসের তথ্য থেকে gid এবং সম্পূরক গোষ্ঠী, processএকই পরিচয়পত্র ব্যবহারকারী বর্তমানে রয়েছে থাকবে।

¹ এটি লগইন (1) , এসএসডিডি, সু, জিডিবি বা অন্যান্য প্রোগ্রাম হতে পারে। এছাড়াও, এটি প্যাম মডিউলগুলির মাধ্যমে পরিচালিত হতে পারে।

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