จะ จำกัด ผู้ใช้ SSH ให้อนุญาต SSH-tunneling ได้อย่างไร?


31

ฉันสามารถ จำกัด ผู้ใช้บนเซิร์ฟเวอร์ SSH เพื่อให้พวกเขาเพียงสิทธิพิเศษสำหรับSSH อุโมงค์ ? ie ดังนั้นพวกเขาไม่สามารถเรียกใช้คำสั่งแม้ว่าพวกเขาจะเข้าสู่ระบบผ่านทาง SSH

เซิร์ฟเวอร์ Linux ของฉันคือ Ubuntu 11.04 และ OpenWrt

คำตอบ:


34

ในฝั่งเซิร์ฟเวอร์คุณสามารถ จำกัด /bin/trueโดยการตั้งค่าผู้ใช้เปลือกของพวกเขาไป สิ่งนี้จะช่วยให้พวกเขารับรองความถูกต้อง แต่ไม่ได้รันอะไรเลยเพราะพวกเขาไม่ได้รับเชลล์เพื่อเรียกใช้มันหมายความว่าพวกเขาจะถูก จำกัด เฉพาะสิ่งที่ SSH สามารถเสนอได้ หากมีการส่งต่อพอร์ตพวกเขาจะยังสามารถทำเช่นนั้นได้

-Nบนฝั่งไคลเอ็นต์คุณอาจจะต้องการที่จะเชื่อมต่อกับ สิ่งนี้จะหยุดไคลเอ็นต์ไม่ให้ ASKING เรียกใช้คำสั่งจากระยะไกลเช่น shell มันจะหยุดทำงานหลังจากที่ส่วนการตรวจสอบความถูกต้องเสร็จสิ้น ขอบคุณผู้แสดงความคิดเห็นสำหรับสิ่งที่ออกมา


ฉันจะลองอันนี้ออก: P ขอบคุณ!
LanceBaynes

2
ในการเพิ่มคำตอบของ Caleb คุณอาจต้องบอกลูกค้าว่าไม่ให้เรียกใช้เชลล์ ด้วยบรรทัดคำสั่ง openssh สิ่งนี้จะทำกับแฟล็ก -N มีตัวเลือกที่คล้ายกันใน PuTTY แต่ฉันจำชื่อไม่ได้
Bill B

อืมนั่นคือความปลอดภัยโดยทั่วไปของลูกค้าใช่มั้ย ฉันกำลังค้นหาการตั้งค่าความปลอดภัยฝั่งเซิร์ฟเวอร์ แต่ขอบคุณ!
LanceBaynes

2
ขออภัยฉันไม่ชัดเจน - ฉันหมายรวมกับการตั้งค่าเซิร์ฟเวอร์ ประสบการณ์ของฉันในอดีตที่ผ่านมาถ้าคุณตั้งค่าเชลล์เป็นสิ่งที่ไม่ใช่เชลล์คุณไม่สามารถเชื่อมต่อได้เลยเพราะมันพยายามเปิดเชลล์ แต่ไม่สามารถทำได้ ดังนั้นการรักษาความปลอดภัยจะถูกบังคับใช้ในฝั่งเซิร์ฟเวอร์ (โดยใช้วิธีของ Caleb) แต่หากคุณมีปัญหาในการเชื่อมต่อหลังจากนั้นคุณอาจต้องตั้งสวิตช์ฝั่งไคลเอ็นต์
Bill B

3
useradd sshtunnel -m -d /home/sshtunnel -s /bin/trueคุณสามารถสร้างผู้ใช้ดังกล่าวกับ
fracz

13

ต่อไปนี้มีข้อได้เปรียบที่ไม่อนุญาตให้ส่งต่อซ็อกเก็ตเอเจนต์ X11 และ SSH ซึ่งอาจยังได้รับอนุญาตในวิธี Calebs ข้อดีอีกอย่างคือถ้าผู้ใช้สามารถเปลี่ยนเชลล์เริ่มต้นของเขาด้วยวิธีอื่นใดก็จะยังคง จำกัด การเข้าถึง SSH ของเขาต่อการส่งต่อ TCP เท่านั้น

ใส่สิ่งต่อไปนี้เป็นของคุณ/etc/ssh/sshd_config:

Match User that-restricted-guy
  AllowTcpForwarding yes
  X11Forwarding no
  AllowAgentForwarding no
  ForceCommand /bin/false

เพื่ออนุญาตให้ผู้ใช้that-restricted-guyส่งต่อการเชื่อมต่อ TCP ใด ๆ ผ่านเครื่องที่เปิดใช้งาน SSH ของคุณ (การเชื่อมต่อกับเครื่องนี้ไปยังlocalhostและแม้กระทั่งการเชื่อมต่อจากเครื่องนี้ไปยังเครื่องอื่น ๆ )

