उपयोगकर्ता को एक एसएसएच सुरंग स्थापित करने की अनुमति दें, लेकिन कुछ और नहीं

मैं किसी उपयोगकर्ता को किसी विशेष पोर्ट पर एक विशेष मशीन पर एक एसएसएच सुरंग स्थापित करने की अनुमति देना चाहता हूं (कहें, 5000), लेकिन मैं इस उपयोगकर्ता को यथासंभव प्रतिबंधित करना चाहता हूं। (प्रमाणीकरण सार्वजनिक/निजी कीपियर के साथ होगा)।

मुझे पता है कि मुझे प्रासंगिक ~/.ssh/अधिकृत_keys फ़ाइल को संपादित करने की आवश्यकता है, लेकिन मुझे यकीन नहीं है कि वहां वास्तव में कौन सी सामग्री डाली जाए (सार्वजनिक कुंजी के अलावा)।

0
ro fr bn

10 उत्तर

सार्वजनिक पोस्ट को प्रमाणित करने पर यह पोस्ट देखें।

याद रखने के लिए आपको दो मुख्य चीजें हैं:

  1. Make sure you chmod 700 ~/.ssh
  2. Append the public key block to authorized-keys
0
जोड़ा

आप उपयोगकर्ता मशीन पर जो भी एसएस क्लाइंट इस्तेमाल कर रहे हैं, उसके माध्यम से एक कुंजी उत्पन्न करेंगे। उदाहरण के लिए PUTTY में यह सटीक चीज़ करने के लिए उपयोगिता है। यह एक निजी और सार्वजनिक कुंजी दोनों उत्पन्न करेगा।

जेनरेट की गई सार्वजनिक कुंजी फ़ाइल की सामग्री अधिकृत_की फाइल में रखी जाएगी।

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

0
जोड़ा

आप शायद उपयोगकर्ता के खोल को प्रतिबंधित करने के लिए सेट करना चाहते हैं शैल। उपयोगकर्ता के ~/.bashrc या ~/.bash_profile में पैथ चर को अनसेट करें, और वे किसी भी आदेश को निष्पादित करने में सक्षम नहीं होंगे। बाद में, यदि आप निर्णय लेते हैं कि आप उपयोगकर्ता को (ओं) आदेशों के सीमित सेट को निष्पादित करने की अनुमति देना चाहते हैं, जैसे less या tail उदाहरण के लिए, तो आप अनुमति की प्रतिलिपि बना सकते हैं एक अलग निर्देशिका (जैसे /home/प्रतिबंधित-आदेश ) पर आदेश देता है और उस निर्देशिका को इंगित करने के लिए पथ अद्यतन करें।

0
जोड़ा
हां, यह मानते हुए कि उपयोगकर्ता @ होस्ट खोल के रूप में rbash है। प्रतिबंधित शैल देखें
जोड़ा लेखक Jason Day, स्रोत
लेकिन यह उपयोगकर्ता को ssh कमांड लाइन पर एक अलग कमांड निर्दिष्ट करने से नहीं रोकता है, जैसे ssh use @ host "/ bin/bash" , है ना?
जोड़ा लेखक Fritz, स्रोत
ठीक है, मैंने कोशिश की और आप सही हैं। चूंकि निर्दिष्ट कमांड को लॉगिन खोल द्वारा निष्पादित किया जाता है, इसलिए /bin/bash निष्पादित करना विफल रहता है क्योंकि इसमें स्लेश होते हैं।
जोड़ा लेखक Fritz, स्रोत
हालांकि यह कहा जाना चाहिए कि कम को शायद एक बुरा विचार है, क्योंकि वहां से आप !/Bin/bash के साथ एक अप्रतिबंधित खोल से बच सकते हैं। पेन- अन्य उदाहरणों के लिए test.sans.org/blog/2012/06/06/… । तो अलग-अलग आदेशों को बहुत सावधानी से, बहुत सावधानी से करने की इजाजत दी जानी चाहिए।
जोड़ा लेखक Fritz, स्रोत

मेरा समाधान उस उपयोगकर्ता को प्रदान करना है जो केवल सुरंग हो सकता है, बिना किसी इंटरैक्टिव खोल के , उस खोल को /etc/passwd में /usr/bin/tunnel_shell

बस अनंत लूप के साथ निष्पादन योग्य फ़ाइल /usr/bin/tunnel_shell बनाएं।

#!/bin/bash
trap '' 2 20 24
clear
echo -e "\r\n\033[32mSSH tunnel started, shell disabled by the system administrator\r\n"
while [ true ] ; do
sleep 1000
done
exit 0

