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


60

সাথে sysvinit, এর sudoersমতো এন্ট্রি যথেষ্ট হবে:

%webteam cms051=/sbin/service httpd *

এটি কমান্ডগুলির জন্য যেমন অনুমতি দেয়:

  • sudo service httpd status
  • sudo service httpd restart

এখন, সাথে systemd, পরিষেবার নামটি চূড়ান্ত যুক্তি। অর্থাৎ, পরিষেবা পুনরায় আরম্ভের কাজটি এর সাথে সম্পন্ন হবে:

systemctl restart httpd.service

স্বাভাবিকভাবেই, আমি ভেবেছিলাম কমান্ডটি যেমন systemctl * httpd.serviceকাজ করবে তেমন সংজ্ঞা দেওয়া কিন্তু এটি এমন কোনও কিছুকে অনুমতি দেবে systemctl restart puppet.service httpd.serviceযা পছন্দসই প্রভাব নয়।

এটি বিবেচিত হওয়ার সাথে সাথে, নন-রুট ব্যবহারকারীদের কোনও system.dপরিষেবা নিয়ন্ত্রণের অনুমতি দেওয়ার সর্বোত্তম উপায় কী হবে ? এটি হওয়ার দরকার নেই sudoers; একটি ফাইল অনুমতি পরিবর্তন যথেষ্ট হতে পারে?


আমি sudoকিছুক্ষণের মধ্যে একটি কনফিগারেশন স্পর্শ করেছি না , তবে আপনি কি ঠিক এর মতো কিছু করতে পারেন না cms051=systemctl * httpd.service?
জন ডব্লিউ এইচ স্মিথ

1
এটি আপনাকে তখন কোনও পরিষেবা পুনরায় চালু করার অনুমতি দেবে। প্রশ্নটিতে আমার সেই উত্তোলনটি অন্তর্ভুক্ত করা উচিত ছিল। দুঃখিত।
বেলমিন ফার্নান্দেজ

উত্তর:


43

sudoersপৃথকভাবে সমস্ত প্রয়োজনীয় কমান্ড যুক্ত করুন :

%webteam cms051=/usr/bin/systemctl restart httpd.service
%webteam cms051=/usr/bin/systemctl stop httpd.service
%webteam cms051=/usr/bin/systemctl start httpd.service 
%webteam cms051=/usr/bin/systemctl status httpd.service

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

9
স্থিতি কার্যকর নয়, যেহেতু কোনও ব্যবহারকারী তা করতে পারে
ডেরিকসন

5
কী cms051?
কেভিন

1
সুতরাং যদি আমি সিস্টেমেটল পুনরায় চালু করতে চাই তাহলে কি হবে? Http.service mariadb.service ;-)? সম্ভবত মারিয়্যাডব আবার চালু হবে
মেরেক ওয়াজডজিক

1
@ মারেক ওয়াজডজিক সুডো যদি সুস্পষ্টভাবে *বা অনুরূপ নিদর্শনগুলির সাথে মঞ্জুরি না দেয় তবে অতিরিক্ত যুক্তির অনুমতি দেয় না ।
জোফেল

31

@ জোফেলের উত্তর হ'ল আমার একটি কার্যনির্বাহী সেটআপ পাওয়ার জন্য ঠিক কী প্রয়োজন ছিল। এই প্রশ্নে অন্য কেউ হোঁচট খাচ্ছে তার জন্য পোস্ট করা। capistranoআমার স্থানীয় মেশিন থেকে মোতায়েনের পরে আমার রুবি অ্যাপ্লিকেশনটি পুনরায় চালু করার জন্য আমার একটি উপায় প্রয়োজন । এর অর্থ পুনরায় চালু করার systemdপরিষেবাগুলিতে আমার পাসওয়ার্ডহীন অ্যাক্সেসের প্রয়োজন । এটি আমার কাছে যা আছে এবং এটি আশ্চর্যজনকভাবে কাজ করে!

