আমি sumers এ Cmnd_Alias ​​এর সাথে কমান্ড আর্গুমেন্ট কীভাবে ব্যবহার করব?


36

Sudoers এ আমি কমান্ড আর্গুমেন্ট কীভাবে নির্দিষ্ট করব? ব্যাকগ্রাউন্ড হিসাবে, awsকমান্ডটি হ'ল উপ-সিস্টেমগুলির পুরো গুচ্ছের প্রবেশদ্বার এবং আমি ব্যবহারকারীকে কেবল চালনার জন্য সীমাবদ্ধ রাখতে চাইaws s3 cp ...any other args...

আমি যখন নিম্নলিখিতটি চেষ্টা করি /etc/sudoers

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws s3 cp, /usr/local/aws/bin/aws s3 cp
gbt1 ALL=(gbt-ops) NOPASSWD: AWSS3_CMD

দুর্ভাগ্যক্রমে শেলটি পাসওয়ার্ডের জন্য অনুরোধ করে

$ sudo -u gbt-ops aws s3 cp helloworld s3://my-bucket/hw.1
gbt-ops's password:

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

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws, /usr/local/aws/bin/aws

তারপর

$ sudo -u gbt-ops aws s3 cp helloworld s3://my-bucket/hw.1
...happy

অনেক ধন্যবাদ.


আপনার কাছে কেন / ইউএসআর / লোকাল / বিন / আউস, / ইউএসআর / লোকাল / আউজ / বিন / আউস আছে? মানে আপনি একই লাইনে দু'বার কমান্ডটি পুনরাবৃত্তি করলেন?
মোহাম্মদ নুরাল্ডিন

উত্তর:


47

আপনি কোনও ওয়াইল্ডকার্ড ব্যবহার করেননি, তবে দুটি যুক্তি সরবরাহ করেছেন। অতএব sudoলিখিত হিসাবে ঠিক কমান্ড সন্ধান করুন (পথ-অনুসন্ধান ব্যতীত) (থেকে man 5 sudoers):

 If a Cmnd has associated command line arguments, then the arguments in
 the Cmnd must match exactly those given by the user on the command line
 (or match the wildcards if there are any).

এর মতো কিছু চেষ্টা করুন:

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws s3 cp *, /usr/local/aws/bin/aws s3 cp *

মনে রাখবেন যে:

 Wildcards in command line arguments should be used with care.  Because
 command line arguments are matched as a single, concatenated string, a
 wildcard such as ‘?’ or ‘*’ can match multiple words. 

সুতরাং, কমান্ড অনুযায়ী কেবল একটি ওয়াইল্ডকার্ড প্রয়োজন।


1
সংক্ষিপ্ত ব্যাখ্যা এবং জ্ঞান ভাগ করে নেওয়ার জন্য +1, ধন্যবাদ।
দিনেশ

1
নোট করুন যে sudo সঠিকভাবে যুক্তির বিভাজনকে সম্মান করে না যা কিছু ক্ষেত্রে শোষণের জন্য ব্যবহার করা যেতে পারে, unix.stackexchange.com/a/279142/43920 দেখুন । সুতরাং /usr/local/bin/aws s3 cpsudoers নির্দিষ্ট করার পরিবর্তে , এটি একটি স্ক্রিপ্ট (কেবল রুট দ্বারা লেখার যোগ্য) দ্বারা প্রতিস্থাপন করা নিরাপদ।
পিসিওয়ার্ড

6

@ মুরু হিসাবে একই, তবে যারা পুরো কাজের উদাহরণ পছন্দ করেন তাদের জন্য:

# Cmnd alias specification
Cmnd_Alias ECHO_CMD=/bin/echo A *,/bin/echo B *

# Make USER run specific commands on given HOSTNAME
# USER_NAME 

#userx
userx ALL=(root) NOPASSWD: /sbin/cmd1,/sbin/cmd2,ECHO_CMD

যদিও /sbin/cmd1, /sbin/cmd2অন্য কোনও আদেশ হতে পারে।

এর উদ্দেশ্যটি ECHO_CMDউপস্থাপন করা যা sudo echo X Aপাসফ্রেজের জন্য জিজ্ঞাসা করবে, যদিও sudo echo A Xনা, এবং আপনাকে এই জাতীয় সাধারণ পরীক্ষার মাধ্যমে আত্মবিশ্বাস অর্জন করতে দেয়।

(এটি ধরে নেওয়া হয়েছিল যে /bin/echoআপনার সিস্টেমে এটি কোথায় রয়েছে তা পরীক্ষা করার জন্য প্রতিধ্বনি প্রবেশ করে whereis echo)


হ্যাঁ, /bin/echoবাইনারি রয়েছে তবে বেশিরভাগ শেলেরও বিল্ট-ইন ফাংশন রয়েছে echoযা আপনি যদি পুরো পথ না সরবরাহ করেন তবে এই বাইনারিটির পরিবর্তে ব্যবহৃত হবে।
Marki555
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.