Fully explained here: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/

0
जोड़ा
संकेत के लिए धन्यवाद, मैंने कुछ बाधा संकेतों को फँसाना जोड़ा
जोड़ा लेखक DanFromGermany, स्रोत
@ बिगपापू: क्या आपने वास्तव में इसका परीक्षण किया था? मैं नहीं देख सकता कि यह कहां से बच जाएगा। यदि आप एक खोल में हैं और आप tunnel_shell चलाते हैं, तो आपके पास shell ->/bin/bash tunnel_shell होगा ताकि आप निश्चित रूप से खोल पर वापस भाग सकें, लेकिन यदि आपने tunnel_shell के रूप में उपयोगकर्ता के खोल को सेट किया है, तो आपके पास केवल /bin/bash tunnel_shell चल रहा होगा, बिना किसी शेल से बचने के लिए , जहा तक मै देख सकता हू। मैंने इसका परीक्षण किया और ctrl-z से बच नहीं सका। यदि आपने किया इसे आज़माएं और बच सकते हैं, तो क्या आप
जोड़ा लेखक Aleksi Torhamo, स्रोत
मैं सिर्फ "खोल" के लिए/bin/cat का उपयोग करता हूं। ठीक काम करने लगता है। बिल्ली के खिलाफ किसी भी शोषण से अवगत नहीं है, और यहां तक ​​कि यदि आपको कुछ इनपुट पैटर्न मिल गया है जो इसे क्रैश करने का प्रबंधन करता है, तो आपका एसएसएच सत्र समाप्त हो जाएगा।
जोड़ा लेखक flabdablet, स्रोत
CTRL + Z आपको स्क्रिप्ट से बच जाएगा जिससे आपको बैश तक पूर्ण पहुंच मिल जाएगी ... स्क्रिप्ट की शुरुआत में "जाल" 20 "(उद्धरण के बिना) जोड़ने का प्रयास करें
जोड़ा लेखक Big Papoo, स्रोत

उबंटू 11.10 पर, मैंने पाया कि मैं एसएसएच कमांड को ब्लॉक कर सकता हूं, बिना और बिना टी के, और ब्लॉक एसपीपी प्रतिलिपि ब्लॉक कर सकता हूं, जबकि पोर्ट अग्रेषण को पार करने की इजाजत देता है।

विशेष रूप से मेरे पास लोकहोस्ट से बंधे "कुछहोस्ट" पर एक रेडिस-सर्वर है: 637 9 कि मैं एसएस सुरंगों के माध्यम से सुरक्षित रूप से अन्य होस्ट्स में साझा करना चाहता हूं जिनके पास एक कीफाइल है और इसमें एसएसएच होगा:

$ ssh -i keyfile.rsa -T -N -L 16379:localhost:6379 [email protected]

यह एसएस कमांड को निष्पादित करने वाले मेजबान पर स्थानीय रूप से दिखाई देने के लिए "कुछहोस्ट" पर "लोकहोस्ट" पोर्ट 637 9 का कारण बनता है, जिसे "लोकलहोस्ट" पोर्ट 1637 9 पर रीमेप किया जाता है।

रिमोट "somehost" पर मैं अधिकृत_keys के लिए उपयोग किया गया है:

cat .ssh/authorized_keys   (portions redacted)

no-pty,no-X11-forwarding,permitopen="localhost:6379",command="/bin/echo do-not-send-commands" ssh-rsa rsa-public-key-code-goes-here [email protected]

नो-पीटीआई अधिकांश एसएसएच प्रयासों को ट्रिप करता है जो टर्मिनल खोलना चाहते हैं।

परमिटोपेन बताता है कि किन बंदरगाहों को अग्रेषित करने की अनुमति है, इस मामले में पोर्ट 637 9 रेडिस-सर्वर पोर्ट जो मैं आगे बढ़ाना चाहता था।

आदेश = "/ bin/echo do-not-send-command" वापस "e-not-send-command" echoes करता है अगर कोई या कुछ ssh -T या अन्यथा होस्ट के लिए कमांड भेजने के लिए प्रबंधन करता है।

हाल ही में उबंटू man sshd से, अधिकृत_की/कमांड को निम्नानुसार वर्णित किया गया है:

आदेश = "आदेश"                निर्दिष्ट करता है कि जब भी इस कुंजी का उपयोग किया जाता है तो आदेश निष्पादित किया जाता है                प्रमाणीकरण के लिए। उपयोगकर्ता द्वारा प्रदान की गई आदेश (यदि कोई है) है                नजरअंदाज कर दिया।

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

