จะรักษาความเป็นเจ้าของไฟล์หลังจากแก้ไขได้อย่างไร?


11

คำถามของฉันคล้ายกับคำถามอื่นยกเว้นว่าคำถามจะถามเกี่ยวกับไฟล์ที่สร้างขึ้นใหม่

ในกล่อง Unix ของฉันผู้อลิซ , บ๊อบและแมวตัวผู้ที่อยู่ในกลุ่มคราว

ไฟล์กำหนดค่าของเซิร์ฟเวอร์ Tomcat เป็นของผู้ใช้ tomcat และในกลุ่ม tomcat

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

อย่างไรก็ตามฉันสังเกตว่าหลังจากแก้ไขแล้วไฟล์จะกลายเป็นของผู้ใช้ล่าสุดที่แก้ไขมัน

ถาม:เป็นไปได้ไหมที่จะเปลี่ยนการอนุญาตเพื่อให้ Alice และ Bob สามารถแก้ไขไฟล์ได้โดยไม่ต้องเปลี่ยนความเป็นเจ้าของ

การแก้ไขไฟล์จะเปลี่ยนความเป็นเจ้าของอย่างไร


เป็นเป้าหมายของคุณเพื่อให้แน่ใจว่าTomcatยังคงเป็นเจ้าของไฟล์ต่อไปหรือเพื่อให้มั่นใจว่า: เซิร์ฟเวอร์ Tomcatยังคงทำงานต่อไป อลิซและบ็อบทั้งสองสามารถแก้ไขไฟล์ต่อไปและรักษาความปลอดภัยนั้นหรือไม่
ctrl-alt-delor

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

คำตอบ:


17

ผู้ใช้ที่เป็นผลลัพธ์ของไฟล์ขึ้นอยู่กับสิ่งที่ผู้แก้ไขทำ ผู้แก้ไขบางคนบันทึกไฟล์โดยตัดทอนและเขียนทับไฟล์ (โดยไม่เปลี่ยน inode) และบรรณาธิการบางเปลี่ยนชื่อไฟล์เป็นชื่ออื่น ( fileที่จะfile~เป็นปกติ) และสร้างไฟล์ใหม่ที่มีชื่อของเดิม การแก้ไขไฟล์ต้นฉบับจะทำให้เจ้าของเหมือนเดิมการสร้างไฟล์ใหม่จะทำให้ไฟล์ใหม่เป็นของ UID ของกระบวนการสร้าง

ของบรรณาธิการที่ผมมีใน Debian, nanoและjoeเช่นเดียวnviและvim(รุ่นที่น้อยที่สุดในvim-tiny) ดูเหมือนจะเขียนทับในสถานที่ แม้ว่าฉันคิดvimและ Emacs อาจกำหนดค่าได้ในสิ่งที่พวกเขาทำ


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

การปรับปรุงอะตอมจะทำได้โดยการสร้างรุ่นใหม่ที่พูดfile.newแล้วเปลี่ยนชื่อไปfile.new fileออกจากไฟล์สำรองหนึ่งสามารถสร้างfile.newการเชื่อมโยงfileไปfile~แล้วเปลี่ยนชื่อไปfile.new fileการเปลี่ยนชื่อเป็นอะตอมมิกในกระบวนการใด ๆ ที่เข้าถึงไฟล์ตามชื่อจะได้รับเวอร์ชันเก่าหรือเวอร์ชันใหม่ ตัวจัดการไฟล์ที่เปิดอยู่แน่นอนจะชี้ไปที่ไฟล์ที่ถูกเปิดค้างไว้ทำให้มีมุมมองที่สอดคล้องกันกับไฟล์


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

(การเปลี่ยนชื่อและสร้างใหม่เป็นอีกวิธีหนึ่งในการแก้ไขการอนุญาตไฟล์ในกรณีที่มีคนสร้างหรือแก้ไขไฟล์ในไดเรกทอรีที่ใช้ร่วมกัน แต่ลืมที่จะให้สิทธิ์การเขียนเป็นกลุ่ม)


6
การสร้างและการเปลี่ยนชื่อยังเป็นวิธีเดียวที่จะทำให้แน่ใจว่าไฟล์นั้นได้รับการอัพเดตแบบ atomically โดยใช้ซีแมนทิกส์ POSIX
สตีเฟ่น Kitt

คำอธิบายที่ดี
Mian Asbat Ahmad

13

ตามที่อธิบายโดยiLKKKKหากการแก้ไขที่ใช้สร้างไฟล์ใหม่เมื่อบันทึกแล้วไม่มีทางควบคุมเจ้าของไฟล์ สิ่งที่คุณอาจสนใจจริงๆคือการรับรองว่าไฟล์ยังคงอ่านได้โดย Tomcat คุณสามารถทำได้โดยมั่นใจว่ากลุ่มของพวกเขาคือtomcat(และพวกเขาสามารถอ่านได้โดยกลุ่มของพวกเขา) และสามารถบังคับใช้กับไฟล์ใหม่โดยการตั้งค่าsetgidบิตในไดเรกทอรีหลัก:

chmod g+s .

ดังนั้นหากbobแก้ไขไฟล์โดยใช้โปรแกรมแก้ไขซึ่งสร้างไฟล์ขึ้นมาใหม่ไฟล์ที่แก้ไขจะสิ้นสุดลงโดยเจ้าของbob:tomcatและ Tomcat จะยังสามารถอ่านได้ (โดยทั่วไปเป็นumaskอย่างน้อย) ตราบใดที่กลุ่มไดเรกทอรีสามารถเขียนได้โดยtomcatกลุ่มผู้ใช้ในกลุ่มนั้นจะสามารถแก้ไขไฟล์ในไดเรกทอรี (ถ้าเพียงสร้างพวกเขาใหม่เท่านั้น)

ฉันอยากจะแนะนำ แต่มองเข้าไปในการเปลี่ยนแปลงกระบวนการของคุณ; คุณอาจไม่ควรแก้ไขไฟล์ในที่ตั้งที่ Tomcat อ่านโดยตรง เป็นการดีที่ไฟล์จะถูกเก็บไว้ใน VCS ของการเรียงลำดับบางอย่างและปรับใช้โดยกระบวนการแยกต่างหาก (อาจเป็นไปโดยอัตโนมัติ) วิธีที่คุณหลีกเลี่ยงปัญหาการเป็นเจ้าของเหล่านี้ ...


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