সুডো ব্যতীত কোনও রুটহীন ব্যবহারকারীকে কমান্ডের একটি সেট অ্যাক্সেস দেওয়া


13

আমি আমার মেশিনে নন-রুট ব্যবহারকারীকে নন-সুডো অ্যাক্সেস দিতে চাই, সেখানে একজন ইউজার ডিএনএস-ম্যানেজার রয়েছে, তার একমাত্র ভূমিকা সমস্ত বিআইএনডি কমান্ড (আরএনডিসি, ডিএনএসসি-কিজেন) ইত্যাদি চালানো run

এখন যতবার তাকে কমান্ড চালাতে হয়, টাইপ করে,

sudo rndc reload

এই সুডো থেকে মুক্তি পাওয়ার কোনও উপায় আছে তবে কেবলমাত্র নির্দিষ্ট নির্দিষ্ট কমান্ডের (এবং কেবলমাত্র ডিএনএস-ম্যানেজারের জন্য)?


5
এর মতো বিচ্ছিন্ন অ্যাক্সেস কন্ট্রোল এর sudoজন্য অনেক বেশি । sudoএই জন্য তার ব্যবহার সম্পর্কে আপনার ব্যবসায়ীয় আপত্তিগুলি কী ?
ম্যাডহ্যাটার

1
@peterh আমি আমার প্রশ্নের পুনরাবৃত্তি: বিবেচনামূলক প্রবেশাধিকার নিয়ন্ত্রণ (অর্থাত, আংশিক sysadm প্রতিনিধিদল) এর ভূমিকা sudo। আপত্তি কি?
ম্যাডহ্যাটার

3
তাহলে কীভাবে পাসওয়ার্ডহীন sudo? অথবা ডিএনএস পরিচালন সরঞ্জামটি চালানোর জন্য পাসওয়ার্ডযুক্ত সুডো যা প্রয়োজন অনুসারে namedগোষ্ঠী বা ব্যবহারকারীর অধিকার, বা রুট সুবিধার্থে কাজ করতে পারে।
ম্যাডহ্যাটার

4
@ পেটার "এইভাবে এটি করার একটি ভাল কারণ" হারাবে না। সাধারণত এই জাতীয় প্রশ্নগুলি ছদ্মবেশে XY সমস্যা হিসাবে দেখা দেয় এবং আমি দেখতে পাই যে অন্তর্নিহিত সমস্যাটি বোঝা পুরোপুরি এবং পেশাদারভাবে তাদের উত্তর দেওয়ার মূল চাবিকাঠি।
ম্যাডহ্যাটার

2
@ পেটার আমি মনে করি আমরা একে অপরের সাথে একমত হয়েছি। আমিও ওপি তার প্রশ্নের উন্নতি দেখতে চাই; এটিতে ড্রিলিং লেখককে নিজের চারপাশে তৈরি বাক্সের বাইরে ভাবতে সহায়তা করার উপায় হিসাবে এটি আমার পক্ষে ভাল কাজ করে। তার এড়াতে চাওয়ার জন্য ভাল কারণ থাকতে পারে sudo। আমাদের কাছে তা প্রকাশ করার চেষ্টা করতে গিয়ে তিনি আমাদের বিভ্রান্তি দূর করতে পারেন, বা তার নিজস্ব - বা উভয়ই!
ম্যাডহ্যাটার

উত্তর:


31

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

তবে, sudo একটি খুব সূক্ষ্ম অনুমতিযুক্ত কাঠামো থাকতে সক্ষম হয়েছে, এটি এক বা একাধিক ব্যবহারকারীকে পাসওয়ার্ড এবং টিটিওয়াই ছাড়াই একটি নির্দিষ্ট কমান্ড দেওয়ার অনুমতি দেয়। নীচে, আমি আপনার প্রয়োজনের জন্য এটি কনফিগার করার জন্য তিনটি উপায় দেখাব। আপনি যে কোনও একটি চয়ন করুন, ব্যবহারকারী এখন sudo rndc reloadকোনও পাসওয়ার্ড প্রবেশ না করেই কমান্ডটি সরবরাহ করতে সক্ষম হবে ।

(এছাড়াও এটি অপ্রয়োজনীয় হতে পারে, তবে ... দয়া করে আপনার sudoers ফাইলের সম্পাদনা করার আগে একটি ব্যাকআপ অনুলিপি তৈরির কথা মনে রাখবেন, ব্যাকআপে ফিরে যাওয়ার প্রয়োজনে এমন শেল আপনি যেখানে খুলেছেন তা রাখতে, এবং সম্পাদনা করার জন্য এটি ব্যবহার visudoপরিবর্তে sudo vi /etc/sudoers। আশা রাখি, এই সতর্কতা অপ্রয়োজনীয় হতে হবে, কিন্তু ... ভাল তাদের আছে এবং বিপরীত চেয়ে তাদের প্রয়োজন নয়!)

1. আপনি যদি কোনও অনুরোধের জন্য টিটিওয়াইয়ের প্রয়োজন না চান

সবচেয়ে সহজ উপায় পির TTY প্রয়োজনীয়তা পরিত্রাণ পেতে (যদি থাকে) নিশ্চিত যে লাইন দিয়ে শুরু করা হয় Defaultsমধ্যে /etc/sudoersশব্দ ধারণ করে না requiretty- পরিবর্তে, এটা থাকা উচিত !requiretty। তবে, আপনি যদি এটি করেন তবে এর অর্থ কোনও sudo কমান্ডের জন্য tty প্রয়োজন হবে না !

আপনারও লাইন যুক্ত করতে হবে

rndcuser ALL = (root) NOPASSWD: /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program

২. আপনি যদি এটি বাদে সমস্ত ব্যবহারকারীর জন্য টিটিওয়াই লাগাতে চান

