একটি অনিবদ্ধ এলএক্সসি পাত্রে কী?


20

কোনও লিনাক্স ধারককে (এলএক্সসি ধারক) "অপ্রতিযুক্ত" বলা হলে এর অর্থ কী?

উত্তর:


20

সমাজের নিচুতলার বাসিন্দা LXC পাত্রে ব্যবহার করে বেশী ব্যবহারকারী নামব্যবধান ( )। একটি কার্নেল বৈশিষ্ট্য যে একটি নামস্থান মধ্যে হোস্ট UIDs একটি সীমার মানচিত্র অনুমতি দেয় এমন অর্থাত ভিতরে যার ইউআইডি 0 দিয়ে একটি ব্যবহারকারী আবার বিদ্যমান পারেন।

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

প্রাসঙ্গিক হ'ল:

  1. হোস্ট ব্যবহারকারী ( usermod [-v|-w|--add-sub-uids|--add-sub-gids]) এর জন্য অধস্তন ইউআইডি এবং জিআইডিগুলির একটি ব্যাপ্তি সংজ্ঞায়িত করা হয়েছে
  2. ... এবং এই পরিসরটি ধারক কনফিগারেশনে ম্যাপ করা হয়েছে ( lxc.id_map = ...)

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

তবে rootআপনাকে প্রথমে অধস্তন আইডি সংজ্ঞায়িত করতে হবে। এর মাধ্যমে তৈরি করা ব্যবহারকারীদের থেকে পৃথক adduser, rootডিফল্টরূপে নির্ধারিত অধস্তন আইডিগুলির পরিসর থাকবে না।

আপনার মনে রাখবেন যে আপনার দেওয়া পূর্ণ পরিসরটি আপনার নিয়ন্ত্রণের মধ্যে রয়েছে, সুতরাং আপনার নীচের কনফিগারেশন লাইনের সাথে 3 টি ধারক থাকতে পারে (কেবলমাত্র ইউআইডি ম্যাপিং প্রদর্শিত হবে):

  1. lxc.id_map = u 0 100000 100000
  2. lxc.id_map = u 0 200000 100000
  3. lxc.id_map = u 0 300000 100000

ধরে rootনিলাম যে 100000 থেকে 400000 এর মধ্যে অধস্তন ইউআইডি রয়েছে All আমি যে সমস্ত নথিপত্র পেয়েছি সেগুলি প্রতি ধারক প্রতি 65536 অধীনস্থ আইডি ব্যবহার করার পরামর্শ দেয়, কেউ কেউ এটিকে আরও মানব-পঠনযোগ্য করে তোলার জন্য 100000 ব্যবহার করে use

অন্য কথায়: আপনাকে প্রতিটি ধারককে একই পরিসর নির্ধারণ করতে হবে না।

4 বিলিয়ন (~ 2^32) এর অধিক সম্ভাব্য অধস্তন আইডি দিয়ে যার অর্থ আপনার হোস্ট ব্যবহারকারীদের কাছে অধস্তন রেঞ্জগুলি পরিচালনা করার সময় আপনি উদার হতে পারেন।

বেসরকারী পাত্রে মালিকানাধীন এবং মূল দ্বারা চালিত

আবার তা ঘষতে। একটি অনিবদ্ধ এলএক্সসি অতিথিকে হোস্টে কোনও অনিবদ্ধ ব্যবহারকারী দ্বারা চালানো দরকার হয় না।

অধীনস্থ ইউআইডি / জিআইডি ম্যাপিংয়ের সাথে আপনার ধারকটি কনফিগার করা:

lxc.id_map = u 0 100000 100000
lxc.id_map = g 0 100000 100000

যেখানে rootহোস্টের ব্যবহারকারী তার অধীনস্থ আইডি পরিসীমাটির মালিকানা দেয়, আপনাকে অতিথিদের আরও ভালভাবে আবদ্ধ করতে দেয়।

তবে এ জাতীয় দৃশ্যে একটি অতিরিক্ত অতিরিক্ত সুবিধা রয়েছে (এবং হ্যাঁ, আমি এটি যাচাই করেছি তা যাচাই করেছি): আপনি সিস্টেমের সূচনাতে আপনার ধারকটিকে স্বয়ংক্রিয়ভাবে চালু করতে পারেন।

সাধারণত LXC সম্পর্কিত তথ্যের জন্য ওয়েবে স্ক্রোল করার সময় আপনাকে জানানো হবে যে কোনও অনিবদ্ধ এলএক্সসি অতিথিকে অটোস্টার্ট করা সম্ভব নয়। তবে, কেবলমাত্র সেই কনটেইনারগুলির জন্য কেবলমাত্র ডিফল্টরূপে সত্য যা কনটেইনারগুলির জন্য সিস্টেম-ব্যাপী স্টোরেজে নেই (সাধারণত এমন কিছু /var/lib/lxc)। যদি সেগুলি হয় (যার অর্থ সাধারণত তারা মূল দ্বারা তৈরি হয়েছিল এবং মূল দ্বারা শুরু হয়েছিল) তবে এটি সম্পূর্ণ ভিন্ন গল্প।

lxc.start.auto = 1

কাজটি বেশ সুন্দরভাবে সম্পাদন করবে, একবার আপনি এটি আপনার ধারক কনফিগারেশনে রাখবেন।

অনুমতি এবং কনফিগারেশন ডান এখনই

আমি এটির সাথে নিজেকে কিছুটা লড়াই করেছি, তাই আমি এখানে একটি বিভাগ যুক্ত করছি।

