การเข้าถึง ssh tunneling เท่านั้น


31

เป็นไปได้หรือไม่ที่จะกำหนดค่า ssh (บน linux) เพื่ออนุญาตการเข้าถึงช่องสัญญาณเท่านั้น? เช่นผู้ใช้สามารถตั้งค่าอุโมงค์ แต่ไม่สามารถรับไฟล์เชลล์ / การเข้าถึง

คำตอบ:


42

ใช่เพียงใช้/bin/falseเป็นเชลล์และสั่งให้ผู้ใช้เริ่มต้นกระบวนการ tunneling SSH โดยไม่ต้องดำเนินการคำสั่งระยะไกลใด ๆ (เช่นการ-Nตั้งค่าสถานะสำหรับ OpenSSH):

ssh -N -L 1234:target-host:5678 ssh-host

อืมถ้าผู้ใช้ไม่ได้ใช้-Nพวกเขามีสิทธิ์เข้าถึงเชลล์ นี้จริงๆไม่ได้แก้ปัญหาและเป็นอันตราย
mlissner

12
@mlissner: ไม่ถ้าคุณ/bin/falseเป็นเชลล์คุณจะไม่สามารถเข้าถึงเชลล์ได้เนื่องจากทุกเซสชั่นการเข้าสู่ระบบจะยุติลงทันที
สเวน

10

ในไฟล์. ssh / authorized_keys ของผู้ใช้ให้ใส่ดังนี้:

permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...

ดังนั้นโดยพื้นฐานแล้วคุณจะต้องอยู่หน้าคีย์สาธารณะ ssh ของผู้ใช้คั่นด้วยช่องว่าง ในตัวอย่างการเชื่อมต่อโดยใช้กุญแจสาธารณะที่เฉพาะเจาะจงจะได้รับอนุญาตให้ทำการส่งต่อพอร์ต SSH ไปยังเซิร์ฟเวอร์ MySQL ของ 192.168.1.10 และเว็บเซิร์ฟเวอร์ของ 10.0.0.16 เท่านั้นและจะไม่ได้รับมอบหมายเชลล์ (ไม่มี pty) คุณกำลังถามเกี่ยวกับตัวเลือก "no-pty" โดยเฉพาะ แต่ตัวเลือกอื่นอาจมีประโยชน์หากผู้ใช้ควรทำการส่งสัญญาณไปยังเซิร์ฟเวอร์เฉพาะเท่านั้น

ดูหน้าคนสำหรับ sshd สำหรับตัวเลือกเพิ่มเติมสำหรับไฟล์ authorized_keys

โปรดทราบว่าประสบการณ์ของผู้ใช้อาจดูแปลก ๆ เล็กน้อย: เมื่อพวกเขาเข้ามามันจะดูเหมือนว่าเซสชันจะถูกหยุดทำงาน (เนื่องจากไม่ได้รับ pty) ไม่เป็นไร. หากผู้ใช้ระบุการส่งต่อพอร์ตด้วยเช่น "-L3306: 192.168.1.10: 3306" การส่งต่อพอร์ตจะยังคงมีผล

ไม่ว่าในกรณีใดลองดูสิ


6
นี้เป็นคำแนะนำที่เป็นอันตราย ; no-ptyไม่ได้ป้องกันการเข้าถึงเชลล์ แต่ก็ไม่ให้เชลล์ pty มันไม่แสดงพรอมต์ (เช่น "ปรากฏขึ้นเพื่อแขวน") แต่คุณยังคงสามารถให้คำสั่งได้ดี คุณต้องการcommand="..."ตัวเลือกใน.ssh/authorized_keysหากคุณต้องการ จำกัด การเข้าถึงเชลล์จากที่นั่น
Aleksi Torhamo

@AleksiTorhamo ถูกต้อง แต่นี่เป็นการเริ่มต้น คุณต้องตั้งค่าเชลล์เป็น / usr / sbin / nologin หรือ / bin / false ใน / etc / passwd เพื่อ จำกัด เชลล์อย่างเต็มที่ ฉันแก้ไขข้อความข้างต้นเพื่อสะท้อนว่าพร้อมด้วยคำแนะนำของ Aleksi
Jamieson Becker

