ব্যবহারকারীকে আর্গুমেন্ট সহ একটি কমান্ড চালানোর অনুমতি দিন (এতে স্পেস রয়েছে)


17

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

তবে এটি কাজ করে না, sudo একটি পাসওয়ার্ড চাইছে।

আমার আদেশটি হ'ল: sudo grep "string I want (" /var/log/thefilename.log(হ্যাঁ, (স্ট্রিংয়ের একটি কাঁচা এবং কিছু ফাঁকা জায়গা আমি গ্রেপ করতে চাই)

/etc/sudoers.d/user-can-grep এই বিষয়বস্তু আছে:

user ALL=(root) NOPASSWD: /bin/grep "string I want (" /var/log/thefilename.log

এই sudoers ফাইলের মালিকানা root:rootরয়েছে এবং এর অনুমতি রয়েছে-r--r-----

সার্ভারটি উবুন্টু বিশ্বস্ত 14.04.3 এলটিএস।

আমি এই কাজটি কীভাবে করব?


নাজিওস চেকগুলি স্পষ্টভাবে / বিন / গ্রেপ, বা / ইউএসআর / বিন / গ্রেপ কল করছে?
জেফ স্ক্যালার হলেন

এটি করে এমন একটি শেল স্ক্রিপ্ট লিখুন এবং তারপরে স্ক্রিপ্টটি চলতে দিন sudo
ব্যবহারকারী 253751

@ জেফশালার এফওয়াইআই স্ক্রিপ্টটি কেবল কল করেছে grepএবং which grepআমাকে বলছে এটি ব্যবহার করছে /bin/grep। সুডো ফাইলে AFAIK আপনাকে বাইনারিটির পুরো পথ নির্দিষ্ট করতে হবে, এমনকি যদি আপনি এটি পুরো পাথ ছাড়াই কল করেন।
ররি

উত্তর:


13

স্পষ্টতই, Sudoers ফাইলের একটি নির্দিষ্টকরণের সাথে তুলনা করার আগে sudo কমান্ডটিকে স্ট্রিংয়ে ফ্ল্যাট করে। সুতরাং, আপনার ক্ষেত্রে, আপনার উদ্ধৃতি বা পালানোর কোনও অন্য রূপ ব্যবহার করার দরকার নেই:

user ALL=(root) NOPASSWD: /bin/grep string I want ( /var/log/thefilename.log

সম্পাদনা : @ ব্যবহারকারী ২৩০১৩ মন্তব্যগুলিতে যেমন উল্লেখ করেছেন, কোনও ফাইলের "স্ট্রিং আমি চাই" এর জন্য গ্রেপ করার জন্য এটি ব্যবহার করা যেতে পারে (এবং এক্সটেনশান দ্বারা "স্ট্রিং আই" এবং "স্ট্রিং" এর জন্যও)) দয়া করে আগে সাবধানতা অবলম্বন করুন সুডোর যুক্তি যাচাই করে!


এছাড়াও নোট করুন যে নিম্নলিখিত অনুরোধগুলি সমান, অর্থাৎ আপনি ব্যবহারকারীদের একটি নির্দিষ্ট প্রতিনিধিত্বের মধ্যে সীমাবদ্ধ রাখতে পারবেন না:

