ব্যবহারকারীকে কেবল একটি ডিরেক্টরিতে পঠন / লেখার অ্যাক্সেস দিন


18

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

sudo adduser abcd
sudo groupadd abcdefg
chown -R .abcdefg /var/www/allowfolder
chmod -R g+rw /var/www/allowfolder
usermod -a -G comments abcd

উপরের কাজটি মনে হচ্ছে, তবে এটি ব্যবহারকারীর বাকী সার্ভারে কেবল পঠনযোগ্য অ্যাক্সেস দেয়।

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


2
সংক্ষিপ্ত উত্তর: একটি ক্রুট ব্যবহার করুন।
ক্রিস ডাউন

@ ক্রিস কেয়ার উত্তরে এর বিস্তারিত জানাতে চান? আমি এবং মণীশ এটি নিয়ে লড়াই করে যাচ্ছিলাম এবং এটি কার্যকর হতে পারে বলে মনে হচ্ছে না।
পূর্বাবস্থায় ফিরে

mysqlপ্রোগ্রাম কোথায় অবস্থিত হবে? ব্যবহারকারীর এটি পড়তে সক্ষম হতে হবে, এবং এটির প্রয়োজনীয় সমস্ত গ্রন্থাগার এবং ডেটা ফাইল।
গিলস

@ গিলস হুম। এটি এপটি-গেট থেকে একটি স্ট্যান্ডার্ড মাইএসকিএল ইনস্টল, যতদূর আমি বলতে পারি (আমার সিস্টেম নয়, এটি পূর্বাবস্থায় নেই)।
মণীশার্থ

উত্তর:


18

নেতিবাচক এসিএল

আপনি সেট করে ফাইলসিস্টেম কিছু অংশে অ্যাক্সেস করা থেকে একটি ব্যবহারকারী প্রতিরোধ করতে পারি অ্যাক্সেস নিয়ন্ত্রন তালিকা । উদাহরণস্বরূপ, ব্যবহারকারী abcdএটির অধীনে যে কোনও ফাইল অ্যাক্সেস করতে পারবেন না তা নিশ্চিত করার জন্য /home:

setfacl -m user:abcd:0 /home

এই পদ্ধতিটি সহজ, তবে আপনি অবশ্যই অ্যাক্সেস abcdকরতে সক্ষম হবেন না এমন সমস্ত কিছুতে অ্যাক্সেস আটকাতে হবে।

chroot

যা abcdদেখতে পারে তার উপর ইতিবাচক নিয়ন্ত্রণ পেতে একটি ক্রুট সেট আপ করুন , অর্থাৎ ব্যবহারকারীকে ফাইল-সিস্টেমের একটি সাবট্রিতে সীমাবদ্ধ করুন।

ক্রুটের নীচে আপনার ব্যবহারকারীর প্রয়োজনীয় সমস্ত ফাইল তৈরি করতে হবে (উদাহরণস্বরূপ mysqlএবং এর সমস্ত নির্ভরতা, আপনি যদি ব্যবহারকারীটি চালাতে সক্ষম হন তবে mysql)। বলো ক্রুটের দিকে পথ /home/restricted/abcd; mysqlপ্রোগ্রাম প্রাপ্তিসাধ্য অধীনে হতে হবে /home/restricted/abcd। Chroot এর বাইরে একটি প্রতীকী লিঙ্কটি দেখানো ভাল না কারণ প্রতীকী লিঙ্ক লুকআপটি ক্রুট জেল দ্বারা প্রভাবিত হয়। লিনাক্সের অধীনে, আপনি বাইন্ড মাউন্টগুলির ভাল ব্যবহার করতে পারেন:

mount --rbind /bin /home/restricted/abcd/bin
mount --rbind /dev /home/restricted/abcd/dev
mount --rbind /etc /home/restricted/abcd/dev
mount --rbind /lib /home/restricted/abcd/lib
mount --rbind /proc /home/restricted/abcd/proc
mount --rbind /sbin /home/restricted/abcd/sbin
mount --rbind /sys /home/restricted/abcd/sys
mount --rbind /usr /home/restricted/abcd/usr

আপনি ফাইলগুলি অনুলিপি করতে পারেন (তবে তারপরে আপনার যত্ন নিতে হবে যে সেগুলি আপ টু ডেট রয়েছে)।

ব্যবহারকারীকে ক্রুটে সীমাবদ্ধ করতে, একটি ChrootDirectoryনির্দেশিকা যুক্ত করুন /etc/sshd_config

Match User abcd
    ChrootDirectory /home/restricted/abcd

আপনি এটি দিয়ে পরীক্ষা করতে পারেন: chroot --userspec=abcd /home/restricted/abcd/ /bin/bash

