আমি কীভাবে নন-রুট ব্যবহারকারীদের উদাহরণস্বরূপ একটি সিস্টেমড পরিষেবা নিয়ন্ত্রণ করতে পারি?


12

আমার dbaগ্রুপের ব্যবহারকারীদের database@পরিষেবাগুলি নিয়ন্ত্রণ করার অনুমতি দেওয়া দরকার । এই সম্পর্কিত প্রশ্নের উত্তরটি হ'ল কেবলমাত্র systemctl"ক্রিয়াগুলি" তালিকাভুক্ত করা যা আমি sudoersফাইলে অনুমতি দিতে চাই , তবে তা আমার ক্ষেত্রে প্রযোজ্য না কারণ সিস্টেমে কোন ডাটাবেস থাকতে পারে তা আমি আগেই জানি না। উদাহরণস্বরূপ, যদি আমি তালিকা করি

%dba = /usr/bin/systemctl start database@awsesomeapp
%dba = /usr/bin/systemctl start database@anotherawsesomeapp
%dba = /usr/bin/systemctl start database@yetanotherawsesomeapp
%dba = /usr/bin/systemctl start database@wowyetanotherawsesomeapp
# ... other "verbs" omitted for brevity

এটি ভবিষ্যতে যে দৃষ্টান্তগুলি থাকতে পারে তা কভার করে না এবং একটি ডিবিএ সক্ষম হবে না

$ sudo systemctl start database@omgwowyetanotherawsesomeapp

যাইহোক, আমি একটি নির্দিষ্ট সিস্টেমের সাথে ফিডিংয়ের চেয়ে প্যাকেজিংয়ের ক্ষেত্রে আরও বেশি চিন্তা করছি।

মনে রাখবেন, অন্য সম্পর্কিত প্রশ্নের এই আশ্চর্যজনক উত্তরে যেমন দেখানো হয়েছে , এর জন্য sudo গ্লোব ব্যবহার করা চূড়ান্তভাবে নিরাপত্তাহীন:

%dba ALL = /usr/bin/systemctl start database@[a-z]* # UNSAFE!

অনুমতি দেয় না

$ sudo systemctl start database@awsesomeapp unrelatedservice

আমার সন্দেহ হয় ব্যবহার sudoকরা আমার সমস্যার সমাধান করবে না (যদিও আমি নিশ্চিত আশা করি আমি ভুল করছি)। রুটবিহীন ব্যবহারকারীদের systemdপরিষেবা নিয়ন্ত্রণ করতে অন্য কোনও উপায় আছে কি ?

এটির মূল্যের জন্য, ভবিষ্যতে একটি CentOS 7 সিস্টেম এবং RHEL7 সিস্টেমে এটি করা আমার দরকার। আর্ক লিনাক্সে কাজ করা সমাধানগুলিতেও আমি আগ্রহী।

উত্তর:


1

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

মূল হিসাবে চলমান এবং এটি সম্পাদন করে এমন একটি স্ক্রিপ্ট তৈরি করুন:

/usr/bin/systemctl start database@

স্ক্রিপ্টটিকে অ্যানোথেরওয়ালিউজআপ হিসাবে একটি আর্গুমেন্ট নিন যাতে এটি এটি সম্পাদন করে:

স্ক্রিপ্টটি কার্যকর করে: / usr / bin / systemctl স্টার্ট ডাটাবেস @ anotherawsesomeapp

আপনার ব্যবহারকারীদের / etc / sudoers দিয়ে স্ক্রিপ্ট.শ ফাইল চালানোর অনুমতি দিন।

scriptuser ALL=(ALL) NOPASSWD: /path/to/script.sh

ব্যবহারকারী এটি এভাবে চালাতে পারেন:

sh script.sh anotherawsesomeapp

উদাহরণ:

AppName=$1

/usr/bin/systemctl start database@$AppName;
if [ $? != "0" ] 
then; 
    echo "$AppName could not be started. Are you using the right application name?";
fi

1
যেমনটি এটির একই সমস্যা যেমন sudoers এক। আপনাকে পরিবর্তনশীলটি উদ্ধৃত করতে হবে বা এটি স্পেসে বিভক্ত হবে।
কিরিয়াস

