ฉันสามารถ จำกัด ผู้ใช้บนเซิร์ฟเวอร์ SSH เพื่อให้พวกเขาเพียงสิทธิพิเศษสำหรับSSH อุโมงค์ ? ie ดังนั้นพวกเขาไม่สามารถเรียกใช้คำสั่งแม้ว่าพวกเขาจะเข้าสู่ระบบผ่านทาง SSH
เซิร์ฟเวอร์ Linux ของฉันคือ Ubuntu 11.04 และ OpenWrt
ฉันสามารถ จำกัด ผู้ใช้บนเซิร์ฟเวอร์ SSH เพื่อให้พวกเขาเพียงสิทธิพิเศษสำหรับSSH อุโมงค์ ? ie ดังนั้นพวกเขาไม่สามารถเรียกใช้คำสั่งแม้ว่าพวกเขาจะเข้าสู่ระบบผ่านทาง SSH
เซิร์ฟเวอร์ Linux ของฉันคือ Ubuntu 11.04 และ OpenWrt
คำตอบ:
ในฝั่งเซิร์ฟเวอร์คุณสามารถ จำกัด /bin/true
โดยการตั้งค่าผู้ใช้เปลือกของพวกเขาไป สิ่งนี้จะช่วยให้พวกเขารับรองความถูกต้อง แต่ไม่ได้รันอะไรเลยเพราะพวกเขาไม่ได้รับเชลล์เพื่อเรียกใช้มันหมายความว่าพวกเขาจะถูก จำกัด เฉพาะสิ่งที่ SSH สามารถเสนอได้ หากมีการส่งต่อพอร์ตพวกเขาจะยังสามารถทำเช่นนั้นได้
-N
บนฝั่งไคลเอ็นต์คุณอาจจะต้องการที่จะเชื่อมต่อกับ สิ่งนี้จะหยุดไคลเอ็นต์ไม่ให้ ASKING เรียกใช้คำสั่งจากระยะไกลเช่น shell มันจะหยุดทำงานหลังจากที่ส่วนการตรวจสอบความถูกต้องเสร็จสิ้น ขอบคุณผู้แสดงความคิดเห็นสำหรับสิ่งที่ออกมา
useradd sshtunnel -m -d /home/sshtunnel -s /bin/true
คุณสามารถสร้างผู้ใช้ดังกล่าวกับ
ต่อไปนี้มีข้อได้เปรียบที่ไม่อนุญาตให้ส่งต่อซ็อกเก็ตเอเจนต์ 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
คุณสามารถควบคุมสิ่งที่ผู้คนสามารถทำได้ใน 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 และก่อนหน้านี้