मुझे लगता है कि कुछ पिछले उत्तरों में किए गए प्रतिबंधित खोल सुझाव भी एक अच्छा विचार है। साथ ही, मैं इस बात से सहमत हूं कि यहां विस्तृत सब कुछ "आदमी sshd" पढ़ने और "अधिकृत_की" के लिए खोज करने से निर्धारित किया जा सकता है

0
जोड़ा
बहुत उपयोगी जवाब। मैं केवल उस कोड को /sbin/nologin जोड़ता हूं, जो उपयोगकर्ता के लिए -N और पोर्ट अग्रेषण के साथ ठीक काम करता प्रतीत होता है (यदि उस खाते से कनेक्ट होने वाले सभी लोगों को समान व्यवहार किया जाना चाहिए मार्ग)।
जोड़ा लेखक Marcin Zajączkowski, स्रोत
जबकि no-pty इंटरैक्टिव दृश्य को खोलने की अनुमति नहीं देता है, यह कमांड निष्पादन को रोकने के लिए कुछ भी नहीं करता है, इसलिए उपयोगकर्ता अधिकृत_keys फ़ाइल को संपादित कर सकता है यदि उसके पास <�कोड जैसे कुछ के साथ पहुंच है > एसएसएच सर्वर 'sed -i -es/no-pty//~ /ssh/अधिकृत_keys' ।
जोड़ा लेखक synapse, स्रोत
केवल no-pty के बारे में
जोड़ा लेखक synapse, स्रोत
@synapse कमांड = "/ bin/echo do-not-send-command", ऊपर सूचीबद्ध भी है, कमांड को अवरुद्ध करने का इरादा है। और एक संदेश प्रदान करें। क्या आपने उपर्युक्त संपूर्ण सेटिंग्स को हराने के लिए अपना उदाहरण दिया था या आप केवल नो-पीटीआई पर टिप्पणी कर रहे हैं?
जोड़ा लेखक Paul, स्रोत
यह उल्लेख करता है कि व्यवस्थापक उपयोगकर्ताओं को अधिकृत_की फाइल या स्वामित्व वाली निर्देशिका के स्वामित्व प्रदान करने के लिए बाध्य नहीं हैं, न ही यह उपयोगकर्ताओं की होम निर्देशिका में भी मौजूद है (माना जाता है कि एसएसएच सर्वर अपने स्थान के लिए ठीक से कॉन्फ़िगर किया गया है)
जोड़ा लेखक Dan Farrell, स्रोत
@AndrewWolfe आमतौर पर, ~ उपयोगकर्ता/.ssh/valid_keys का स्वामित्व user होगा, और उपयोगकर्ता खाते तक पहुंचने के लिए उपयोग की जाने वाली अधिकृत कुंजी का प्रबंधन करेगा । एसएसएच अनुमतियों के बारे में picky है और ~/.ssh/ और इसकी सामग्री पर अपेक्षाओं को लगा सकता है। मैंने एक sudo chown root: .ssh/valid_keys किया है और ऐसा लगता है कि मुझे लॉग इन करने से रोक दिया गया है, लेकिन मुझे पिछले अनुभव से पता है कि उपयोगकर्ता को उस फ़ाइल का स्वामित्व नहीं है - जड़ अगर आप चाहें तो इसे प्रबंधित कर सकते हैं।
जोड़ा लेखक Dan Farrell, स्रोत
?? @DanFarrell .ssh/अधिकृत_keys रूट, या व्हील, या किसके स्वामित्व में होगा?
जोड़ा लेखक Andrew Wolfe, स्रोत

मैं लॉग इन करने के लिए सार्वजनिक कुंजी के साथ अधिकृत_कीज फ़ाइल सेट अप करने में सक्षम हूं   अंदर। मुझे जो जानकारी चाहिए, वह अतिरिक्त जानकारी है जो मुझे चाहिए   प्रतिबंधित करें कि उस खाते को क्या करने की अनुमति है। उदाहरण के लिए, मुझे पता है कि मैं कर सकता हूँ   कमांड डालें जैसे कि:

 कोई Pty, कोई बंदरगाह अग्रेषण, नहीं-X11 अग्रेषण, कोई एजेंट अग्रेषण
 

आप अपनी अधिकृत_की फाइल में एक लाइन चाहते हैं जो इस तरह दिखती है।

permitopen="host.domain.tld:443",no-pty,no-agent-forwarding,no-X11-forwardi
ng,command="/bin/noshell.sh" ssh-rsa AAAAB3NzaC.......wCUw== zoredache 
0
जोड़ा

