วิธี จำกัด ผู้ใช้ในหนึ่งโฟลเดอร์และไม่อนุญาตให้ย้ายโฟลเดอร์ออก


28

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

ฉันจะ จำกัด ผู้ใช้นี้ในโฟลเดอร์ของพวกเขาอย่างไรและไม่อนุญาตให้เขาย้ายออกและดูไฟล์ / ไดเรกทอรีอื่น ๆ


คุณอาจต้องการใช้บัญชีผู้ใช้แยกต่างหากเพื่อจุดประสงค์นั้น
Martin von Wittich

หรือบางทีJailkit
FloHim เองเมื่อ

chmod ไม่ได้เป็นทางออกที่ดีเพราะฉันไม่สามารถใช้มันกับทุกโฟลเดอร์ในเซิร์ฟเวอร์ของฉันฉันใช้ก่อนที่เขาจะสามารถย้ายออกโฟลเดอร์ของเขา
badr

จริงๆแล้วฉันไม่มีความคิดเกี่ยวกับกลุ่มเพราะฉันไม่ได้ใช้มันมาก่อนคุณช่วยอธิบายให้ฉันฟังได้ว่ามันมีประโยชน์อะไรบ้าง?
badr

วิธีอื่น - serverfault.com/questions/497011/… .
slm

คำตอบ:


26

ฉันแก้ไขปัญหาด้วยวิธีนี้:

สร้างกลุ่มใหม่

$ sudo addgroup exchangefiles

สร้างไดเรกทอรี chroot

$ sudo mkdir /var/www/GroupFolder/
$ sudo chmod g+rx /var/www/GroupFolder/

สร้างไดเรกทอรีที่เขียนได้กลุ่ม

$ sudo mkdir -p /var/www/GroupFolder/files/
$ sudo chmod g+rwx /var/www/GroupFolder/files/

ให้ทั้งคู่กับกลุ่มใหม่

$ sudo chgrp -R exchangefiles /var/www/GroupFolder/

หลังจากนั้นฉันไปที่/etc/ssh/sshd_configและเพิ่มในตอนท้ายของไฟล์:

Match Group exchangefiles
  # Force the connection to use SFTP and chroot to the required directory.
  ForceCommand internal-sftp
  ChrootDirectory /var/www/GroupFolder/
  # Disable tunneling, authentication agent, TCP and X11 forwarding.
  PermitTunnel no
  AllowAgentForwarding no
  AllowTcpForwarding no
  X11Forwarding no

ตอนนี้ฉันจะเพิ่มผู้ใช้ใหม่ด้วยชื่อ obama ในกลุ่มของฉัน:

$ sudo adduser --ingroup exchangefiles obama

ตอนนี้ทุกอย่างเสร็จสิ้นดังนั้นเราต้องเริ่มบริการ ssh ใหม่:

$ sudo service ssh restart

แจ้งให้ทราบล่วงหน้า: ผู้ใช้ไม่สามารถทำสิ่งใดออกfileไดเรกทอรี ฉันหมายความว่าไฟล์ทั้งหมดของเขาจะต้องอยู่ในโฟลเดอร์ไฟล์


1
ฉันเปลี่ยนผู้ใช้เป็นsudo su - obamaและยังคงสามารถเห็นไฟล์ของคนอื่น @badr
alper

11

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

ตัวอย่างเช่นการตั้งค่า/bin/rksh(kornshell แบบ จำกัด ) แทนเชลล์ที่กำหนดไว้ล่วงหน้าของผู้ใช้เป็นเชลล์เริ่มต้นสำหรับผู้ใช้/etc/profileนั้น

หมายเหตุ:หากปฏิบัติการที่มีชื่อนี้ไม่มีอยู่ในระบบของคุณให้สร้างฮาร์ดลิงก์ln /bin/ksh /bin/rkshและkshจะพิจารณาจากชื่อของไฟล์ว่ามีข้อ จำกัด หรือไม่

เปลือก จำกัดจะ (ตัวอย่าง) ป้องกันไม่ให้ทำcdคำสั่งหรือระบุคำสั่งที่มี/(เส้นทางที่ชัดเจน) ในการภาวนาและจะไม่อนุญาตให้เปลี่ยนPATH, SHELLหรือENVตัวแปรและเปลี่ยนเส้นทางการส่งออกยังไม่ได้รับอนุญาต

คุณยังคงสามารถจัดเตรียมเชลล์สคริปต์ที่กำหนดไว้ล่วงหน้าให้กับผู้ใช้ที่จะ (ภายใต้การควบคุมของสคริปต์ผู้ดำเนินการ!) อนุญาตให้ผู้ใช้เรียกใช้สคริปต์เฉพาะนั้นในสภาพแวดล้อมที่ไม่ จำกัด


คำตอบนี้เป็นไปได้มากง่ายกว่าตั้งค่าสภาพแวดล้อม chroot ดังนั้นฉันได้ขึ้นลงคะแนน
Azhrei

5

คำสั่งchrootอนุญาตให้คุณสร้างรูทที่ จำกัด สำหรับผู้ใช้คำถามนี้อธิบายแนวคิดchrootและวิธีการใช้

ปรับปรุง: ค้นหาคุก chroot ที่ติดตั้งในมหาสมุทรดิจิตอลนำเสนอเอกสารเพิ่มเติมเฉพาะสำหรับสภาพแวดล้อมของพวกเขา นี่คือคู่ที่ฉันคิดว่าเกี่ยวข้องกับสิ่งที่คุณอาจต้องการ

วิธีกำหนดค่าสภาพแวดล้อม Chroot สำหรับการทดสอบบน Ubuntu 12.04 VPS

วิธีอนุญาตการเข้าถึง SSH แบบ จำกัด สำหรับผู้ใช้ที่ถูกจำคุก

นี่คือสิ่งที่เกี่ยวข้องกับการคุมขังซึ่งFloHim เองแนะนำ


ใช่พวกเขาอธิบาย แต่พวกเขาไม่ได้อธิบายวิธีการใช้งานฉันลองใช้ด้วยการยกย่อง แต่สิ่งที่ฉันได้รับ: chroot: ล้มเหลวในการเรียกใช้คำสั่ง '/ bin / bash': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
badr

1
จริง แต่ตอนนี้คุณเคยได้ยิน chroot คุกคุณสามารถทำวิจัยเพิ่มเติมฉันได้ปรับปรุงคำตอบกับลิงค์ไปยังเอกสารใน Digital Ocean ซึ่งให้คำอธิบายเพิ่มเติมที่เหมาะกับสภาพแวดล้อมของพวกเขา
X Tian
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.