क्या सामान्य उपयोगकर्ता के रूप में sshd चलाना संभव है?


39

मैं sshdअपने स्वयं के कॉन्फ़िगरेशन फ़ाइल के साथ एक गैर-विशेषाधिकार प्राप्त बंदरगाह (जैसे 2222) पर एक दूसरा उदाहरण शुरू करने का लक्ष्य बना रहा हूं ।

जाहिर है, इस sshdप्रक्रिया setuidमें उपयोगकर्ताओं को लॉग इन करने के अलावा अन्य नहीं हो सकता है, जो sshdडेमॉन चला रहा है, स्पष्ट रूप से असंभव है।

हालांकि, क्या एक कामकाजी sshdडेमॉन होना संभव है जो वर्तमान में चल रहे उपयोगकर्ता के लिए काम करेगा? मेरे उपयोग के मामले के लिए, यह ठीक होगा।

मैंने sshdअपनी स्वयं की कॉन्फिग फ़ाइल और होस्ट कुंजी के साथ एक उदाहरण को बूट करने की कोशिश की और sshdप्रक्रिया शुरू हो गई (कुछ कमांड की तरह, रूट नहीं होने के बारे में कोई शिकायत नहीं), हालांकि जब मैं उस पोर्ट से जुड़ने की कोशिश करता हूं, तो sshdप्रक्रिया मर जाती है।

$ /usr/sbin/sshd -dD -h .ssh/id_rsa -p 2222 
debug1: sshd version OpenSSH_5.6p1
debug1: read PEM private key done: type RSA
debug1: private host key: #0 type 1 RSA
debug1: setgroups() failed: Operation not permitted
debug1: rexec_argv[0]='/usr/sbin/sshd'
debug1: rexec_argv[1]='-dD'
debug1: rexec_argv[2]='-h'
debug1: rexec_argv[3]='.ssh/id_rsa'
debug1: rexec_argv[4]='-p'
debug1: rexec_argv[5]='2222'
debug1: Bind to port 2222 on 0.0.0.0.
Server listening on 0.0.0.0 port 2222.
debug1: Bind to port 2222 on ::.
Server listening on :: port 2222.
debug1: fd 6 clearing O_NONBLOCK
debug1: Server will not fork when running in debugging mode.
debug1: rexec start in 6 out 6 newsock 6 pipe -1 sock 9
debug1: inetd sockets after dupping: 5, 5
Connection from ::1 port 57670
debug1: Client protocol version 2.0; client software version OpenSSH_5.6
debug1: match: OpenSSH_5.6 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.6
debug1: list_hostkey_types: 
No supported key exchange algorithms
debug1: do_cleanup
debug1: do_cleanup
debug1: audit_event: unhandled event 12

debug1: setgroups() failed: Operation not permittedरेखा स्पष्ट रूप से बाहर चिपक जाता है, लेकिन जब तक यह एक कनेक्शन स्वीकार करने की कोशिश करता है यह मरता नहीं है।

जवाबों:


35

चारों ओर खुदाई के बाद मैंने उसे खोजा।

साथ प्रक्रिया प्रारंभ करें sshd -f ~/.ssh/sshd_configजहां /.ssh/sshd_configआपके द्वारा बनाई गई एक नई फ़ाइल है। अन्य विकल्पों में (जैसे एक अलग होस्ट कुंजी, अलग पोर्ट, आदि) आपको लाइन जोड़ने की आवश्यकता है UsePrivilegeSeparation no। यह sshdप्रक्रिया को किसी भी setuidया setgidकॉल करने की कोशिश करने से रोकेगा और इसे आपके उपयोगकर्ता के रूप में जारी रखने की अनुमति देगा और आपके उपयोगकर्ता के रूप में कनेक्शन स्वीकार करेगा।

संपादित करें: यह पता लगाने के कुछ क्षण बाद किसी और ने मुझे यह लिंक ट्वीट किया जो इस बात की पुष्टि करता है कि यह करने का सही तरीका है: http://cygwin.com/ml/cygwin/2008-04/msg00363.html


1
आपको सेटिंग में PAM को अक्षम UsePamकरना होगा no
haridsv

@bjeanes क्या यह आपके लिए काम करता है? क्या आप अपनी sshd_config फ़ाइल साझा कर सकते हैं? जब मैं ubuntu पर कोशिश करता हूं तो यह शिकायत "सेट" मेरे लिए एक वैध आदेश नहीं है।
जोजो

@jojo मैं इस कॉन्फ़िगरेशन को नहीं चलाता, इसलिए मेरे पास साझा करने के लिए कोई फ़ाइल नहीं है। आप एक ज्ञात कामकाजी फ़ाइल के साथ शुरू करने जा रहे हैं और अपनी आवश्यकताओं को समायोजित कर सकते हैं।
बो जीन्स

1
PAM चीज़ को अक्षम करना केवल विशिष्ट मामलों के लिए है। फेडोरा पर मेरे लिए काम करता है बिना पैम सेटिंग के साथ खिलवाड़। कुछ और विचारों के जवाब में लिंक किए गए ईमेल संदेश को देखें कि सभी चीजों को अच्छा बनाने के लिए और क्या बदलने की आवश्यकता है। मैं जल्द ही अपने नोट्स अपडेट करूंगा कि मैंने इसे डॉकटर के लिए कैसे काम किया: hub.docker.com/r/aosqe/ssh-git-server (कृपया इसे पढ़ने से पहले कुछ दिनों की अनुमति दें)
akostadinov

