ฉันจะเข้าถึงไดเรกทอรีภายนอก chroot จากภายในได้อย่างไร?


33

ฉันมีผู้ใช้ที่ chrooted ไปยังไดเรกทอรีบ้านของเธอ แต่ฉันต้องการให้เธอสามารถจัดการไฟล์ภายใน/var/wwwได้เช่นกัน เช่นนี้ฉันทำสิ่งต่อไปนี้:

root@server:/home/username# ln -s /var/www www
root@server:/home/username# cd www
root@server:/home/username/www# chown username:username *

อย่างไรก็ตามเมื่อฉันพยายามเปิด/wwwด้วย FileZilla มันจะส่งคืน "ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" ฉันเห็นไดเรกทอรีที่ลิงก์ แต่ฉันไม่สามารถเข้าถึงได้ ผมทำอะไรผิดหรือเปล่า?

คำตอบ:


52

Symlinks เป็นเพียงตัวชี้ไปยังไฟล์อื่นคุณไม่สามารถชี้ไปที่สิ่งที่อยู่นอก chroot เพราะมันกำลังมองหาไฟล์ที่มีชื่อนั้น( /var/wwwซึ่งไม่มีอยู่ใน chroot) ฮาร์ดลิงก์ในอีกทางหนึ่งคือพอยน์เตอร์ไปยังไอโหนด ดังนั้นหากคุณต้องการทำเช่นนั้นคุณจะต้องใช้ฮาร์ดลิงก์โดยไม่-sต้องดำเนินการใด ๆ แต่คุณไม่สามารถเชื่อมโยงอย่างหนักไดเรกทอรี (นอกเหนือ.และ..) ในลินุกซ์สำหรับความหลากหลายของเหตุผล (หลักหนึ่งเป็นที่ระบบไฟล์เหล่านั้นเป็นDAG )

บางทีวิธีที่ดีที่สุดคือการใช้ตัวเชื่อม ลองสิ่งนี้:

mount --bind /var/www /home/username/www

ln: '/var/www': hard link not allowed for directory
Doc

7
@Doc - ไดเรกทอรีไม่สามารถเชื่อมโยงอย่างหนักใน Linux การผูกควรทำงาน
Chris Down

1
ฉันสามารถเพิ่มสิ่งนี้ลงใน fstab เพื่อทำให้เป็นแบบถาวรได้หรือไม่
Kornel

คุณสามารถรีไดเรคทอรีผ่านไดเรกทอรีและทำซ้ำแผนผังด้วยฮาร์ดลิงก์ได้หรือไม่? เช่นถ้าผู้ปกครองมี/foo/a.txtและ/foo/bar/b.txtจากนั้นคุณสามารถทำmkdir -p ./chroot/foo/; mkdir -p ./chroot/foo/bar; ln /foo/a.txt ./chroot/foo/a.txt; ln /foo/bar/b.txt ./chroot/foo/bar/b.txt? หรือว่าจะยังไม่ทำงานด้วยเหตุผลบางอย่าง? (เห็นได้ชัดว่านี่คือสิ่งที่คุณเขียนสคริปต์เพื่อทำแทนที่จะทำด้วยมือ)
shadowtalker

1
@Kornel คุณสามารถใช้noneโหมดพร้อมกับbindตัวเลือก: serverfault.com/questions/613179/…
Yvan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.