নন-সুডো গ্রুপকে আপস্টার্ট কাজটি নিয়ন্ত্রণ করার অনুমতি দিন


11

আমি সিস্টেম স্টার্টআপ চালানোর জন্য একটি আপস্টার্ট কাজ সেট করার চেষ্টা করছি এবং এটি ছাড়া অন্য কোনও গ্রুপের সদস্যরা শুরু / বন্ধ করতে পারেন sudo। পূর্ববর্তী সংস্করণ সহ, আমি আমার sudoers ফাইলে যুক্ত করে এই কাজটি করার জন্য ব্যবহৃত update-rc.dএবং স্ক্রিপ্টগুলি সঞ্চিত করেছি, তবে আমি আপস্টার্টের জন্য সমতুল্য কাজ করার মতো বলে মনে করতে পারি না।/etc/init.d/%Group ALL = NOPASSWD: /etc/init.d/scriptname

আমি %Group ALL = NOPASSWD: /sbin/initctl start jobnameসুডোর ফাইল যুক্ত করার চেষ্টা করেছি , কিন্তু কমান্ডটি চালানোর চেষ্টা করলে start jobnameএই ত্রুটিটি পাওয়া যায়:

start: Rejected send message, 1 matched rules; type="method_call", sender=":1.21" (uid=1000 pid=5148 comm="start jobname " interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

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

উত্তর:


7

আপস্টার্টের জন্য নির্দিষ্ট ডি-বাস কনফিগারেশনটি কোথায় রাখা হয়েছে তা খুঁজে বের করে আপনি শুরু করতে পারেন। destination="com.ubuntu.Upstart"ত্রুটি বার্তা থেকে স্নিপেট দেখুন ? এখন ডি-বাস কনফিগারেশন ফাইলগুলির সাহায্যে এটি ফোল্ডারে গ্রেপ করার চেষ্টা করুন:

vhost07:~ $ grep -r "com.ubuntu.Upstart" /etc/dbus-1
/etc/dbus-1/system.d/Upstart.conf:    <allow own="com.ubuntu.Upstart" />
[...skipped...]

এই Upstart.confফাইলটিতে নীতিমালার কয়েকটি উদাহরণ রয়েছে। আমার ধারণা আপনি তাদের কাছ থেকে কোনও নীতির ফর্ম্যাট বের করার চেষ্টা করতে পারেন। তারপরে আপনার নির্দিষ্ট ব্যবহারকারীর কেবল প্রয়োজনীয় ক্রিয়াগুলির অনুমতি দেওয়ার চেষ্টা করুন। উদাহরণস্বরূপ, যেমন:

<policy user="pope_benedict">
  <allow send_destination="com.ubuntu.Upstart"
         send_interface="com.ubuntu.Upstart0_6.Job"
         send_member="Start"/>
</policy>

এটি pope_benedictব্যবহারকারীর সেই কাজটি শুরু করার অনুমতি দেওয়া উচিত ।

নোট করুন যে 'অনুমতি দিন' নীতি বৈশিষ্ট্যের জন্য মানগুলি আপনার মূল ত্রুটি বার্তায় তালিকাভুক্ত রয়েছে।


1
ওহ, এবং এর পরে ডি-বাস পুনরায় চালু করতে ভুলবেন না! :)
Iulu Pascaru


7

আমি ব্যক্তিগতভাবে /etc/sudoers.d/jobname_myuser ফাইলটিতে নিম্নলিখিত লাইনটি ব্যবহার করছি:

myuser ALL = (root) NOPASSWD: /sbin/start jobname, /sbin/stop jobname, /sbin/restart jobname, /sbin/status jobname

এখানে বর্ণিত হিসাবে: /server//a/390723/68608


2

Sudo মধ্যে এই ধরনের বিকল্পের অস্তিত্ব নেই।

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

নিছক কোনও একক কাজের ক্ষেত্রে আপনার উদ্বেগ যদি সমাধানটি সহজ হয়। একটি স্ক্রিপ্ট তৈরি করুন, /usr/bin/jobname.shসঙ্গে বলুন

