ฉันสามารถสร้างไดเรกทอรีสาธารณะภายใต้ไดเรกทอรีส่วนตัวได้หรือไม่


20

ฉันมีโฟลเดอร์ส่วนบุคคล / a / b บนเซิร์ฟเวอร์ที่มีสิทธิ์ 700 ฉันไม่ต้องการให้ผู้อื่นแสดงรายการเนื้อหาใน / a / b เจ้าของ / a เป็นรูท

ตอนนี้ฉันต้องเปิดสิทธิเต็มรูปแบบของไดเรกทอรี / a / b / c ให้กับผู้ใช้ทั้งหมด

ฉันเปลี่ยนการอนุญาตของ / a / b / c เป็น 777 แต่ก็ยังไม่สามารถเข้าถึงได้สำหรับผู้อื่น


2
คุณต้องตั้งค่า 'execute bit' เพื่ออนุญาตการสำรวจไดเรกทอรี (เพื่อสำรวจ / a และ / a / b) สิ่งนี้อาจช่วยแก้ปัญหาของคุณได้:chmod +x /a/b
ex0ns

คำตอบ:


34

คุณสามารถ. คุณเพียงแค่ต้องตั้งค่าบิตปฏิบัติการใน/a/bไดเรกทอรี ที่จะป้องกันไม่ให้ความสามารถในการมองเห็นอะไรในแต่คุณยังสามารถทำทุกอย่างถ้าคุณไปba/b/c

% mkdir -p a/b/c
% chmod 711 a/b
% sudo chown root a/b
% ll a/b
  ls: cannot open directory a/b: Permission denied
% touch a/b/c/this.txt
% ls a/b/c
  this.txt

ระวังว่าในขณะที่คนอื่นไม่สามารถแสดงรายการเนื้อหาของ/a/bพวกเขาสามารถเข้าถึงไฟล์ในไดเรกทอรีนั้นหากพวกเขาเดาชื่อของไฟล์

% echo hello | sudo tee a/b/f
% cat a/b/f
hello
% cat a/b/doesntexist
cat: a/b/doesntexist: No such file or directory

ดังนั้นโปรดรักษาสิทธิ์ที่เหมาะสม (ไม่มีกลุ่ม / โลก) ในไฟล์ / ไดเรกทอรีอื่น ๆ ทั้งหมดในbไดเรกทอรีเช่นนี้จะหลีกเลี่ยงข้อแม้นี้


เป็นอีกทางเลือกหนึ่งในการตั้งค่าบิตที่ใช้งานได้คุณสามารถให้ฮาร์ดลิงก์ไปยัง a / b / c ที่อยู่ในตำแหน่งอื่นได้หรือไม่?
Moby Disk

2
@MobyDisk คุณไม่สามารถลิงก์ไปยังไดเรกทอรีได้ยาก
Michael Hampton

มันจะไม่ทำงานเพราะไม่ว่าคุณจะยังคงต้องอ่านbเพื่อเชื่อมโยงไปยังc
stevieb

3
โปรดทราบว่ามีข้อแม้ที่สำคัญบางประการ หากไฟล์ใด ๆ ที่a/bมีกลุ่มที่ไม่ใช่ศูนย์ / สิทธิ์อื่น ๆ และฝ่ายตรงข้ามรู้หรือสามารถเดาชื่อของพวกเขาได้กล่าวว่าฝ่ายตรงข้ามสามารถโต้ตอบกับไฟล์เหล่านั้นได้
เควิน

True @Kevin, perms สำหรับทุกสิ่งภายใต้bควรมี perms ที่กำหนดไว้เพื่อป้องกันสิ่งนี้ก่อนที่จะสร้างcและจากนั้นจำเป็นต้องใช้ความขยันเมื่อมีรายการอื่น ๆ เข้ามาbเพื่อให้มั่นใจว่า perms ปลอดภัยสำหรับเจ้าของเท่านั้น
stevieb

9

ด้วยสิทธิ์เหล่านั้นคุณไม่สามารถบรรลุเป้าหมายของคุณ ในการไปยังไดเรกทอรีcคุณต้องอนุญาตให้ผู้ใช้รายอื่น ๆ สำรวจไดเรกทอรีbที่ดำเนินการโดยให้สิทธิ์ดำเนินการสำหรับไดเรกทอรีนั้น ด้วยการ/a/bตั้งค่าเป็นโหมด 711 คุณสามารถบรรลุสิ่งที่คุณต้องการเนื่องจากคุณให้การข้ามเส้นทางไดเรกทอรี แต่ปฏิเสธการอ่านและเขียน แต่โปรดทราบว่าในขณะที่ผู้ใช้รายอื่นไม่สามารถแสดงรายการไฟล์ได้/a/bพวกเขาอาจเข้าถึงไฟล์ได้หากพวกเขาเดาชื่อและไฟล์นั้นมีสิทธิ์เปิดเพียงพอ


3

หากผู้ใช้ไม่สามารถเข้าถึง/a/bแล้วพวกเขาก็ไม่สามารถเข้าถึงไฟล์ใด ๆ /a/b/cภายใต้ สิทธิ์ในการไม่เกี่ยวข้องตั้งแต่การสำรวจเส้นทางไดเรกทอรีหยุดที่/a/b/c/a/b

หากสิ่งที่คุณต้องการคือการป้องกันไม่ให้ไดเรกทอรี/a/bอยู่ในรายการ แต่คุณก็พอใจกับผู้ใช้ที่เข้าถึงไฟล์/a/bหากพวกเขาเดาชื่อไฟล์คุณสามารถทำให้/a/bไฟล์ปฏิบัติได้ แต่อ่านไม่ได้ ในไดเรกทอรีสิทธิ์ในการอ่านจะควบคุมเฉพาะการแสดงรายการเนื้อหาของไดเรกทอรีในขณะที่สิทธิ์ดำเนินการจะควบคุมการเข้าถึงรายการของไดเรกทอรีนั้น

# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# echo 'hello' >/a/b/existingfile
# su bob -c 'ls -l /a/b'
ls: /a/b: Permission denied
# su bob -c 'cat /a/b/nosuchfile'
cat: /a/b/nosuchfile: No such file or directory
# su bob -c 'cat /a/b/existingfile'
hello
# su bob -c 'ls -l /a/b/c'
 contents of /a/b/

หากคุณไม่ต้องการให้ผู้ใช้อื่น ๆ เพื่อให้สามารถเข้าถึงไฟล์ใน/a/bยกเว้น/a/b/cคุณสามารถสัมผัส/a/b/cผ่านทางมุมมองอื่นผ่านการผูกติด

# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# mkdir /c
# mount --bind /a/b/c /c
# su bob -c 'ls /a/b/c'
ls: /a/b/c: Permission denied
# su bob -c 'ls -l /c'
 contents of /a/b/
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.