সুরক্ষা কাঠামো

আপনি সেলইনাক্স বা অ্যাপআর্মার মতো সুরক্ষা ফ্রেমওয়ার্কগুলিও ব্যবহার করতে পারেন। উভয় ক্ষেত্রেই, আপনি কোনও গর্ত ছাড়ছেন না তা নিশ্চিত করার জন্য আপনাকে মোটামুটি সূক্ষ্ম কনফিগারেশন লিখতে হবে।


গ্রুপ তৈরির মাধ্যমে কোনও নির্দিষ্ট ডিরেক্টরিতে পড়ার এবং লেখার অনুমতি দেওয়ার আরও সহজ উপায় কি সম্ভব নয়? উদাহরণস্বরূপ তিনি একটি নতুন গোষ্ঠী তৈরি করতে পারেন এবং ডিরেক্টরি গ্রুপকে তৈরি করা গোষ্ঠীটিকে গ্রুপ তৈরি করতে এবং ব্যবহারকারীকে গ্রুপে যুক্ত করতে chown ব্যবহার করতে পারেন। শেষ পর্যন্ত ডিরেক্টরিগুলি পড়তে এবং গ্রুপগুলিতে অনুমতি লেখার অনুমতি দিন।
কাসিম

@ কাসিম এটির জন্য প্রয়োজনীয় যে সমস্ত ফাইলের অনুমতি এবং মালিকানা সেট করা প্রয়োজন। এমন অনেকগুলি জিনিস রয়েছে যা ভুল হতে পারে (অন্য কোথাও থেকে অনুলিপি করা ফাইল বা সংরক্ষণাগার থেকে তাদের অনুমতি সংরক্ষণের সাথে সংরক্ষণ করা ফাইল, অন্য গ্রুপের অন্তর্ভুক্ত হওয়া ফাইলগুলি, যে ফাইলগুলি গ্রুপ-পঠনযোগ্য না হওয়া উচিত, ব্যবহারকারীরা ভুল করে বা করতে পারে ' গোষ্ঠীগুলির অ্যাক্সেসিবিলিটি পছন্দসইভাবে স্থিত থাকে তা নিশ্চিত করার জন্য উদ্বিগ্ন হবেন না ...) যে গোষ্ঠীগুলি এই সমস্যাটি সত্যিই সমাধান করে না।
গিলস 21'11

আমি বোঝাতে চাইছি না যে ডিরেক্টরিতে গ্রুপের অনুমতিগুলি এমনভাবে সেট করা থাকে যেখানে কোনও ব্যবহারকারী ডিরেক্টরিতে "সিডি" বা ডিরেক্টরিতে "সিডি" করতে না পারলে কীভাবে ফাইলগুলির নিজস্ব অনুমতি থাকতে হবে see
কাসিম

@ কাসিমের প্রতিটি ফাইল /var/www/allowfolderএবং এর উপ-ডিরেক্টরিগুলি কেবল /var/www/allowfolderনিজেরাই নয়, অ্যাক্সেসযোগ্য হতে হবে । এবং বিপরীতভাবে অন্যান্য ফাইলগুলি অ্যাক্সেসযোগ্য হবে না। আসলে ফাইল অনুমতি এবং এসিএল ভিত্তিক একটি সমাধান সম্পূর্ণরূপে প্রয়োজনীয়তাগুলি পূরণ করতে পারে না: এটি প্রদত্ত নামটির অধীনে উপস্থিত রয়েছে কিনা তা অন্তত ব্যবহারকারীকে পরীক্ষা করার অনুমতি দেয় /var/www, কারণ তাদের /var/wwwঅ্যাক্সেসের জন্য এক্স অনুমতি থাকা দরকার /var/www/allowfolder
les

ওহ ঠিক আছে আমি দেখতে পাচ্ছি কিন্তু যদি আমরা এ থেকে / var ডিরেক্টরি বাদ দিই এবং বলতে পারি যে আমরা / হোম / ব্যবহারকারীর ডিরেক্টরিতে একটি সাধারণ ডিরেক্টরি সম্পর্কে কথা বলছি?
কাসিম

5

আপনার ব্যবহার করা উচিত chrootchrootকমান্ড রুট ডিরেক্টরিটি যে সব শিশু প্রসেস দেখতে পরিবর্তন। এটি কীভাবে কাজ করে তা প্রদর্শনের জন্য আমি একটি উদাহরণ দেব।

ঘটনাস্থলে এটি লেখা হয়েছিল; আমি এখনই কোনও ইউনিক্স মেশিনের সামনে নেই। এই উদাহরণে, একটি ডিরেক্টরি নামক dirতিনটি ফাইল: a, b, c, এবং ls। প্রথম তিনটি নিয়মিত ফাইল। lsআসল lsবাইনারিটির জন্য একটি হার্ডলিঙ্ক যাতে আমরা ক্রট অবস্থায় থাকাকালীন ফাইলগুলি তালিকাবদ্ধ করতে পারি।

আমি যাচ্ছি chrootমধ্যে dir। (মনে রাখবেন যে আমি সম্ভবত রুট ডিরেক্টরিতে কিছু ডিরেক্টরি ভুলে যাচ্ছি))