4

ให้เชลล์แก่ผู้ใช้ที่อนุญาตให้พวกเขาออกจากระบบเท่านั้นเช่น /bin/press_to_exit.sh

#! / bin / ทุบตี
read -n 1 -p "กดปุ่มใดก็ได้เพื่อออกจาก" ปุ่ม

วิธีนี้เขาจะสามารถอยู่ในระบบได้ตราบเท่าที่เขาต้องการโดยมีอุโมงค์ที่ใช้งานอยู่ แต่ไม่เรียกใช้คำสั่งใด ๆ Ctrl-cปิดการเชื่อมต่อ


3
ฉันคิดว่าอย่างน้อยในทางทฤษฎีผู้ใช้จะสามารถกด CTRL + C ได้ในเวลาที่เหมาะสม (ระหว่างบรรทัดที่ 1 ถึง 2) และจบลงด้วยเปลือกทุบตีแบบเต็ม
andreas-h

2

กำหนดเชลล์ที่ไม่อนุญาตให้ผู้ใช้ล็อกอิน

เช่น

#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0

จะป้องกันไม่ให้พวกเขาได้รับเชลล์พรอมต์และให้เวลาหมดเวลา 60 วินาที - หากไม่มีการเชื่อมต่อที่ใช้งานเป็นเวลา 60 วินาทีจากนั้นมันจะออกจากระบบและจะตัดการเชื่อมต่ออย่างสมบูรณ์ (เพิ่มจำนวนตามข้อกำหนด)

พวกเขาไม่สามารถดำเนินการคำสั่งระยะไกลเช่นกันเพราะเปลือกนั้นจะไม่ยอมให้


4
linux ส่วนใหญ่ติดตั้งแล้วมาพร้อมกับสิ่งที่ / sbin / nologin หรือ / bin / false หรือที่คล้ายกัน
Rory

1
Ctrl-C จะทำอะไรในตัวอย่างด้านบน
Arjan

Arjan: เนื่องจากสคริปต์ถูกใช้เป็นเชลล์ดังนั้น Ctrl-C จึงมีผลเหมือนกับ " logout" ในแบบปกติ
grawity

2
ฉันชอบการตอบสนองของ Earl จริง ๆ ด้วยตัวเลือก "-N" แต่ถ้าคุณต้องการให้ข้อความที่เป็นประโยชน์เป็นมิตรและให้ข้อมูลแก่ผู้ใช้ของคุณและหยุดพวกเขาออกจากการเชื่อมต่อ SSH ทั่วสถานที่ - สคริปต์ที่กำหนดเองนั้นดีและชัดเจนเกี่ยวกับ มันกำลังทำอะไรอยู่
jrg

2
@jrg การสนทนานี้เก่าและคุณอาจเปลี่ยนใจ :) แต่ IMHO มันอันตรายที่จะออกมาด้วยสคริปต์เชลล์แฮนด์เมด มีอยู่แล้ว ซึ่งคุณสามารถปรับแต่งที่มีข้อความที่ใช้งานง่ายใน/sbin/nologin /etc/nologin.txt
dr01

0

ทางออกของฉันคือการให้ผู้ใช้ที่อาจจะเป็นแค่การขุดอุโมงค์โดยไม่ต้องเปลือกโต้ตอบการตั้งค่าในการที่เปลือก/ etc / passwdไป/ usr / bin / tunnel_shell

เพียงแค่สร้างปฏิบัติการไฟล์/ usr / bin / tunnel_shellกับวง จำกัด

นอกจากนี้ยังใช้ประโยชน์จากAllowGroupsและMatch Groupตัวเลือก

อธิบายอย่างเต็มที่ที่นี่: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/


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

2
@ dr01 บอกตามตรงฉันไม่แน่ใจว่ามันปลอดภัย 100% หรือเปล่า ฉันเดาว่าเมื่อคุณออกจากโปรแกรมเรียกทำงานเซสชัน SSH ก็จะถูกปิดเช่นกัน ฉันจะค้นคว้าเพิ่มเติมและอาจแสดงความคิดเห็นอีกครั้งที่นี่
แดเนียลดับบลิว
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.