SSH अधिकृत_की कमांड विकल्प: कई कमांड?


17

अधिकृत_कीप्स में एक कमांड = "..." विकल्प है जो एक कमांड के लिए एक कुंजी को प्रतिबंधित करता है। क्या कई कमांड की कुंजी को प्रतिबंधित करने का एक तरीका है ? जैसे वहाँ एक regex होने से, या किसी अन्य कॉन्फ़िगरेशन फ़ाइल को संपादित करके?

जवाबों:


9

नहीं, यह "अनुमत" कमांड नहीं है, लेकिन "मजबूर" कमांड ( फोर्सकोमांड विकल्प के रूप में )।

एकमात्र संभावना विभिन्न कमांड के लिए अलग-अलग कुंजियों का उपयोग करना या मापदंडों को पढ़ना है stdin


27

आपके पास प्रति कुंजी केवल एक कमांड हो सकती है, क्योंकि कमांड "मजबूर" है।

लेकिन आप एक रैपर स्क्रिप्ट का उपयोग कर सकते हैं। पर्यावरण कमांड के रूप में मूल कमांड लाइन को कमांड कहा जाता है $SSH_ORIGINAL_COMMAND, जिसका वह मूल्यांकन कर सकता है।

जैसे इस में डाल दिया ~/.ssh/allowed-commands.sh:

#!/bin/sh
#
# You can have only one forced command in ~/.ssh/authorized_keys. Use this
# wrapper to allow several commands.

case "$SSH_ORIGINAL_COMMAND" in
    "systemctl restart cups")
        systemctl restart cups
        ;;
    "shutdown -r now")
        shutdown -r now
        ;;
    *)
        echo "Access denied"
        exit 1
        ;;
esac

फिर इसके ~/.ssh/authorized_keysसाथ संदर्भ दें

command="/home/user/.ssh/allowed-commands.sh",…

1
उपयोगी। यह स्पष्ट करने लायक हो सकता है कि यह sshd ही है जो जोड़ता है SSH_ORIGINAL_COMMAND(प्रति man sshd) ताकि यह लिपियों में उपलब्ध हो। स्वचालित स्क्रिप्ट के लिए एक उदाहरण देने के लिए जो कुछ पैटर्न SSH_ORIGINAL_COMMANDको चलाने की अनुमति देता है । यह भी देखें unixwars.blogspot.com/2014/12/getting-sshoriginalcommand.html
सेड्रिक नाइट

7

महान SSH में, द सिक्योर शेल: ओ'रेली द्वारा निश्चित गाइड बुक, अध्याय आठ में, निम्नलिखित की तरह एक स्क्रिप्ट का उपयोग करके एक अच्छा उदाहरण दिया गया है:

#!/bin/sh

/bin/echo "Welcome!
Your choices are:
1       See today's date
2       See who's logged in
3       See current processes
q       Quit"

/bin/echo "Your choice:"

read ans

while [ "$ans" != "q" ]
do
   case "$ans" in
      1)
         /bin/date
         ;;
      2)
         /usr/bin/who
         ;;
      3)
         /usr/bin/top
         ;;
      q)
         /bin/echo "Goodbye"
         exit 0
         ;;
      *)
         /bin/echo "Invalid choice '$ans': please try again"
         ;;
   esac
   /bin/echo "Your choice:"
   read ans
done
exit 0

इसे अपनी .authorized_keysफ़ाइल में उपयोग करना जैसे:

command="/path/to/your/script.sh" <ssh-key>

... ऐसा करते समय आपको देता है ssh:

Welcome!
Your choices are:
1       See today's date
2       See who's logged in
3       See current processes
q       Quit
Your choice:

लेकिन इस तरह की स्क्रिप्ट मूल रूप से टूट जाती है scp, sftpऔर अन्य सभी सामान आपको किसी दिन उपयोगी मिल सकते हैं।
जकूजी

3
@ Jakuje क्या यह commandसामान्य रूप से विकल्प के लिए मान्य नहीं है ?
gf_ 10

1

अन्य दृष्टिकोण दिए गए उपयोगकर्ता के लिए एक प्रतिबंधित शेल का उपयोग करते हैं या एक रैपर का उपयोग करते हैं जो एक विशेष निर्देशिका में मिली फ़ाइलों / लिपियों के लिए आदेशों को नियंत्रित करता है, इस प्रकार आवरण को बदले बिना आदेशों की सूची को बढ़ाने की अनुमति देता है।

एक अन्य लेख में एक सामान्य लिपि का वर्णन किया गया है, जो आदेशित आदेशों के लिए कमांड लाइन तर्कों को भी अनुमति देता है, लेकिन उन्हें नियमित अभिव्यक्ति के साथ व्यक्त नियमों के साथ लॉक करने की अनुमति देता है।

इस उदाहरण को निम्न तरीके से व्यक्त किया जाएगा:

command="only systemctl shutdown"

और .onlyrulesइस सामग्री के साथ एक फाइल तैयार की जाएगी:

\:^systemctl restart cups$:{p;q}
\:^shutdown -r now$:{p;q}

इस 'केवल' दृष्टिकोण का लाभ यह है कि प्रत्येक उपयोगकर्ता और स्थिति के लिए अलग-अलग स्क्रिप्ट लिखने की आवश्यकता नहीं है।


शेल को बदलने में समस्या यह है कि यह सभी लॉगिन पर लागू होगा, यहां तक ​​कि उन कुंजी के साथ जो प्रतिबंधित होने का इरादा नहीं है। इसके अलावा अगर आप केवल शेल लॉगिन और कोई प्रशासक एक्सेस नहीं करते हैं, तो आप अपने कॉन्फ़िगर किए गए शेल को जो भी चाहें बदल सकते हैं। लेकिन आप अभी भी अपनी अधिकृत_की फ़ाइल संपादित कर सकते हैं।
कास्परड

आप एक "प्रतिबंधित शेल" का उपयोग एकForcedCommand
जॉर्ज लेहनर

यह मेरे लिए होता है, उस स्थिति के लिए जहां खाते का उपयोग किया जा रहा है एक सामान्य उपयोगकर्ता खाता है, और आवश्यक कार्यों को विशेषाधिकार प्राप्त है, कि कोई भी चेक करने के लिए sudo पर भरोसा कर सकता है, और अधिकृत_की कमांड विकल्प "sudo $ SSH -ORIGINAL_COMMAND" पर सेट कर सकता है?
स्टीव डी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.