এটির মতো এই একজন ব্যবহারকারীর জন্য ডিফল্ট সেট করে এটি করা যেতে পারে:

Defaults:rndcuser        !requiretty
rndcuser ALL = (root) NOPASSWD: /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program

৩. আপনি যদি এই ব্যবহারকারীর দ্বারা এই কমান্ড ব্যতীত সমস্ত কমান্ডের জন্য একটি টিটিওয়াইকে পুনরায় স্থান পেতে চান

এটি কিছুটা জটিল, sudoers ফাইলের সিনট্যাক্সের কারণে। কমান্ডের জন্য আপনাকে একটি কমান্ড উরফ তৈরি করতে হবে এবং তারপরে সেই আদেশের নামটির জন্য একটি ডিফল্ট সেট করতে হবে:

Cmnd_Alias RNDC_CMD = /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
Defaults!RNDC_CMD !requiretty
rndcuser ALL = (root) NOPASSWD: RNDC_CMD

অবশ্যই, এটি একটি মোড়কের স্ক্রিপ্টের সাথে একত্রিত করা যেতে পারে যা সুডো ব্যবহার করে কমান্ডকে কল করে, যদি কোনও কারণে আপনি পাসওয়ার্ডহীন হয়েও সরাসরি সুডো ব্যবহার করতে না পারেন তবে।
জেনি ডি

4

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

Sudo কনফিগারেশন /etc/sudoersবেশিরভাগ সিস্টেমে রয়েছে। গুগলিং বা man sudoকমান্ডের মাধ্যমে আপনি এর সিনট্যাক্সটি খুঁজে পেতে পারেন ।

আপনার সরাসরি এই ফাইলটি সম্পাদনা করা উচিত নয়; এটি করার ফলে সুরক্ষা দৌড়ের পরিস্থিতি হতে পারে। পরিবর্তে, visudoকমান্ডটি ব্যবহার করুন (যা আপনার $EDITORপরিবেশের পরিবর্তনশীলের চারপাশে একটি মোড়ক )।


আপনি sudo কনফিগার করার পরে, আপনি সহজেই দৃশ্যমান কমান্ডের চারপাশে এটি মোড়ানো করতে পারেন। এটি খুব সহজ:

  1. আপনার সুডো র‍্যাপার স্ক্রিপ্টগুলির জন্য একটি ডিরেক্টরি তৈরি করুন (ফী /usr/local/dnsadmin/bin)
  2. আপনি যে কমান্ডগুলি sudo ছাড়াই ব্যবহারযোগ্য করতে চান সেগুলির জন্য একটি মোড়ক স্ক্রিপ্ট তৈরি করুন। এটি একটি খুব সাধারণ আদেশ হবে, উদাহরণস্বরূপ, /usr/local/dnsadmin/bin/rndcএটি হবে:

    #!/bin/bash exec /usr/bin/sudo /usr/sbin/rndc "$@"

  3. এই ডিরেক্টরিটি তাদের PATHপরিবেশ পরিবর্তনশীল (যেমন সিস্টেম-প্রশস্ত বা তাদের স্থানীয় দ্বারা .profile) এ পান।


কৌতূহলের বাইরে - আপনি execকেবল কমান্ডটি সরাসরি কল করার পরিবর্তে শেল স্ক্রিপ্টে কেন ব্যবহার করবেন ? (আমি বলছি না যে এটি ভুল, আমি কেন এটি করতে চাই তা জানতে চাই তাই আমি সম্ভবত কিছু শিখতে পারি)
জেনি ডি

2
আমি পাসওয়ার্ডহীন সুডো বিট দিয়ে শেষ করেছি, মোড়ক স্ক্রিপ্টগুলির ধারণাটি দুর্দান্ত।
আনস

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


@ স্নোবাই বক্তৃতা দেওয়ার জন্য আপনাকে অনেক ধন্যবাদ! এটি একটি খুব বড় সম্মান।
পিটার -

2

এই নির্দিষ্ট ক্ষেত্রে একটি সাধারণ সমাধান নয় rndcআপনি প্রয়োজন নেই sudoএ সব।

rndcকোনও namedস্থানীয় সকেট বা দূরবর্তী বন্দর দিয়ে কোনও প্রক্রিয়ায় যোগাযোগ করতে পারে , নিজের প্রমাণীকরণের জন্য একটি গোপন কী ব্যবহার করে। ডিফল্টরূপে (বা কমপক্ষে, ডেবিয়ানদের জন্য, যা আমি ব্যবহার করি এমন ডিস্ট্রো) এই ফাইলটি পাওয়া যাবে /etc/bind/rndc.keyএবং সাধারণত ব্যবহারকারী bindএবং গোষ্ঠীর কাছে সাধারণত পঠনযোগ্য bind

যে কেহ এই কী ফাইলটিতে অ্যাক্সেস পড়েছে (বা এটির একটি অনুলিপি) rndcবিআইএনএনডি সার্ভারটি নিয়ন্ত্রণ করতে ব্যবহার করতে পারে , তাই এই বিশেষ ক্ষেত্রে সবচেয়ে সহজ সমাধানটি হবে ব্যবহারকারীকে bindগ্রুপে যুক্ত করা।

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


-1

আপনি কিছু কমান্ডের জন্য রুট প্রদান করতে sudo ব্যবহার করতে চান না। পরিবর্তে আপনি একটি নির্দিষ্ট প্রোগ্রাম 4750 chmod করতে পারেন [যে কমান্ডটি মোড়ানো করতে পারে], যেটিকে রুট হিসাবে চালানোর জন্য একটি সাধারণ ব্যবহারকারীর অধিকারকে উন্নত করতে।

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