কনফিগারেশন স্নিপেটের মাধ্যমে অন্তর্ভুক্ত রয়েছে lxc.includeযা সাধারণত নাম দ্বারা যায় /usr/share/lxc/config/$distro.common.conf(যেখানে $distroকোনও ডিস্ট্রোর নাম কোথায় ) /usr/share/lxc/config/$distro.userns.confআপনার সিস্টেমে এটিও রয়েছে কিনা তাও পরীক্ষা করে দেখতে হবে এবং এটিও অন্তর্ভুক্ত করা উচিত। উদাহরণ:

lxc.include = /usr/share/lxc/config/ubuntu.common.conf
lxc.include = /usr/share/lxc/config/ubuntu.userns.conf

অধস্তন আইডি ম্যাপিংগুলি যোগ করুন:

lxc.id_map = u 0 100000 65535
lxc.id_map = g 0 100000 65535

যার অর্থ হ'ল হোস্ট ইউআইডি 100000 এলএক্সসি অতিথির ব্যবহারকারীর নেমস্পেসের root অভ্যন্তরে

এখন অনুমতিগুলি সঠিক কিনা তা নিশ্চিত করুন। আপনার অতিথির নাম যদি পরিবেশের ভেরিয়েবলে সংরক্ষণ করা হয় তবে $lxcguestআপনি নিম্নলিখিতটি চালাতে চান:

# Directory for the container
chown root:root $(lxc-config lxc.lxcpath)/$lxcguest
chmod ug=rwX,o=rX $(lxc-config lxc.lxcpath)/$lxcguest
# Container config
chown root:root $(lxc-config lxc.lxcpath)/$lxcguest/config
chmod u=rw,go=r $(lxc-config lxc.lxcpath)/$lxcguest/config
# Container rootfs
chown 100000:100000 $(lxc-config lxc.lxcpath)/$lxcguest/rootfs
chmod u=rwX,go=rX $(lxc-config lxc.lxcpath)/$lxcguest/rootfs

আপনার প্রথম প্রয়াসের পরে কিছু অনুমতি-সম্পর্কিত ত্রুটি হওয়ার পরে এটি আপনাকে ধারকটি চালানোর অনুমতি দেয়।


4
ভাল উত্তর - তবে lxcএই ধরণের জিনিসটির জন্য প্রয়োজনীয়তা নয়। আপনি এই util-linuxসরঞ্জামটি ব্যবহার করে যেকোন ধরণের নেমস্পেসের ধারক তৈরি করতে পারেন unshare। আপনি util-linuxসরঞ্জামটি ব্যবহার করে বলা পাত্রে প্রবেশ করতে পারেন nsenter। পরবর্তী সরঞ্জামটি আপনাকে ইতিমধ্যে তৈরি করা পাত্রে এটি ছাড়াই চলমান প্রক্রিয়াগুলি যুক্ত করতে দেয়। নেমস্পেস সমর্থনটি কার্নেল-এ প্রয়োগ করা হয়েছে।
মাইক্রজারভ 14

4
@ মাইক্রোজার: আপনার ব্যবহারকারীর ব্যবহারের জন্য এলএক্সসি দরকার নেই ? আমি জানি সেটা. আমি আরও জানি ডকারের এখন এই সুবিধাগুলি ব্যবহারের নিজস্ব গ্রন্থাগার রয়েছে। তবে কীভাবে আপনি এলএক্সসির দেওয়া সুবিধাগুলির সহায়তা ছাড়াই পুরো সিস্টেমটি ধারক করে তুলবেন? এবং আপনি এটা কেন করবেন? আমি বলতে চাইছি একটি একক অ্যাপ্লিকেশন রয়েছে এবং chrootএটির সাহায্যে মিলিত হতে পারে তবে এলএক্সসি পুরো সিস্টেমটি ধারক করার জন্য বিভিন্ন নামের স্পেস (ইউটিএস, মাউন্ট ইত্যাদি ...) একত্রিত করে।
0xC0000022L

2
ঠিক আছে ... যেমনটি আমি বলেছি, unshareইতিমধ্যে এটি বিভিন্ন / বিভিন্ন নেমস্পেসগুলির জন্য যেকোনও জন্য প্রশংসিত হয় - এবং এমনকি আপনাকে /procএকটি একক ক্লাইভ-স্যুইচ সহ একটি পৃথক, প্রাইভেট মাউন্ট পাবেন। যদি আপনার একক অ্যাপ্লিকেশনটি হয় initএবং আপনার chrootহয় initramfsতবে আপনি সেকেন্ডের ফ্ল্যাটে পুরো পাত্রে পান।
মাইক্রজারভ

0

0xC0000022L এ অনুসরণ করতে, যার সমাধানটি আমার পক্ষে ভাল কাজ করেছে, আমি প্রয়োজনীয় বর্ধিত পরিবর্তনগুলি স্বয়ংক্রিয় করতে একটি বর্ধিত - বিড.পিড.পিএল পার্ল স্ক্রিপ্ট লিখেছি যাতে LXC ধারকগুলির মধ্যে ফাইলগুলি সঠিকভাবে ম্যাপ করা যায়।

এটি ব্যতীত, প্রস্তাবিত সেটআপের সাহায্যে, প্রধান হোস্টের 0 / রুটের অন্তর্গত LXC ধারক রুটফের মধ্যে একটি ফাইল, LXC ধারকটির মধ্যেই, 65534 / কেউ ম্যাপ করা হবে। LXC ধারক মধ্যে 0 / মূল ম্যাপ করতে, তাদের হোস্টের 100000 এর মধ্যে থাকা আবশ্যক।

এটি এখানে বর্ণিত হয়েছে https://yeupou.wordpress.com/2017/06/23/setting-up-lxc-containers-with-maped-giduid/ এর সাথে এবং স্ক্রিপ্টটি সরাসরি গিটল্যাব https://gitlab.com এ পাওয়া যাবে /yeupou/stalag13/blob/master/usr/local/bin/increase-uid-gid.pl

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