সিস্টেমড: একটি নির্দিষ্ট পরিষেবা পরিবর্তন করতে একটি অনিবদ্ধ ব্যবহারকারীকে অনুমতি দিন


20

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

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

যাইহোক, আসলে কল করতে systemctlবা service <game> start/stop/restartআমাকে এখনও মূল বা sudoসক্ষম ব্যবহারকারী হিসাবে লগ ইন করতে হবে।

সিস্টেমডকে কি বলার উপায় আছে যে <game>পরিষেবাটির জন্য, অনিবদ্ধ ব্যবহারকারীকে gamesrvস্টার্ট / স্টপ / রিস্টার্ট কমান্ডগুলি চালনার অনুমতি দেওয়া হয়েছে?


উত্তর:


37

আমি এটি করার দুটি উপায় সম্পর্কে ভাবতে পারি:


একটি হ'ল সার্ভিসটিকে সিস্টেম পরিষেবাদির চেয়ে ব্যবহারকারী পরিষেবা হিসাবে তৈরি করা।

সিস্টেম ইউনিট তৈরির পরিবর্তে, সিস্টেমড ইউনিটটি পরিষেবা ব্যবহারকারীর হোম ডিরেক্টরিতে, এ স্থাপন করা হবে $HOME/.config/systemd/user/daemon-name.service। একই ব্যবহারকারীর তারপর পারেন সেবা পরিচালনা সঙ্গে systemctl --user <action> daemon-name.service।

বুট থেকে ব্যবহারকারী ইউনিটটি শুরু করার অনুমতি দেওয়ার জন্য , রুটটিকে অবশ্যই অ্যাকাউন্টের জন্য দীর্ঘতর সক্ষম করতে হবে sudo loginctl enable-linger username। ইউনিটটিও হতে হবে WantedBy=default.target।


অন্য উপায়টি হ'ল পলিসিকিটের মাধ্যমে ব্যবহারকারীকে সিস্টেম ইউনিট পরিচালনা করতে অ্যাক্সেসের অনুমতি দেওয়া। এর জন্য জাভাস্ক্রিপ্ট বিধিগুলির জন্য সিস্টেমযুক্ত 226 বা উচ্চতর (এবং পলিসিকিট> = 0.106 - ফাইলগুলি পরীক্ষা করে দেখুন pkaction --version) দরকার।

আপনি একটি নতুন পলিসিকিট কনফিগারেশন ফাইল তৈরি করবেন, উদাহরণস্বরূপ, /etc/polkit-1/rules.d/57-manage-daemon-name.rulesআপনি যে বৈশিষ্ট্যগুলির অনুমতি দিতে চান তা যাচাই করে। জন্য উদাহরণস্বরূপ :

// Allow alice to manage example.service;
// fall back to implicit authorization otherwise.
polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" &&
        action.lookup("unit") == "example.service" &&
        subject.user == "alice") {
        return polkit.Result.YES;
    }
});

নামযুক্ত ব্যবহারকারী তারপরে systemctlএবং ব্যবহার ছাড়াই নামযুক্ত পরিষেবা পরিচালনা করতে পারেন sudo।


ব্যবহারকারী মোড এবং loginctlকাজ।
— শাদুর

1
এটি কি উবুন্টু 16.04 এ কাজ করে? নিয়ম.ড ডিরেক্টরি বিদ্যমান না এটাই কি স্বাভাবিক? আমি এটি কাজ করতে পারি না। আমার নিয়ম উপেক্ষা করা হয়।
— ygoe

3
পলিসিকিট সক্ষম করার জন্য আমাকে কি পুনরায় চালু করতে হবে?
— জোসির

@ মিশেলহ্যাম্পটন সিস্টেমযুক্ত - ব্যবহারকারীর সাহায্যে বুটে সার্ভিস স্টার্টআপ ব্যতীত আমি যা করতে চাই তার সবই পেতে পারি। আমি মনে করি এটি বেশ কয়েকটি জায়গায় পড়ার সাথে সাথে এটি স্বাভাবিক (যেমন আর্চলিনাক্স উইকি), তবে আপনি বলেন যে এটি কাজ করা উচিত, আপনি কি এটি সম্পর্কে নিশ্চিত?
— ডাকস

@ ডাকস হ্যাঁ এটি কার্যকর হয়। যদি আপনার এখনও এ নিয়ে সমস্যা হয় তবে একটি নতুন প্রশ্ন জিজ্ঞাসা করুন।
— মাইকেল হ্যাম্পটন

12

sudoতার জন্য তৈরি আপনি অনিবদ্ধ ব্যবহারকারীকে ব্যবহার করতে সক্ষম হতে চান এমন কমান্ডগুলির জন্য একটি যুক্ত করতে আপনার /etc/sudoersফাইলটি সম্পাদনা করুন :visudoCmd_alias

# game server commands
Cmnd_Alias GAME_CMDS = /usr/bin/systemctl start <game service>, /usr/bin/systemctl stop <game service>

এবং অনিবদ্ধ ব্যবহারকারীকে এইরূপে ওরফে সংজ্ঞায়িত কমান্ড ব্যবহার করার অনুমতি দেওয়ার জন্য একটি লাইন যুক্ত করুন:

unprivileged_user ALL=(ALL) NOPASSWD: GAME_CMDS

সুডো কমান্ডের বিভিন্ন পরামিতিগুলির জন্য এই বিষয়ের উপর আরও কিছু ডকুমেন্টেশন পড়ুন ।

আপনার সিস্টেমে উপলব্ধ থাকতে আপনাকে sudoপ্যাকেজ ইনস্টল করতে হবে sudo।


আমি জানি সুডো কীভাবে ব্যবহার করতে হয়, হ্যাঁ। আমি ভাবছিলাম যে এমন কোনও বিকল্প ছিল যা আমাকে এড়িয়ে যেতে দেয় এমনকি যেহেতু এই ক্ষেত্রে systemdইউনিট ফাইলটি প্রথম কাজটি করে তা নির্দিষ্ট করে যে এটি চালানো দরকার gamesrv।
— শাদুর

1

আপনি এর sudoসমান অ্যাক্সেস সরবরাহ করার সাথে সংযুক্ত হতে পারেন root, তবে এটি নির্দিষ্ট ব্যবহারকারীকে একটি নির্দিষ্ট, সীমিত কমান্ডের সেটগুলির জন্য ব্যবহার করতে সক্ষম হতে পারে।

সার্ভার ফল্টে এর ইতিমধ্যে কীভাবে উত্তর দেওয়া হয়েছে, [ সুডো ব্যতীত কোনও রুটবিহীন ব্যবহারকারীকে কমান্ডের একটি সেট অ্যাক্সড না করে কোনও মূল-বিহীন ব্যবহারকারীকে কমান্ডের একটি সেট অ্যাক্সেস দেওয়া) at

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

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