ฉันสามารถสร้างผู้ใช้ SSH ที่สามารถเข้าถึงเฉพาะบางไดเรกทอรีได้หรือไม่


45

ฉันมีเซิร์ฟเวอร์ส่วนตัวเสมือนซึ่งฉันสามารถเชื่อมต่อโดยใช้ SSH กับบัญชีรูทของฉันสามารถใช้คำสั่ง linux และเข้าถึงพื้นที่ดิสก์ทั้งหมดได้อย่างชัดเจน

ฉันต้องการสร้างบัญชีผู้ใช้อื่นซึ่งจะสามารถเข้าถึงเซิร์ฟเวอร์นี้โดยใช้ SSH ได้เช่นกัน แต่ไปยังไดเรกทอรีบางตัวเท่านั้นเช่น /var/www/example.com/

ตัวอย่างเช่นสมมติว่าผู้ใช้รายนี้มีไฟล์ error.log ขนาดใหญ่ (500 MB) อยู่ใน/var/www/example.com/logs/error.log เมื่อเข้าถึงไฟล์นี้โดยใช้ FTP ผู้ใช้นี้ต้องดาวน์โหลด 500 MB เพื่อดูบรรทัดสุดท้ายของบันทึก แต่ฉันต้องการให้เขาเป็น สามารถดำเนินการบางอย่างเช่นนี้:

tail error.log

ดังนั้นฉันต้องการให้เขาสามารถเข้าถึงเซิร์ฟเวอร์โดยใช้ SSH แต่ฉันไม่ต้องการให้เขาเข้าถึงทุกพื้นที่เซิร์ฟเวอร์

ฉันจะทำสิ่งนี้ได้อย่างไร

คำตอบ:


29

chroot ผู้ใช้งาน.


ปรับปรุง:

บทความ TechRepublic โดยวินเซนต์ Danenพูดว่า:

ด้วยการเปิดตัว OpenSSH 4.9p1 คุณไม่จำเป็นต้องพึ่งแฮ็คบุคคลที่สามหรือการตั้งค่า chroot ที่ซับซ้อนอีกต่อไปเพื่อ จำกัด ผู้ใช้ไปยังโฮมไดเร็กตอรี่ของพวกเขาหรือให้พวกเขาเข้าถึงบริการ SFTP

แก้ไข / etc / ssh / sshd_config (/ etc / sshd_config ในการแจกแจงบางอย่าง) และตั้งค่าตัวเลือกต่อไปนี้:

Subsystem     sftp   internal-sftp
Match Group sftp
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