শেল আউটপুট আকারে এখানে সেটআপ রয়েছে:

$ pwd
/home/alex/test
$ l
dir
$ ls dir
a b c ls
$ ./ls dir # does the same thing
a b c ls
$ ls /
bin boot dev etc home mnt media proc sbin sys usr var

এখন আমি হবে chrootমধ্যে dir/bin/bashযুক্তি তা চয়ন কি প্রক্রিয়া নতুন রুট ডিরেক্টরিটি দিয়ে চালানো হবে। এটি ডিফল্ট /bin/sh

$ chroot /bin/bash dir
$ # this prompt is now from a subprocess running in the new root directory
$ PATH=/ ls
a b c ls
$ pwd
/

এখন আমরা এর থেকে প্রস্থান করব chroot:

$ exit
$ # this prompt is now from the original bash process, from before the chroot
$ pwd
/home/alex/test

আমি আশা করি এটি chrootকমান্ডটি কীভাবে কাজ করে তা চিত্রিত করে। মূলত আপনার সমস্যাটি সমাধান করার জন্য আপনাকে যা করতে হবে তা হ'ল chrootপ্রতিবার ব্যবহারকারী হিসাবে লগ ইন করার সময় একটি কমান্ড চালানো Perhaps সম্ভবত এটি একটি স্টার্টআপ স্ক্রিপ্টে রাখবে?

কোনও ফাইলের একটি হার্ডলিঙ্ক একটি এর অভ্যন্তরে কাজ করতে থাকবে chroot, এমনকি যদি সেই ফাইলটি অন্য উপায়ে অ্যাক্সেস করা না যায় (এটি কাজ করে কারণ হার্ডলিঙ্কগুলি ইনোডগুলিতে নির্দেশ করে, পথ নয়)। সুতরাং, ব্যবহারকারীর যেমন mysqlকমান্ডের অ্যাক্সেসের অনুমতি দেওয়ার জন্য , আপনি কার্যকর করবেন:

ln /usr/bin/mysql /path/to/chroot/target

তবে এর জন্য কি আমাকে সমস্ত সিমলিংকের সাথে একটি সম্পূর্ণ ক্রুট পরিবেশ স্থাপনের প্রয়োজন হবে না? কমান্ড চালানো কি সহজ হবে না যাতে নতুন ব্যবহারকারীর অন্যান্য ডিরেক্টরিতে অ্যাক্সেস না ঘটে তবে অ্যাপাচের মতো প্রোগ্রামগুলি সেগুলিতে অ্যাক্সেস হারিয়ে না ফেলে?
মণিশারথ

মূলত, অন্যান্য ব্যবহারকারীদের অ্যাক্সেসকে প্রভাবিত না করে কোনও ব্যবহারকারী কীভাবে বাকী fs এর পাঠ্য অ্যাক্সেস হারাতে কোনও উপায় (chmod এর মাধ্যমে) তৈরি করতে পারেন?
মণিশারথ

@Manishearth সেখানে কোন সহজ উপায় আছে chmod। আপনি যখন বলেন "কমান্ড চালানো কি সহজ হবে না ... তাদের অ্যাক্সেসটি হারাবেন না", সেই আদেশটি chroot। আপনি যদি "সম্পূর্ণ ক্রুট পরিবেশ" বলতে কী বোঝাতে চেয়েছেন বা কেন এটি কোনও সমস্যা হতে পারে তা যদি আপনি ব্যাখ্যা করেন তবে আমি আরও ভাল করে বুঝতে পারি। (নোট আপনি একটি oneliner সঙ্গে সব এক্সেকিউটেবল অ্যাক্সেস প্রদান করতে পারে যে: ln /bin/* /path/to/chroot/target)
strugee

@ মনীশারথ যদি আমার উদাহরণটি না বুঝে আমি আপনাকে chrootনিজের সাথে খেলতে উত্সাহিত করি বা কোন অর্থ বোধগম্য হয় না তা আমাকে জানিয়ে দিন। আরও ভাল, উভয় না। (এবং ম্যানেজগুলি পড়ুন))
স্ট্রুজি

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