मैं sudoers में 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

बहुत बहुत धन्यवाद।


आपके पास / usr / स्थानीय / बिन / aws, / usr / स्थानीय / aws / bin / aws क्यों है? मेरा मतलब है कि आपने एक ही पंक्ति में दो बार कमांड को दोहराया है?
मोहम्मद नौरेलिन

जवाबों:


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 cpसूडोर्स में निर्दिष्ट करने के बजाय , इसे स्क्रिप्ट के साथ बदलने के लिए सुरक्षित है (केवल मूल द्वारा उपयुक्त)।
पीसीवर्ल्ड

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जो इस बाइनरी के बजाय उपयोग किया जाएगा यदि आप पूर्ण पथ प्रदान नहीं करते हैं।
मार्की 555
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.