এলএক্সসি পাত্রে ভিতরে এবং বাইরে ব্যবহারকারীর অনুমতি?


26

আমি আমার সার্ভারে ডকার এলএক্সসি পাত্রে কিছু পরিষেবা চালাচ্ছি এবং আমি তাদের সাথে আসলে গুরুতর জিনিসগুলি শুরু করছি।

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

স্পষ্টতই, ধারনাটি (যেমন mysql:mysql) মাইএসকিউএলকে তার নিজস্ব ব্যবহারকারী হিসাবে চালানো এবং সেই ডিরেক্টরিতে এটি পড়ার এবং লেখার অধিকার দেওয়ার ধারণা। আমি ধরে নিই যে এটি মোটামুটি সোজা হবে, কেবল chmodডিরেক্টরী ইনিং, ইত্যাদি But তবে এটি কীভাবে ধারকটির বাইরে কাজ করে ? এখন আমার কাছে এই ডকারের ডেটা ভাগ করা ভলিউম রয়েছে যা 'ডেটা' বলে, আমি কীভাবে এতে অ্যাক্সেস নিয়ন্ত্রণ পরিচালনা করব?

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

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


2
ব্যবহারকারীদের সাথে (তবে এটিরdocker জন্য কোনও সমর্থন এখনও নেই) LXC ধারকটি অননুমোদিত ব্যবহারকারী হিসাবে চালানো যেতে পারে। অন্যথায় rootধারকটির ভিতরে থাকা ব্যবহারকারীটি কনটেইনারটি যথাযথভাবে কনফিগার করা থাকলে সম্ভাব্যভাবে ভেঙে যেতে পারে। অর্থাত্ rootহোস্ট অন rootকোনও সুবিধাযুক্ত এলএক্সসি পাত্রে ধারক স্থানে রয়েছে।
0xC0000022L

1
rootযাইহোক , অপ্রয়োজনীয় পাত্রে চালাতে পারেন । গুরুত্বপূর্ণ যে জন্য একটি ম্যাপিং হয় userns সংজ্ঞায়িত করা হয়।
0xC0000022L

উত্তর:


21

যেহেতু 0.9 ডকারের প্রকাশটি বাদ পড়েছে LXCএবং তার নিজস্ব প্রয়োগের পরিবেশটি ব্যবহার করেছে libcontainer,। আপনার প্রশ্নটি বেশ পুরানো তবে আমার ধারণা আমার উত্তরটি এখনও আপনি যে সংস্করণটি ব্যবহার করছেন তা প্রয়োগ করে।

দ্রুত উত্তর: ভলিউম অনুমতি বোঝার জন্য আপনাদের মধ্যে উপমা গ্রহণ করতে পারেন mount --bind Host-Dir Container-Dir। সুতরাং আপনার প্রয়োজনীয়তা পূরণের জন্য আপনি অনুমতি পরিচালনার জন্য যে কোনও প্রচলিত পদ্ধতি ব্যবহার করতে পারেন। আমার ধারণা এসিএল আপনার যা প্রয়োজন

দীর্ঘ উত্তর: সুতরাং আপনার উদাহরণ হিসাবে আমাদের কাছে একটি ভলিউম সহ ডক নামের একটি ধারক রয়েছে /data

docker run -tid --name dock -v /usr/container/Databases/:/data \
    centos:latest /bin/bash

ধারকটির ভিতরে আমাদের মাইএসকিউএল সার্ভারটিকে /dataএর ডেটা ডিরেক্টরি হিসাবে ব্যবহার করার জন্য কনফিগার করা হয়েছে । সুতরাং আমরা /dataধারক ভিতরে আমাদের ডাটাবেস আছে। এবং হোস্ট ওএসের ধারকটির বাইরে, আমরা এই /dataভলিউমটি মাউন্ট করেছি /usr/container/Databases/এবং আমরা একটি সাধারণ ব্যবহারকারী ববকে ডেটাবেসগুলির ব্যাকআপ নেওয়ার জন্য নিযুক্ত করি। হোস্ট মেশিন থেকে আমরা ব্যবহারকারীর ববের জন্য এসিএলগুলি কনফিগার করব ।

useradd -u 3000 bob
usermod -R o=--- /usr/container/Databases/
setfacl -R -m u:bob:rwx /usr/container/Databases/
setfacl -R -d -m u:bob:rwx /usr/container/Databases/

এটি পরীক্ষা করে দেখতে ব্যবহারকারীর ববটির সাথে একটি ব্যাকআপ নেব ।

su - bob
tar -cvf container-data.tar /usr/container/Databases/

এবং টারটি তালিকাভুক্ত করবে এবং আপনি দেখতে পাবেন যে আমাদের ব্যবহারকারীর সমস্ত ফাইল অ্যাক্সেস করতে সক্ষম হয়েছিল।

কনটেইনারটির ভিতরে থেকে যদি আপনি যাচাই করেন তবে আপনি getfaclখেয়াল করতে পারবেন যে ববের পরিবর্তে এটি 3000 দেখায় This । এখন আপনি যদি আপনার ধারকটিতে একটি ব্যবহারকারী তৈরি করেন তবে আপনি useradd -u 3000 bobখেয়াল করবেন যে এখন getfacl3000 এর পরিবর্তে নাম ববটি দেখায়।

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


উবুন্টুর পক্ষে ডকারের কমপক্ষে একটি প্যাকেজের নাম রয়েছে lxc-docker, এর অর্থ এটি LXC ব্যবহার করছে না? উপরোক্ত এখনও এই ক্ষেত্রে প্রযোজ্য?
নাফটুলি কে

@ নাফতুলিzviKay ওহ, দুঃখিত। তারপরে এটি এলএক্সসি ব্যবহার করতে হবে (আমার ধারণা apt-get infoবিশদ থাকতে পারে) কারণ উবুন্টুতে আরও একটি প্যাকেজ রয়েছে docker.ioযা আমি ব্যবহার করেছি। আমি দীর্ঘকাল উবুন্টুর সাথে যাইনি, যেহেতু ডকার এবং রেডহ্যাট এখন হাত মিলিয়েছে। সুতরাং বেস ওএস হিসাবে আরএইচইএল বা সেন্টোসের সাথে যেতে আরও ভাল, বা অন্যথায় আপনি কেবল এলএক্সসি ব্যবহার করতে পারেন।
সূচনা

এমনকি lxc-dockerএই হিসাবে পরিকল্পনা হিসাবে কাজ বলে মনে হচ্ছে। আমি 3000 এর ইউআইডি সহ একটি ব্যবহারকারী তৈরি করেছি, একটি ভাগ করা ভলিউমে কোনও ফাইল স্পর্শ করেছি এবং হোস্ট ওএস থেকে দেখতে পেলাম যে ফাইলটি বিদ্যমান এবং 3000 আইডি সহ কোনও ব্যবহারকারী তার মালিকানাধীন।
নাফতুলি কে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.