6

इस थ्रेड के अद्यतन के रूप में, संस्करण 7.5 में OpenSSH ने UsePrivilegeSeparation विकल्प को हटा दिया, जिससे विशेषाधिकार अलगाव को अक्षम करना असंभव हो गया। ऐसा प्रतीत होता है कि SSHD को एक उपयोगकर्ता के रूप में चलाना अब असंभव है।

Https://www.openssh.com/releasenotes.html देखें


सर्वर कॉन्फ़िगरेशन के आधार पर, यह मामला नहीं हो सकता है। मुझे अपने sshd config फाइल में "UsePrivilegeSeparation Yes" या "UsePrivilegeSeparation sandbox" का संकेत देते हुए सामान्य उपयोगकर्ता के रूप में sshd चलाने में कोई समस्या नहीं है।
A3nm

वैसे मैंने अभी तक इसकी कोशिश नहीं की है, लेकिन मुझे लगता है कि यह अब "निश्चित" है: "sshd (8): जब रूट विशेषाधिकारों के बिना शुरू किया जाता है, तो विशेषाधिकार जुदाई उपयोगकर्ता या मौजूद होने के लिए पथ की आवश्यकता नहीं होती है। प्रतिगमन परीक्षण को आसान बनाने में मदद करता है। बिना फाइलसिस्टम को छुए। "
डैनियल सैंटोस

2

मैंने सामान्य उपयोगकर्ता के रूप में sshd सेवा चलाने की संभावना के बारे में विस्तार से जाँच की है। कार्यक्रम के संस्करण का विवरण:

sshd संस्करण OpenSSH_7.4, OpenSSL 1.0.2k

अंत में कई त्रुटियों को हल करने के बाद, मैं एक बिंदु पर पहुंच गया, जिसे एसएसएचडी ने निम्न त्रुटि के साथ निरस्त कर दिया:

गैर-रूट उपयोगकर्ता (गर्भपात) द्वारा लॉगिन रिकॉर्ड लिखने का प्रयास

मैंने स्रोत कोड की जाँच की कि क्या स्रोत कोड को बदले बिना समस्या को हल करना संभव है। यहाँ कोड देखें । कार्यक्रम का गर्भपात करने वाले कोड का कुछ हिस्सा:

#ifndef HAVE_CYGWIN
    if (geteuid() != 0) {
        logit("Attempt to write login records by non-root user (aborting)");
        return (1);
    }
#endif

यह उपयोगकर्ता के विशेषाधिकार की जाँच करता है (geteuid() != 0)और यहाँ समस्या का कारण बनता है।


1

यह मानते हुए कि @magiclantern ने ऊपर उल्लेख किया है और यह मानकर कि आप पैचअप नहीं करना चाहते हैं, आपके लिए ड्रॉपबियर काम sshdजैसा होगा ? यह कई एम्बेडेड उपकरणों में उपयोग किया जाता है जो छोटे पदचिह्न (और कम सुविधाओं / कॉन्फ़िगरेशन) के साथ एक ssh सर्वर चाहते हैं।


1
dropbear -E -F -R -w -a -a -p 2222 -P ./dbearPID # करता है ट्रिक
dotbit

1

यहाँ बो जीन्स के जवाब के आधार पर एक यूजरलैंड बैश सैट्रिप है:

  • घर में काम करने वाली डायर बनाएं
  • काम कर रहे डायर में सर्वर कीज उत्पन्न करें
  • काम कर रहे dir में स्थित pid फाइल के साथ बेसिक कॉन्फिगर फाइल जनरेट करें
  • SSH डेमॉन लॉन्च

mkdir ${HOME}/custom_ssh
ssh-keygen -f ${HOME}/custom_ssh/ssh_host_rsa_key -N '' -t rsa
ssh-keygen -f ${HOME}/custom_ssh/ssh_host_dsa_key -N '' -t dsa
echo "Port 2222
HostKey ${HOME}/custom_ssh/ssh_host_rsa_key
HostKey ${HOME}/custom_ssh/ssh_host_dsa_key
AuthorizedKeysFile  .ssh/authorized_keys
ChallengeResponseAuthentication no
UsePAM yes
Subsystem   sftp    /usr/lib/ssh/sftp-server
PidFile ${HOME}/custom_ssh/sshd.pid" > ${HOME}/custom_ssh/sshd_config
/usr/bin/sshd -f ${HOME}/custom_ssh/sshd_config
echo "
--------
Process ID : ${HOME}/custom_ssh/sshd.pid
-------"
  • OpenSSH_7.9p1, OpenSSL 1.1.1a 20 नवंबर 2018
  • पाम ऑर्ट (उसी स्थानीय और दूरस्थ उपयोगकर्ता के साथ परीक्षण किया गया)

मैं अभी भी देखता हूं: "डिबग 1: सेटग्रुप्स () विफल: ऑपरेशन की अनुमति नहीं है"
बिंदू

अच्छा समाधान, लेकिन आपको कमांड बेहतर दिखना चाहिए। बदसूरत।
मचिटगारहा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.