#!/bin/sh
initctl $1 jobname

তারপরে chmod 755 /usr/bin/jobname.shএবং অবশেষে আপনার sudoers ফাইলে কার্যকর করা যায়:

%Group ALL = NOPASSWD: /usr/bin/jobname.sh

এইভাবে, প্রত্যেকে কল করতে পারেন jobname.sh startবা jobname.sh stopএই নির্দিষ্ট কাজটি নিয়ন্ত্রণ করতে পারেন । আপনি কিছু পরীক্ষণ যোগ করার জন্য শুধুমাত্র করার অনুমতি চাইতে পারেন startএবং stopপরামিতি ইত্যাদি


অন্য কথায়, আমার সমস্যাটি এই নয় যে সিস্টেমটি গ্রুপের সদস্যদের চালনার ক্ষমতা অস্বীকার করে initctl, তবে আপস্টার্ট ব্যবহারকারী / গোষ্ঠী দ্বারা প্রেরিত কোনও সংকেতকে আপস্টার্ট.কনফ-এ স্পষ্টভাবে কোনও নীতি প্রবেশের অনুমতি দেয়নি? এবং কনফিগ ফাইলে কোনও অল-জবস-বা না-এর সেটিং ছাড়া আর কোনও গ্রানুলারিটি সরবরাহ করার উপায় নেই?
অ্যাঙ্গেল ও'স্যাক্সন

আপনার ক্ষেত্রে ইনটেক্সটাল সুডোয়ার্স পরিবর্তন না করেই ঠিক চলছে, আপস্টার্ট কেবলমাত্র এটি থেকে বার্তাগুলি প্রত্যাখ্যান করছে যদি আপনি এটি নির্দিষ্ট করে না-রুট ব্যবহারকারীদের জন্য অনুমতি না দেন। অন্য দুটি উত্তর দেখুন। আপনি com.ubuntu.Upstart0_6.<JOB>upstart.conf এ প্রতি চাকরির ভিত্তিতে ( অংশটি দেখুন) ডিবিএস নীতি নির্ধারণ করতে পারেন । আপনার প্রয়োজনের উপর নির্ভর করে ডিবিস নীতি লেখার পরিবর্তে এবং ডিবিএস পুনরায় চালু করার পরিবর্তে এর জন্য এই জাতীয় স্ক্রিপ্ট তৈরি করা সহজ হতে পারে b কম ঝামেলা সহ দীর্ঘ পথ।
টুমিনয়েড

DBus নীতি সম্পাদনা ব্যবহার করতে com.ubuntu.Upstart0_6.jobnameযেমন send_interfaceআগের মতই ত্রুটি বার্তা উত্পাদিত। যদি আমি সঠিকভাবে অনুমান করতে পারি যে ত্রুটি আউটপুটে সিগন্যাল তথ্য রয়েছে, তবে এটি ইন্টারফেস বা গন্তব্যটিকে আপসার্ট সার্ভিসের প্রতিফলন করে না যা সংকেতটি বোঝায়। আমি মনে করি যে পরিষেবার তথ্যটি কেবল ডি-বাস পদ্ধতি কল বার্তায় আর্গুমেন্ট, এবং আমি নিশ্চিত নই যে আমি আপস্টার্টের জন্য ডি-বাস নীতিটি যুক্তির মানগুলির ভিত্তিতে সিদ্ধান্ত নিতে পারি edit
অ্যাঙ্গেল ও'স্যাকসন