দ্রষ্টব্য : আমার ব্যবহারকারী এবং গোষ্ঠীটিকে deployer
এখানে একটি কাস্টম ফাইলে পুট কোড বলা হয় : /etc/sudoers.d/deployer
কোড:

%deployer ALL= NOPASSWD: /bin/systemctl start my_app
%deployer ALL= NOPASSWD: /bin/systemctl stop my_app
%deployer ALL= NOPASSWD: /bin/systemctl restart my_app

আমি যুক্ত করতে হবে যে deployerক্ষেত্রে ব্যবহারকারী হিসাবে লগ ইন করার পরে আপনার systemctlকমান্ডটি sudo দিয়ে চালানো উচিত ।
মুইওয়া ওলু

8

আপনি যে কমান্ডগুলিতে অ্যাক্সেস পেতে চান সেগুলি দিয়ে একটি কমান্ড ওরফে তৈরি করুন। তারপরে গ্রুপটিকে সেই কমান্ড ওরফে নির্ধারণ করুন:

Cmnd_Alias APACHE-SVC = /usr/bin/systemctl stop httpd, /usr/bin/systemctl start httpd, /usr/bin/systemctl restart httpd

%webteam ALL=APACHE-SVC

আপনার /etc/sudoers.d/filename এ সরাসরি sudoers ফাইল সম্পাদনা করার পরিবর্তে কোনও সম্পাদনা করা ভাল অনুশীলন। সুডোরগুলিতে আপনার .d / ফাইলের নাম চিহ্নিত করার বিষয়টি নিশ্চিত করুন, যা বেশিরভাগ নতুন ডিস্ট্রোস যাইহোকই করেন। আপনার sudoers এই 2 লাইন স্থাপন কৌশলটি করা উচিত:

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d

দ্রষ্টব্য: অন্তর্ভুক্তির সামনে থাকা # টি মন্তব্য নয়। এটা থাকতে হবে।


পাসওয়ার্ড প্রবেশের বাইরে স্টপ / স্টার্ট / পুনরায় চালু করার সুযোগ কীভাবে যুক্ত করবেন?
নিকোলা বারানেনকো

সেরা উত্তর আইএমও। প্রত্যেকের একটি কমান্ড ওরফে যুক্ত করা উচিত এবং এটি দিয়ে কাজ করা উচিত।
দাসকাজা

6

জোফেলের পরামর্শ অনুসারে এগুলি আইটেমাইজ করা সবচেয়ে নিরাপদ ।

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

" service httpd *" লাইনটি তুলনামূলকভাবে নিরাপদ কারণ (এটি যাচাই করুন :) serviceকেবলমাত্র একটি কার্যকর পতাকা ( --status-all) যা বিশেষত সংবেদনশীল কিছু করে না এবং (এটিও যাচাই /etc/init.d/httpdকরবে :) কেবলমাত্র আপনি যে কমান্ড লাইনগুলিকে অনুমতি দিতে চান তা গ্রহণ করবে।

যদি এমন অনেকগুলি সংমিশ্রণ থাকে যেগুলি তালিকাভুক্ত করা বিশ্রী হয়ে ওঠে, আপনি সম্ভবত যা করছেন তা নিয়ে আপনার প্রশ্ন করা উচিত। তবে আপনি তাদের সাবধানে লিখিত সহায়ক স্ক্রিপ্টে অ্যাক্সেস দিতে পারেন যা তাদের জন্য কমান্ড চালায় (অনেকটা পছন্দ /etc/init.d/http)। এমনকি এই ক্ষেত্রে আপনার কমান্ড এবং বিকল্পগুলি অনুমোদিত তা সঠিকভাবে নির্ধারণের জন্য যথাসম্ভব যথাযথ এবং সুস্পষ্ট হওয়া উচিত এবং কোনও লক্ষ্য ব্যবহারকারীকে কোনও ইনপুট সরাসরি টার্গেট কমান্ডে পাস করবেন না।

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