এটি কাজ করে না; শেল স্ক্রিপ্টগুলির জন্য (লিনাক্সে) সেটুইড সম্মানিত হয় না।
মার্টিজন

এটি যা করছে তা কোনও স্ক্রিপ্ট কার্যকর করতে sudo ব্যবহার করছে। এটি 'হ্যালো ওয়ার্ল্ড' স্ক্রিপ্টের সাথে আলাদা আলাদা নয়। রুট যদি স্ক্রিপ্টটি চালাতে পারে তবে এটি কাজ করবে।
বাজিগর 14

0

SUID

আপনি এর উপর ভিত্তি করে প্রস্তাবিত সমাধানটি সেই স্ক্রিপ্ট তৈরি করতে পারেন যা সিস্টেস্টিটলকে সুডোর সাথে কল করে। স্ক্রিপ্টটি রুটের মালিকানাধীন করুন। প্রদান SUIDরুট করার অনুমতি এবং ডাটাবেস অ্যাডমিনিস্ট্রেটররা গ্রুপ (DBA) পড়া ও অনুমতি চালানো।
গোষ্ঠী বা অন্যকে লেখার অনুমতি না দেওয়ার জন্য কেবল সাবধান হন কারণ তারা স্ক্রিপ্টটি পরিবর্তন করতে এবং এটি সুডোর আগের কিছু সম্পাদন করতে পারে! এছাড়াও স্ক্রিপ্টটি বুলেট-প্রুফ ইনপুট-ভিত্তিক নিশ্চিত করুন।

$ বিড়াল >> start_datedia.sh
sudo / usr / bin / systemctl স্টার্ট ডাটাবেস @ $ 1
করুন (Ctrl + ডি)

এই স্ক্রিপ্টটি আর্গুমেন্টটি সত্যই সরবরাহ করা হয়েছে কিনা তা পরীক্ষা করে উন্নত হতে পারে এবং ব্যবহারটি মুদ্রণ করা হয়: বার্তাটি যদি তা না হয় ... তবে এটি যেহেতু এটি একটি স্ক্রিপ্ট তাই এটির SUIDজন্য পরীক্ষা করা উপযুক্ত হবে; যুক্তি অনুসরণ করে অন্যান্য কমান্ডগুলির ইনজেকশন এড়াতে। বা আরও ভাল আপনি যে অ্যাপ্লিকেশন সম্পর্কিত স্ট্রিং উল্লেখ করেছেন তার মধ্যে একটিরই ইনপুট হিসাবে অনুমতি দেওয়ার বিষয়টি নিশ্চিত করুন!
তারপরে আপনাকে অবশ্যই নিশ্চিত করতে হবে যে স্ক্রিপ্টের জন্য অনুমতিগুলি কঠোরভাবে নিম্নলিখিত:

do সুডো কাওন রুট: ডিবিএ স্টার্ট_ড্যাটাসবস.শ
$ sudo chmod ux, gw, o-rwx start_datedia.sh
$ sudo chmod u + s, g + rx start_datedia.sh

তারপরে সঠিক অনুমতিগুলি যাচাই করতে:

s ls -la
।
।
।
-rwSr-x --- 1 রুট ডিবিএ 35 আগস্ট 2 19:11 start_datedia.sh
।
।
।

সুতরাং, পুনরুদ্ধার করতে:

1. owner of the script is root
2 ফাইল can be read and executed by the dba group members
3. no-one else will be able to even readএটি।
4. ) স্ক্রিপ্টটি কার্যকর করা যতক্ষণ না স্ক্রিপ্টটি কার্যকর হয় ততক্ষণ রুট হয়ে উঠবেSUID user ৫. সুতরাং sudo একটি পাসওয়ার্ডের জন্য থামবে না। যাই হোক, একাধিক ব্যবহারকারী সহ একটি সিস্টেমের হতে খুব সতর্কতা অবলম্বন সঙ্গে কারণ এটি অনুমতি অপব্যবহারের জন্য রুম ছেড়ে দিতে পারেন।


SUID


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