sudo grep "string I want (" /var/log/thefilename.log
sudo grep 'string I want (' /var/log/thefilename.log
sudo grep string\ I\ want\ \( /var/log/thefilename.log

এটি কোট এবং পলায়ন শেল দ্বারা পরিচালিত হয় এবং কখনও পৌঁছায় না এ কারণে এটি ঘটে sudo


আকর্ষণীয়, আমি অবাক হয়েছি যে এটি শোষণযোগ্য কি না, অর্থাত্ sudoআপনাকে একটি জিনিস টাইপ করে বোঝায় (যা স্পেসিফিকেশনের সাথে মেলে) তবে এটি কার্যকর করার ক্ষেত্রে এটি সম্পূর্ণ অন্য কিছু।
এইটবিটটনি

4
@EightBitTony অবশ্যই এটি! আপনার মধ্যে sudoers: user host = NOPASSWD: /usr/bin/vim Editing sudoers file(ব্যবহারকারীদের "sudoers ফাইল সম্পাদনা" সম্পাদনা করার অভিপ্রায় সহ) cdইন-ইন করে /etc/এবং চালিয়ে গিয়ে শোষণ করা যেতে পারে sudo vim Editing sudoers file। আমি বলব যে যুক্তিসঙ্গত জটিলতার কোনও কমান্ডের জন্য আপনার মন্তব্যে প্রস্তাবিত পদ্ধতির সাথে যাওয়া উচিত — শেলটি $@পরিবর্তনশীল সরবরাহ করে যেখানে আপনি আর্গুমেন্টগুলি যেভাবে দলবদ্ধ করার প্রত্যাশা করেছেন সেভাবে দলবদ্ধ করা হয়েছে তা পরীক্ষা করতে পারেন।
আলেকজান্ডার বাতিশেভ

8
( /var/logযে কোনও জায়গায় একটি পাথ তৈরি করুন এবং thefilename.logযে কোনও ফাইলের সাথে সিমিলিংক দিন , ব্যবহারকারী string I wantতখন যে কোনও ফাইল থেকে গ্রেপ করতে পারেন ।
ব্যবহারকারী23013

2
@ আটবিটটোনির উত্তর (একটি মোড়ক স্ক্রিপ্ট লিখুন, সেই স্ক্রিপ্টে সুডোর অ্যাক্সেসের অনুমতি দিন) অনেক বেশি ভাল এবং নিরাপদ।
ক্যাস

বাহ, এটি সুরক্ষা-কেন্দ্রিক সরঞ্জামের জন্য অত্যন্ত চর্চা।
স্যাম ওয়াটকিন্স

32
  1. একটি স্ক্রিপ্ট লিখুন (কেবল রুট দ্বারা লিখনযোগ্য)
  2. সেই স্ক্রিপ্টে, grepআপনার প্রয়োজনীয়টি কার্যকর করুন
  3. Sudoers কনফিগারেশনে, কেবলমাত্র সেই স্ক্রিপ্টটিতে অ্যাক্সেসের অনুমতি দিন
  4. যে কোনও সরঞ্জাম কনফিগার করুন বা যেকোনও ব্যবহারকারীকে সুডোর মাধ্যমে স্ক্রিপ্টটি চালানোর পরামর্শ দিন

ডিবাগ করা অনেক সহজ, একটি নির্দিষ্ট ফাইলের নির্দিষ্ট অ্যাক্সেসটিকে লক করা সহজ এবং শোষণ করা আরও শক্ত।


2

যেহেতু আপনি শুধুমাত্র ফাইল অ্যাক্সেসের জন্য রুট প্রয়োজন, ব্যবহারের বিষয়ে বিবেচনা cat, teeবা অনুরূপ এবং বংশীধ্বনিতুল্য যে কিছু grepবা প্রোগ্রাম যাই হোক না কেন আপনি প্রয়োজন চালানোর জন্য। উদাহরণস্বরূপ, sudo cat /file/path | grep …আপনি একেবারে যেখানে প্রয়োজন সেখানে মূলকে সীমাবদ্ধ করুন।


0

sudoদুর্দান্ত, তবে কখনও কখনও এটি সেরা ফিট হয় না। এই জন্য আমি ব্যবহার করতে চাই supersuperএছাড়াও উন্নত অনুমতি দেয়, তবে এটি কমান্ড এলিয়াসগুলি ধরে নেয়, যা জটিল কমান্ড লাইনের অনুমতি দেওয়ার ক্ষেত্রে সুবিধাজনক, কারণ এগুলি সাধারণ কমান্ড লাইন হিসাবে ব্যবহৃত হয়।

আপনার সুপার.tab দেখতে হবে:

grepcmd "grep 'string I want (' /var/log/thefilename.log" user

এবং হিসাবে আহ্বান করা হবে super grepcmd


sudoহ'ল Cmnd_Alias(যাতে এক বা একাধিক কমান্ড থাকতে পারে, আরগ সীমাবদ্ধতার সাথে বা ছাড়াই)।
ক্যাস

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

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