আপনার প্রস্তাবিত ধরণের একটি স্ক্রিপ্ট আমার পক্ষে খুব ভালভাবে কাজ করছে, একটি ক্যাভেট সহ: আমাকে এটি চালানোর দরকার ছিল sudo jobname.sh start, যাতে আপস্টার্টটি অনুরোধটিকে ব্যবহারকারীর কাছ থেকে আসে বলে মনে করে। rootআমি চেষ্টা করার চেষ্টা করছি এটি "ডান" উপায় (সিস-ভি স্ক্রিপ্টগুলি প্রথম স্থানে সরে যাওয়া), সুতরাং আমি ডি-বাস নীতি বা অন্য কোনও আপস্টার্ট কনফিগারেশন বিকল্পের মাধ্যমে এই কাজটি করতে চাই, তবে যদি আমি না পারি কাজ করে আমি এই উত্তর গ্রহণ করব।
অ্যাঙ্গেল ও'স্যাকসন

1
আমিও উদ্ধৃতি দিতাম "$1"। আপনার [ "$1" = "start" -o "$1" = "stop" ]পরীক্ষার সাথে আমি বিশ্বাস করি যে এটি $1স্ক্রিপ্টের মূল হিসাবে চালিত তবে এটি নিরাপদ তবে অযোগ্য বিস্তৃত হওয়া কেবল অস্বাস্থ্যকর অভ্যাস (যদি শব্দ বিভাজন ইচ্ছাকৃতভাবে পছন্দ না হয়) ...
বেনি চেরনিয়াভস্কি-পাসকিন

0

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

ls /etc/dbus-1/system.d/
avahi-dbus.conf
bluetooth.conf
...
Upstart.conf
wpa_supplicant.con

কনফিগারেশন ফাইলটি রিসোর্স সীমাবদ্ধতা, সুরক্ষা পরামিতি এবং আরও অনেক কিছু স্থাপন করে।

বিশদগুলির জন্য দেখুন dbus-daemon-1 (1) - লিনাক্স ম্যান পৃষ্ঠা

একটি দলকে আপস্টার্ট কাজ শুরু / বন্ধ করার মঞ্জুরি দেওয়ার জন্য /etc/dbus-1/system.d/Upstart.conf এ নিম্নলিখিত নীতি যুক্ত করুন

  <policy group="YourGroupName">
    <allow send_destination="com.ubuntu.Upstart"
       send_interface="com.ubuntu.Upstart0_6.Job"
       send_type="method_call" send_member="Start" />
    <allow send_destination="com.ubuntu.Upstart"
       send_interface="com.ubuntu.Upstart0_6.Job"
       send_type="method_call" send_member="Stop" />
  </policy>

আপনার ডিফল্ট নীতি পরিবর্তন করার আগে এই জাতীয় নীতিটির সুরক্ষা সম্পর্কিত বিষয়গুলি বিবেচনা করা উচিত। আপনার গোষ্ঠী নামটির সদস্যগণ সমস্ত আপস্টার্ট কাজ শুরু / বন্ধ করতে সক্ষম হবেন ।


তবে তাদের নিয়ন্ত্রণ করতে পারে এমন চাকরি সীমাবদ্ধ করার কোনও উপায় আছে কি? বা ডি-বাস ম্যাসেজের সামগ্রীতে মনোযোগ দেয় না বলেই কি এটি সম্ভব নয়?
অ্যাঙ্গেল ও'স্যাক্সন

আমি সেই নীতিটি আপস্টার্ট.কোনফে যোগ করার চেষ্টা করেছি (গ্রুপের নামটি আমার আসল গ্রুপ নামের সাথে প্রতিস্থাপন করে), ডি-বাস পুনরায় চালু করেছি এবং start: You do not have permission to modify job: jobnameযখন পরিষেবাটি শুরু করার চেষ্টা করেছি তখন পেয়েছি got
অ্যাঙ্গেল ও'স্যাকসন

ঠিক আছে. এর অর্থ হ'ল নীতি সফলভাবে প্রয়োগ করা হয়েছে। এটি প্রদর্শিত হয় যে আপনারজজ.কম / ইনফ / ইনডিতে রয়েছে। ব্যবহারকারীর কাজগুলি ~ / .init এ থাকা উচিত। আপনার কাজের ক্ষেত্রে job / .init এ স্থাপন করা কি আপনার ব্যবহারের ক্ষেত্রে প্রশংসনীয়?
গোরান মিসকভিক

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