ตรวจสอบให้แน่ใจว่าคำสั่ง "จับคู่" อยู่ท้ายไฟล์ สิ่งนี้บอก OpenSSH ว่าผู้ใช้ทั้งหมดในกลุ่ม sftp จะถูก chrooted ไปยังโฮมไดเร็กตอรี่ (ซึ่ง% h แสดงถึงในคำสั่ง ChrootDirectory

สำหรับผู้ใช้ใด ๆ ที่คุณต้องการ chroot เพิ่มพวกเขาไปยังกลุ่ม sftp โดยใช้:

# usermod -G sftp joe
# usermod -s /bin/false joe
# chown root:root /home/joe
# chmod 0755 /home/joe

คำสั่ง usermod ด้านบนจะเพิ่ม user joe ไปยังกลุ่ม sftp และตั้งค่า shell เป็น / bin / false เพื่อให้พวกเขาไม่สามารถเข้าถึง shell ได้อย่างแน่นอน คำสั่ง chown และ chmod จะตั้งค่าการอนุญาตที่จำเป็นสำหรับไดเรกทอรี ด้วยการตั้งค่าการอนุญาตเหล่านี้ผู้ใช้จะได้รับอนุญาตให้อัพโหลดและดาวน์โหลดไฟล์ แต่ไม่สามารถสร้างไดเรกทอรีหรือไฟล์ในไดเรกทอรีรากได้

Chrooting shell accounts มีความซับซ้อนเพิ่มขึ้นเล็กน้อยเนื่องจากจำเป็นต้องใช้ไฟล์อุปกรณ์บางอย่างและเชลล์ในไดเรกทอรีหลักของผู้ใช้ คำสั่งต่อไปนี้จะตั้งค่าระบบ chroot ขั้นพื้นฐานบน Mandriva Linux:

# mkdir /chroot
# cd /chroot
# mkdir {bin,dev,lib}
# cp -p /bin/bash bin/
# cp -p /lib/{ld-linux.so.2,libc.so.6,libdl.so.2,libtermcap.so.2} lib/
# mknod dev/null c 1 3
# mknod dev/zero c 1 5
# chmod 0666 dev/{null,zero}
# mkdir -p /chroot/home/joe

จากข้างต้นผู้ใช้ joe สามารถ ssh และจะถูก จำกัด ที่ chroot น่าเสียดายที่นี่ไม่ได้ทำอะไรมาก แต่มันให้ความคิดว่าคุณจะตั้งค่าอย่างไร คุณจะต้องติดตั้งไลบรารีและไบนารีเพิ่มเติมทั้งนี้ขึ้นอยู่กับสิ่งที่คุณต้องการให้


อูบุนตูเว็บไซต์ชุมชนกล่าวว่า

การสร้าง chroot

  1. ติดตั้งแพ็กเกจ dchroot และ debootstrap

  2. ในฐานะผู้ดูแลระบบ (เช่นใช้ sudo) ให้สร้างไดเรกทอรีใหม่สำหรับ chroot ในขั้นตอนนี้ไดเรกทอรี/var/chrootจะถูกใช้ หากต้องการทำสิ่งนี้ให้พิมพ์sudo mkdir /var/chroot ลงในบรรทัดคำสั่ง

  3. ในฐานะผู้ดูแลระบบให้เปิด /etc/schroot/schroot.confในโปรแกรมแก้ไขข้อความ พิมพ์ตามด้วยcd /etc/schroot gksu gedit schroot.confนี่จะช่วยให้คุณแก้ไขไฟล์ได้

  4. เพิ่มบรรทัดต่อไปนี้schroot.confจากนั้นบันทึกและปิดไฟล์ แทนที่ your_usernameด้วยชื่อผู้ใช้ของคุณ

    [lucid] description = Ubuntu Lucid location = / var / chroot priority = ผู้ใช้ 3 ราย = your_username groups = sbuild root-groups = root

เปิดเทอร์มินัลแล้วพิมพ์:

sudo debootstrap --variant=buildd --arch i386 lucid /var/chroot/ \ 
http://mirror.url.com/ubuntu/

สิ่งนี้จะสร้าง 'การติดตั้ง' พื้นฐานของ Ubuntu 10.04 (Lucid Lynx) ใน chroot อาจต้องใช้เวลาสักครู่ในการดาวน์โหลดแพ็คเกจ หมายเหตุ: คุณสามารถแทนที่ชัดเจนด้วยรุ่นที่คุณเลือก Ubuntu หมายเหตุ: คุณต้องเปลี่ยนข้างต้นmirror.url.comด้วย URL ของมิเรอร์เก็บถาวรที่ถูกต้องสำหรับคุณ ตอนนี้ควรสร้าง chroot พื้นฐานแล้ว พิมพ์sudo chroot /var/chroot เพื่อเปลี่ยนเป็นรูทเชลล์ภายใน chroot

การตั้งค่า chroot

มีบางขั้นตอนพื้นฐานที่คุณสามารถใช้เพื่อตั้งขึ้น chroot ให้สิ่งอำนวยความสะดวกเช่นความละเอียด DNS /procและการเข้าถึงการมี

หมายเหตุ: พิมพ์คำสั่งเหล่านี้ในเชลล์ซึ่งอยู่นอก chroot

พิมพ์ต่อไปนี้เพื่อเมาต์/proc ระบบไฟล์ใน chroot (จำเป็นสำหรับการจัดการกระบวนการ):

sudo mount -o bind /proc /var/chroot/proc  

พิมพ์ต่อไปนี้เพื่ออนุญาตการแก้ไข DNS จากภายใน chroot (จำเป็นสำหรับการเข้าถึงอินเทอร์เน็ต):

sudo cp /etc/resolv.conf /var/chroot/etc/resolv.conf 

มีการติดตั้งแพคเกจน้อยมากตามค่าเริ่มต้นใน chroot (ไม่ได้ติดตั้งแม้แต่ sudo) ใช้apt-get install package_nameสำหรับติดตั้งแพ็คเกจ


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