เป็นไปได้หรือไม่ที่จะเรียกใช้ sshd ในฐานะผู้ใช้ปกติ?


39

ฉันตั้งใจจะเริ่มต้นsshdอินสแตนซ์ที่สองบนพอร์ตที่ไม่มีสิทธิพิเศษ (เช่น 2222) ด้วยไฟล์กำหนดค่าของฉันเอง

เห็นได้ชัดว่าsshdกระบวนการไม่สามารถsetuidเข้าสู่ระบบในฐานะผู้ใช้อื่นนอกเหนือจากผู้ที่ใช้sshddaemon เป็นไปไม่ได้อย่างชัดเจน

อย่างไรก็ตามเป็นไปได้หรือไม่ที่จะมีsshddaemon ที่ใช้งานได้ซึ่งจะทำงานกับผู้ใช้ที่กำลังทำงานอยู่ในปัจจุบัน? สำหรับกรณีการใช้งานของฉันนี้จะดี

ฉันพยายามบูท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 ของคุณได้ไหม มันบ่นว่า "Set" ไม่ใช่คำสั่งที่ถูกต้องสำหรับฉันเมื่อฉันลองใช้ Ubuntu
jojo

@jojo ฉันไม่เรียกใช้การกำหนดค่านี้ดังนั้นฉันจึงไม่มีไฟล์ที่จะแบ่งปัน คุณจะต้องเริ่มต้นด้วยไฟล์ทำงานที่รู้จักและปรับให้เข้ากับความต้องการของคุณ
Bo Jeanes

1
สิ่งที่ปิดใช้งาน PAM นั้นมีเฉพาะในบางกรณีเท่านั้น เหมาะกับฉันใน Fedora โดยไม่ต้องยุ่งกับการตั้งค่าแพม ดูข้อความอีเมลที่เชื่อมโยงในคำตอบเพื่อหาแนวคิดเพิ่มเติมที่จำเป็นต้องเปลี่ยนเพื่อให้ได้สิ่งที่ดี ฉันจะอัปเดตบันทึกย่อของฉันเร็ว ๆ นี้ว่าฉันทำงานให้นักเทียบท่าได้อย่างไร: hub.docker.com/r/aosqe/ssh-git-server (โปรดรอสองสามวันก่อนที่จะอ่าน)
akostadinov

6

เนื่องจากเป็นการอัปเดตของเธรดนี้ OpenSSH ในเวอร์ชัน 7.5 เลิกใช้ตัวเลือก UsePrivilegeSeparation ทำให้ไม่สามารถปิดใช้งานการแยกสิทธิพิเศษได้ ดูเหมือนว่าการใช้ SSHD ในฐานะผู้ใช้เป็นไปไม่ได้ในตอนนี้

ดูhttps://www.openssh.com/releasenotes.html


ทั้งนี้ขึ้นอยู่กับการกำหนดค่าเซิร์ฟเวอร์นี้อาจไม่เป็นกรณี ฉันไม่มีปัญหาในการรัน sshd ในฐานะผู้ใช้ปกติในขณะที่ระบุว่า "UsePrivilegeSeparation ใช่" หรือ "Sandbox UsePrivilegeSeparation" ในไฟล์ปรับแต่ง sshd ของฉัน
a3nm

แต่ฉันคิดว่านี่เป็น "แก้ไข" ในขณะนี้: "sshd (8): เมื่อเริ่มต้นโดยไม่มีสิทธิ์รูทไม่ต้องใช้สิทธิ์การแยกผู้ใช้หรือเส้นทางที่มีอยู่ทำให้การทดสอบการถดถอยง่ายขึ้น โดยไม่ต้องสัมผัสระบบแฟ้ม "
Daniel Santos

2

ฉันได้ตรวจสอบในรายละเอียดความเป็นไปได้ของการเรียกใช้บริการ sshd ในฐานะผู้ใช้ปกติ รายละเอียดของเวอร์ชั่นของโปรแกรม:

sshd เวอร์ชั่น OpenSSH_7.4, OpenSSL 1.0.2k

ในที่สุดหลังจากแก้ไขข้อผิดพลาดมากมายฉันถึงจุดที่ SSHD ยกเลิกด้วยข้อผิดพลาดต่อไปนี้:

พยายามเขียนเร็กคอร์ดล็อกอินโดยผู้ใช้ที่ไม่ใช่รูท (ยกเลิก)

ฉันตรวจสอบซอร์สโค้ดเพื่อดูว่าเป็นไปได้ที่จะแก้ปัญหาโดยไม่เปลี่ยนซอร์สโค้ดหรือไม่ ดูรหัสที่นี่ บางส่วนของรหัสทำให้โปรแกรมทำแท้ง:

#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บางอย่างเช่นDropbear จะเหมาะกับคุณหรือไม่ มันถูกใช้ในอุปกรณ์ฝังตัวจำนวนมากที่ต้องการเซิร์ฟเวอร์ ssh ที่มีขนาดเล็กกว่า (และมีคุณสมบัติ / การกำหนดค่าน้อยลง)


1
dropbear -E -F -R -w -g -a -p 2222 -P ./dbearPID # ทำอุบาย
dotbit

1

นี่คือ sland ของผู้ใช้ bash sript ตาม Bo Jeanes ตอบว่า:

  • สร้าง dir ที่ทำงานในบ้าน
  • สร้างคีย์เซิร์ฟเวอร์ในอุปกรณ์ที่ใช้งานได้
  • สร้างไฟล์กำหนดค่าพื้นฐานพร้อมไฟล์ pid ที่อยู่ใน dir ที่ทำงาน
  • เรียกใช้ SSH daemon

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
  • pam auth (ทดสอบกับผู้ใช้ในพื้นที่ & ผู้ใช้ระยะไกลเดียวกัน)

ฉันยังเห็น: "debug1: setgroups () ล้มเหลว: ไม่อนุญาตให้ใช้งาน"
dotbit

ทางออกที่ดี แต่คุณควรทำให้คำสั่งดูดีขึ้น น่าเกลียด
MAChitgarha
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.