การสร้างลิงค์ยาก - การอนุญาต?


17

การอนุญาตใดบ้างที่ส่งผลต่อการสร้างฮาร์ดลิงก์ การเป็นเจ้าของไฟล์มีความสำคัญหรือไม่?


สมมติว่าผู้ใช้aliceต้องการที่จะสร้างยากเชื่อมโยงไปยังแฟ้มในไดเรกทอรีtarget.txttarget-dir

  • ซึ่งสิทธิ์ไม่aliceต้องทั้งในtarget.txtและtarget-dir?
  • หากtarget.txtเป็นของผู้ใช้billและtarget-dirเป็นของผู้ใช้chadมันจะเปลี่ยนแปลงอะไรหรือไม่?

ฉันพยายามจำลองสถานการณ์นี้โดยสร้างโครงสร้างโฟลเดอร์ / ไฟล์ต่อไปนี้ในext4ระบบไฟล์:

#> ls -lh . *
.:
drwxr-xr-x 2 bill bill 60 Oct  1 11:29 source-dir
drwxrwxrwx 2 chad chad 60 Oct  1 11:40 target-dir

source-dir:
-r--r--r-- 1 bill bill 0 Oct  1 11:29 target.txt

target-dir:
-rw-rw-r-- 1 alice alice 0 Oct  1 11:40 dummy

แม้ว่าaliceจะสามารถสร้างซอฟต์ลิงค์ให้target.txtแต่เธอก็ไม่สามารถสร้างฮาร์ดลิงค์ได้:

#> ln source-dir/target.txt target-dir/
ln: failed to create hard link ‘target-dir/target.txt’ => ‘source-dir/target.txt’: Operation not permitted

หากaliceเป็นเจ้าของtarget.txtและไม่มีการเปลี่ยนแปลงการอนุญาตฮาร์ดลิงก์จะสำเร็จ สิ่งที่ฉันหายไปที่นี่


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

ไม่มันไม่ใช่งานที่มอบหมาย ฉันกำลังเผชิญกับสถานการณ์ที่แน่นอนและคาดเดาได้บ้าง แต่ฉันคิดว่าการถามจากมุมมองทางทฤษฎีจะดีกว่า ในกรณีของฉันฉันไม่สามารถสร้างฮาร์ดลิ้งค์ได้ไม่ว่าจะtarget.txtและtarget-dirได้รับอนุญาตนอกเสียจากว่าฉันจะsudoเป็น root
gcscaglia

ฮาร์ดลิงก์ใช้ความเป็นเจ้าของและการอนุญาตเดียวกันดังนั้นจึงเหมือนกับการเข้าถึงไฟล์ต้นฉบับ
teppic

@teppic สิ่งที่ยากของฉันคือไม่ได้เข้าถึงฮาร์ดลิงก์ที่สร้างขึ้นมันเป็นการสร้างฮาร์ดลิงก์เนื่องจากaliceฉันสามารถเข้าถึงทั้งไฟล์ต้นฉบับและฮาร์ดลิงก์ไปยังมัน (สร้างด้วยsudo) แต่ฉันไม่สามารถสร้างลิงก์เป็น ผู้ใช้aliceแม้เราจะเห็นด้วยกับการอนุญาตเหล่านี้ควรจะเพียงพอสำหรับมัน
gcscaglia

คำตอบ:


19

ในการสร้างฮาร์ดลิงก์aliceจะต้องwrite+executeได้รับอนุญาตtarget-dirในทุกกรณี สิทธิ์ที่จำเป็นในการtarget.txtจะแตกต่างกันไป:

  • หากfs.protected_hardlinks = 1แล้วaliceต้องการเป็นเจ้าของอย่างใดอย่างหนึ่งtarget.txtหรืออย่างน้อยread+writeสิทธิ์ในมัน
  • ถ้าเป็นเช่นfs.protected_hardlinks = 0นั้นชุดของการอนุญาตจะทำ; แม้แต่ 000 ก็โอเค

คำตอบสำหรับคำถามที่คล้ายกันนี้มีข้อมูลที่ขาดหายไปเพื่อตอบคำถามนี้

จากhttp://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1 [การเน้นทุ่นระเบิด]:

hardlinks:

บนระบบที่มีไดเร็กทอรีที่ผู้ใช้สามารถเขียนได้บนพาร์ติชันเดียวกันกับไฟล์ระบบคลาสที่มีปัญหาด้านความปลอดภัยที่ยาวนานนั้นคือการแข่งขันแบบ hardlink-based-time-of-check-time-of-use กดไลค์ / tmp วิธีการทั่วไปของการใช้ประโยชน์จากข้อบกพร่องนี้คือการข้ามขอบเขตของสิทธิ์เมื่อติดตาม hardlink ที่กำหนด (เช่นกระบวนการรูทตามฮาร์ดลิงก์ที่สร้างโดยผู้ใช้รายอื่น) นอกจากนี้ยังมีปัญหาที่ผู้ใช้สามารถ "ปักหมุด" ไฟล์ setuid / setgid ที่อาจมีช่องโหว่เพื่อให้ผู้ดูแลระบบไม่สามารถอัพเกรดระบบได้อย่างสมบูรณ์

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


ขอบคุณ! นี่คือสิ่งที่ฉันได้รับการดิ้นรนเป็นเวลาหนึ่งวันใน Debian 9!
Arda

ทำไมฉันถึงได้รับ "การดำเนินการไม่ได้รับอนุญาต" แม้ว่าฉันจะมี rwx perms สำหรับ dir และ rw perms ในไฟล์?
Michael

1

aliceความต้องการอย่างน้อยสิทธิ์ในการอ่านบนtarget.txtและเขียน + target-dirผู้ได้รับอนุญาตบน

ตอนนี้โครงสร้างการอนุญาตทำงานเป็นชุดที่แยกออกเป็นสามส่วน:

  1. สิทธิ์ผู้ใช้: ใช้กับผู้ใช้ที่เป็นเจ้าของโหนด
  2. สิทธิ์กลุ่ม: ใช้กับผู้ใช้ที่อยู่ในกลุ่มที่เป็นเจ้าของโหนด
  3. การอนุญาตของผู้อื่น: ใช้กับผู้ใช้ / กลุ่มอื่นที่ไม่ได้เป็นเจ้าของโหนด

ดังนั้นคำถามความเป็นเจ้าของมีผลเฉพาะกับชุดของสิทธิ์ที่จำเป็นสำหรับaliceการเป็น:

  • หากaliceเป็นผู้ใช้ของเจ้าของสิทธิ์ที่จำเป็นต้องอยู่ในส่วน "ผู้ใช้"
  • หากaliceเป็นส่วนหนึ่งของกลุ่มที่เป็นเจ้าของสิทธิ์ที่จำเป็นต้องอยู่ในส่วน "กลุ่ม"
  • หากaliceไม่ได้เป็นเจ้าของและไม่ได้เป็นส่วนหนึ่งของกลุ่มที่เป็นเจ้าของสิทธิ์ที่จำเป็นต้องอยู่ในส่วน "อื่น ๆ "

ฉันก็คิดเช่นกัน แต่ในสถานการณ์ของฉันtarget.txtมีการอนุญาต 444 ครั้งและtarget-dirมีการอนุญาต 777 ครั้งฉันยังไม่สามารถสร้างฮาร์ดลิงก์ได้เว้นแต่ฉันจะเป็น root หรือเป็นเจ้าของไฟล์ที่ฉันเชื่อมโยง สิ่งที่น่าสนใจก็คือลิงก์อ่อนจะทำงานตามที่คุณอธิบาย
gcscaglia

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

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