यदि आप केवल एक विशिष्ट कमांड के लिए एक्सेस की अनुमति देना चाहते हैं - जैसे svn - आप अधिकृत कुंजी फ़ाइल में उस कमांड को भी निर्दिष्ट कर सकते हैं:

command="svnserve -t",no-port-forwarding,no-pty,no-agent-forwarding,no-X11-forwarding [KEY TYPE] [KEY] [KEY COMMENT]

From http://svn.apache.org/repos/asf/subversion/trunk/notes/ssh-tricks

0
जोड़ा

अधिकृत_की विकल्प जैसे नो-एक्स 11-फ़ॉरवर्डिंग के अलावा, वास्तव में आप वास्तव में एक पूछ रहे हैं: permitopen = "host: port"। इस विकल्प का उपयोग करके, उपयोगकर्ता केवल निर्दिष्ट मेजबान और बंदरगाह पर एक सुरंग स्थापित कर सकता है।

AUTHORIZED_KEYS फ़ाइल प्रारूप के विवरण के लिए मैन sshd देखें।

0
जोड़ा
@ जॉन हार्ट: <�कोड> नो-पीटीआई शैल एक्सेस को प्रतिबंधित नहीं करता है, फिर भी आप खोल पर पहुंच जाएंगे, यह आपको प्रॉम्प्ट नहीं दिखाएगा; आप अभी भी कमांड दे सकते हैं और आउटपुट को ठीक देख सकते हैं। यदि आप .ssh/अधिकृत_keys से खोल पहुंच को प्रतिबंधित करना चाहते हैं तो आपको command = "..." विकल्प चाहिए।
जोड़ा लेखक Aleksi Torhamo, स्रोत
परमिटोपेन के साथ पोर्ट अग्रेषण को प्रतिबंधित करने से एसएसएच-डब्ल्यू पूछताछ की तरह सुरंग डिवाइस अग्रेषण की तरह भी बंद कर देता है?
जोड़ा लेखक flabdablet, स्रोत
विकल्प सेट के हिस्से के रूप में आपको "नो-पीटीआई" भी निर्दिष्ट करना होगा। यदि आप केवल "परमिटोपैन" का उपयोग करते हैं, तो आप सुरंगों को दिए गए होस्ट/पोर्ट पर प्रतिबंधित कर देंगे ... लेकिन आप अभी भी इंटरैक्टिव शैल की अनुमति देंगे।
जोड़ा लेखक John Hart, स्रोत

मैंने एक सी प्रोग्राम बनाया जो इस तरह दिखता है:

#include 
#include 
#include 
#include 
void sig_handler(int signo)
{
    if (signo == SIGHUP)
        exit(0);
}

int main()
{
    signal(SIGINT, &sig_handler);
    signal(SIGTSTP, &sig_handler);

    printf("OK\n");
    while(1)
        sleep(1);
    exit(0);
}

मैंने इस कार्यक्रम में प्रतिबंधित उपयोगकर्ता का खोल सेट किया है।

मुझे नहीं लगता कि प्रतिबंधित उपयोगकर्ता कुछ भी निष्पादित कर सकता है, भले ही वे ssh सर्वर कमांड करते हैं, क्योंकि कमांड को खोल का उपयोग करके निष्पादित किया जाता है, और यह खोल कुछ भी निष्पादित नहीं करता है।

0
जोड़ा

Here you have a nice post that I found useful: http://www.ab-weblog.com/en/creating-a-restricted-ssh-user-for-ssh-tunneling-only/

विचार यह है: (नए प्रतिबंधित उपयोगकर्ता नाम के साथ "sshtunnel")

useradd sshtunnel -m -d /home/sshtunnel -s /bin/rbash
passwd sshtunnel

ध्यान दें कि उपयोगकर्ता क्या कर सकता है इसे प्रतिबंधित करने के लिए हम rbash (प्रतिबंधित-बैश) का उपयोग करते हैं: उपयोगकर्ता सीडी (निर्देशिका परिवर्तित नहीं कर सकता) और किसी भी पर्यावरण चर सेट नहीं कर सकता है।

फिर हम उपयोगकर्ता के PATH env चर को /home/sshtunnel/.profile में कुछ भी नहीं संपादित करते हैं - एक चाल जो बाश को निष्पादित करने के लिए कोई आदेश नहीं मिलती है:

PATH=""

अंत में हम निम्नलिखित अनुमतियों को सेट करके उपयोगकर्ता को किसी भी फाइल को संपादित करने की अनुमति नहीं देते हैं:

chmod 555 /home/sshtunnel/
cd /home/sshtunnel/
chmod 444 .bash_logout .bashrc .profile
0
जोड़ा