কোনও লিনাক্স ধারককে (এলএক্সসি ধারক) "অপ্রতিযুক্ত" বলা হলে এর অর্থ কী?
কোনও লিনাক্স ধারককে (এলএক্সসি ধারক) "অপ্রতিযুক্ত" বলা হলে এর অর্থ কী?
উত্তর:
সমাজের নিচুতলার বাসিন্দা LXC পাত্রে ব্যবহার করে বেশী ব্যবহারকারী নামব্যবধান ( userns )। একটি কার্নেল বৈশিষ্ট্য যে একটি নামস্থান মধ্যে হোস্ট UIDs একটি সীমার মানচিত্র অনুমতি দেয় এমন অর্থাত ভিতরে যার ইউআইডি 0 দিয়ে একটি ব্যবহারকারী আবার বিদ্যমান পারেন।
কিছুক্ষণের জন্য অনিবদ্ধ এলএক্সসি পাত্রে আমার প্রাথমিক ধারণার বিপরীতে, এর অর্থ এই নয় যে ধারকটি একটি অনিবদ্ধ হোস্ট ব্যবহারকারী দ্বারা মালিকানাধীন হতে হবে। এটি কেবল একটি সম্ভাবনা।
প্রাসঙ্গিক হ'ল:
usermod [-v|-w|--add-sub-uids|--add-sub-gids]
) এর জন্য অধস্তন ইউআইডি এবং জিআইডিগুলির একটি ব্যাপ্তি সংজ্ঞায়িত করা হয়েছেlxc.id_map = ...
)এমনকি এমনকি root
অনিবদ্ধ পাত্রেও মালিক হতে পারে, যেহেতু হোস্টের কনটেইনার প্রক্রিয়াগুলির কার্যকর ইউআইডি ম্যাপিং দ্বারা সংজ্ঞায়িত সীমার মধ্যেই শেষ হয়ে যাবে।
তবে root
আপনাকে প্রথমে অধস্তন আইডি সংজ্ঞায়িত করতে হবে। এর মাধ্যমে তৈরি করা ব্যবহারকারীদের থেকে পৃথক adduser
, root
ডিফল্টরূপে নির্ধারিত অধস্তন আইডিগুলির পরিসর থাকবে না।
আপনার মনে রাখবেন যে আপনার দেওয়া পূর্ণ পরিসরটি আপনার নিয়ন্ত্রণের মধ্যে রয়েছে, সুতরাং আপনার নীচের কনফিগারেশন লাইনের সাথে 3 টি ধারক থাকতে পারে (কেবলমাত্র ইউআইডি ম্যাপিং প্রদর্শিত হবে):
lxc.id_map = u 0 100000 100000
lxc.id_map = u 0 200000 100000
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
আপনার প্রথম প্রয়াসের পরে কিছু অনুমতি-সম্পর্কিত ত্রুটি হওয়ার পরে এটি আপনাকে ধারকটি চালানোর অনুমতি দেয়।
chroot
এটির সাহায্যে মিলিত হতে পারে তবে এলএক্সসি পুরো সিস্টেমটি ধারক করার জন্য বিভিন্ন নামের স্পেস (ইউটিএস, মাউন্ট ইত্যাদি ...) একত্রিত করে।
unshare
ইতিমধ্যে এটি বিভিন্ন / বিভিন্ন নেমস্পেসগুলির জন্য যেকোনও জন্য প্রশংসিত হয় - এবং এমনকি আপনাকে /proc
একটি একক ক্লাইভ-স্যুইচ সহ একটি পৃথক, প্রাইভেট মাউন্ট পাবেন। যদি আপনার একক অ্যাপ্লিকেশনটি হয় init
এবং আপনার chroot
হয় initramfs
তবে আপনি সেকেন্ডের ফ্ল্যাটে পুরো পাত্রে পান।
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
lxc
এই ধরণের জিনিসটির জন্য প্রয়োজনীয়তা নয়। আপনি এইutil-linux
সরঞ্জামটি ব্যবহার করে যেকোন ধরণের নেমস্পেসের ধারক তৈরি করতে পারেনunshare
। আপনিutil-linux
সরঞ্জামটি ব্যবহার করে বলা পাত্রে প্রবেশ করতে পারেনnsenter
। পরবর্তী সরঞ্জামটি আপনাকে ইতিমধ্যে তৈরি করা পাত্রে এটি ছাড়াই চলমান প্রক্রিয়াগুলি যুক্ত করতে দেয়। নেমস্পেস সমর্থনটি কার্নেল-এ প্রয়োগ করা হয়েছে।