หากคุณต้องการมัน จำกัด มากขึ้น (ซึ่งเป็นความคิดที่ดี) คุณสามารถทำสิ่งต่อไปนี้:

Match User even-more-restricted-guy
  PermitOpen 127.0.0.1:12345
  X11Forwarding no
  AllowAgentForwarding no
  ForceCommand /bin/false

สิ่งนี้จะอนุญาตให้ผู้ใช้even-more-restricted-guyส่งต่อการเชื่อมต่อไปยังพอร์ต TCP แบบ 127.0.0.1 เท่านั้นพอร์ต 12345 (เนื่องจากสามารถมองเห็นได้ผ่านเครื่องที่เปิดใช้งาน SSH ของคุณ)

เมื่อผู้ใช้เชื่อมต่อได้ตามปกติตอนนี้เขาจะถูกตัดทันทีเพราะ/bin/falseคำสั่งจะถูกเรียกที่ไม่ทำอะไรเลย แต่ทันทีทางออกด้วยรหัสของ 1. หากคุณต้องการหลีกเลี่ยงปัญหานี้และให้การเชื่อมต่อการส่งต่อของคุณเปิดเพิ่ม-Nธงไปที่sshคำสั่ง นี่จะไม่พยายามดำเนินการคำสั่งใด ๆ แต่ก็ยังอนุญาตให้ตั้งค่าการส่งต่อ TCP

ตัวอย่างของคำสั่งการส่งต่อที่ควรทำงานในการตั้งค่าหลัง:

ssh -L 12345:127.0.0.1:12345 -N even-more-restricted-guy@insert-your-machine

1
ฉันใช้คำตอบใหม่เป็นคำตอบที่ปรับปรุงให้ดีกว่าคำตอบของ Calebs
aef

แน่ใจ ฉันก็ทำความสะอาดด้วย เหมาะที่จะเห็นความเข้าใจผิดที่แก้ไขได้ ราตรีสวัสดิ์.
Jakuje

1

คุณสามารถควบคุมสิ่งที่ผู้คนสามารถทำได้ใน ssh โดยกลุ่มจับคู่สมมติว่าเวอร์ชันของ ssh ของคุณนั้นใหม่พอที่จะรองรับได้ (openssh 5.x +)

โดยทั่วไปเราปฏิบัติต่อพวกเขาราวกับว่าพวกเขาเป็นผู้ใช้ SFTP แต่อนุญาตให้ส่งต่อ TCP และเลือกจุดหมายที่พวกเขาอาจส่งต่อ หากคุณให้โฮมไดเร็กตอรี่กับพวกเขา แต่อย่าสร้างไดเรกทอรีใด ๆ ไว้ข้างใต้พวกเขาไม่สามารถถ่ายโอนไฟล์ใด ๆ ได้เพราะพวกเขาจะไม่ได้รับอนุญาตให้ทำเช่นนั้น

Match Group                     nicepeople
    PubkeyAuthentication        yes
    PasswordAuthentication      yes
    PermitEmptyPasswords        no
    GatewayPorts                no
    ChrootDirectory             /opt/dummy_location/%u
    ForceCommand                internal-sftp
    AllowTcpForwarding          yes
        PermitOpen              192.168.0.8:22
        PermitOpen              192.168.0.5:8080
    # Or leave out the PermitOpen to allow forwarding to anywhere.
    HostbasedAuthentication     no
    RhostsRSAAuthentication     no
    AllowAgentForwarding        no
    Banner                      none

คุณสามารถทำซ้ำกลุ่มการจับคู่บล็อกเหล่านี้สำหรับแต่ละกลุ่มที่คุณต้องการให้พฤติกรรมหรือข้อ จำกัด ที่แตกต่างกัน

คุณสามารถควบคุมตำแหน่งที่บุคคลนี้สามารถใช้งานเครือข่ายได้โดยใช้ iptables

/sbin/iptables -I OUTPUT -m owner --gid-owner 500 -j REJECT
/sbin/iptables -I OUTPUT -m owner --gid-owner 500 -m tcp -p tcp -d 192.168.0.0/24 -j ACCEPT

สิ่งนี้จะถือว่ากลุ่ม "nicepeople" GID คือ 500

ตัวเลือก ssh ด้านบนบางตัวมีอยู่ใน openssh เวอร์ชันเก่า แต่ไม่อยู่ในส่วนของกลุ่มการจับคู่ กลุ่มการแข่งขันมีข้อ จำกัด อย่างมากใน OpenSSH 4.x และก่อนหน้านี้

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