แก้ไขความเป็นเจ้าของไฟล์สำหรับไฟล์ที่อยู่ในไฟล์เก็บถาวร tar


10

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

ฉันได้พบfakerootซึ่งดูเหมือนว่าจะทำอย่างนั้น แต่ฉันไม่สามารถหาไวยากรณ์ที่ฉันต้องใช้เพื่อสร้างที่เก็บถาวรของฉัน

ฉันจะสร้างไฟล์เก็บถาวร tar.xz ได้อย่างไรเพื่อให้ไฟล์มีความเป็นเจ้าของรูทเมื่อแตกไฟล์โดยรูท

do something with fakeroot ...
tar cfpJ foo.tar.xz foo/

คำตอบ:


12

ฉันจะสร้างไฟล์เก็บถาวร tar.xz ได้อย่างไรเพื่อให้ไฟล์มีความเป็นเจ้าของรูทเมื่อแตกไฟล์โดยรูท

ขึ้นอยู่กับรากที่คลายออก:

tar --no-same-owner -xf ...

หากคุณต้องการให้รูททั้งหมดเริ่มต้นด้วยคุณสามารถใช้

tar --owner=root --group=root -cf ...

ที่ใช้งานไม่ได้สำหรับฉัน: tar --owner=root --group=root cfpJ files.tar.xz files/ให้ฉันข้อผิดพลาด tar: You must specify one of the -Acdtrux 'หรือ--test-label' options Try tar --help' หรือtar --usage' for more information.
user1968963

คุณจำเป็นต้องมี-ก่อนที่ตัวเลือกสั้นสายของคุณ: tar --owner=root --group=root -cfpJ ...Ie ไม่-cfpJ cfpJ
goldilocks

tar --owner=root --group=root -cfpJ files.tar.xz files/ทำให้ผมมีข้อผิดพลาดอื่น: และนอกจากนี้มันจะสร้างไฟล์ที่เรียกว่าtar: files.tar.xz: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors pJ
user1968963

3
ตกลง. ฉันมักจะใส่fจุดสิ้นสุด (เพราะสมเหตุสมผลยิ่งขึ้น, สังหรณ์ใจ) และต่ำและเห็นฉันได้รับความล้มเหลวเดียวกันกับการทำงาน-cfpJแต่ -cpJf
goldilocks

@ user1968963: f ควรอยู่หน้าชื่อไฟล์เสมอเพราะมันหมายถึง "พารามิเตอร์ต่อไปคือชื่อไฟล์" หากคุณไม่ใส่ไว้ข้างหน้าชื่อไฟล์ tar จะคิดว่าชื่อไฟล์นั้นเป็น "" แล้วพยายามเปิดไฟล์ "" ซึ่งไม่สามารถสถิติได้ (แน่นอน)
Olivier Dulac

8

fakeroot

fakerootยูทิลิตี้หรือยูทิลิตี้รุ่นใหม่fakeroot-ng (วัตถุประสงค์เดียวกัน, เทคนิคการใช้งานที่แตกต่างกัน) วิ่งโปรแกรมและอ้างว่าโปรแกรมที่มีการทำงานเป็นรากและระบบที่เรียกเช่นchownประสบความสำเร็จ เฉพาะโปรแกรมที่เชื่อว่าการโทรเหล่านี้ประสบความสำเร็จไม่มีสิ่งใดสะท้อนให้เห็นในระบบไฟล์จริง ๆ (ไม่สามารถทำได้เนื่องจากfakerootไม่มีสิทธิพิเศษเพิ่มเติม) อย่างไรก็ตามหากโปรแกรมเปลี่ยนการเป็นเจ้าของไฟล์แล้วดำเนินการบางอย่างตามการเป็นเจ้าของไฟล์นั้นสิ่งนี้สามารถเปลี่ยนพฤติกรรมของโปรแกรมได้

วิธีทั่วไปในการทำให้ผลงานที่มีประโยชน์จาก fakeroot โดยใช้สภาพแวดล้อม fakeroot ที่มีสิ่งต่อไปนี้เกิดขึ้น:

  1. สร้างไฟล์บางไฟล์ย้ายไปมาเปลี่ยนความเป็นเจ้าของและโหมด ฯลฯ
  2. สร้างการเก็บถาวรของไฟล์เหล่านี้

ตัวอย่าง:

fakeroot sh -c '
    chown root:root usr/bin/foo
    tar cf foo.tar usr
'

คุณต้องใช้การร้องขอเพียงครั้งเดียวfakerootเนื่องจากไม่มีหน่วยความจำระหว่างการเรียกใช้

Linux เนมสเปซ

เพื่อความสมบูรณ์ฉันจะพูดถึงว่าหากคุณมีเคอร์เนล≥3.8แล้วเนมสเปซเป็นอีกวิธีหนึ่งในการสร้างสภาพแวดล้อมแบบแกล้งทำเป็นรูท การสนับสนุน userland ยังไม่ค่อยมีดังนั้นฉันจะไม่ไปลงรายละเอียดเพิ่มเติม

เมานต์ไฟล์เก็บถาวร

วิธีอื่นในการแก้ปัญหาของคุณคือการกำหนดให้เก็บถาวรเป็นไดเรกทอรี คุณสามารถใช้archivemountซึ่งมีความสามารถในการปรับเปลี่ยนรูปแบบการเก็บหลายทางlibarchiveรวมทั้ง tar บีบอัด

mkdir mnt
archivemount foo.tar.xz mnt
chown root:root mnt/usr/bin/foo
fusermount -u mnt

เคล็ดลับดีarchivemountแต่ก็ยังต้องการสิทธิ์ในการยกระดับสิทธิ์สูงและแม้ว่าผู้ใช้จะอยู่ในกลุ่มที่เชื่อถือได้ซึ่งได้รับอนุญาตให้เมานต์และยกเลิกการต่อเชื่อมกระบวนการไม่ทำงานchownดังนั้นจึงfakerootจำเป็นต้องใช้เครื่องมือของบุคคลที่สามบางอย่างเช่นอีกด้วย
Anton Samsonov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.