สำรองและคืนค่าการอนุญาตของไฟล์


17

มีวิธีการสำรองและกู้คืนความเป็นเจ้าของไฟล์และการอนุญาต (สิ่งที่สามารถเปลี่ยนแปลงได้ด้วยchownและchmod)?

คุณสามารถทำเช่นนี้ใน Windows ใช้ icacls

สิ่งที่เกี่ยวกับรายการควบคุมการเข้าถึง?


มันจะช่วยถ้าคุณระบุว่าคุณใช้ distro ใดเนื่องจาก distros ที่แตกต่างกันใช้ตัวจัดการแพคเกจต่าง ๆ
garethTheRed

@garethTheRed มันขึ้นอยู่กับ fs ที่ใช้หรือ distro ด้วยหรือเปล่า?
leeand00

1
ฉันสงสัยว่ามันจะขึ้นอยู่กับระบบไฟล์
garethTheRed

จนถึงตอนนี้ไม่มีคำตอบที่สมบูรณ์แบบ
kittygirl

คำตอบ:


24

คุณสามารถทำสิ่งนี้ได้ด้วยคำสั่งจากแพ็กเกจacl (ซึ่งควรมีอยู่ในการแจกแจงหลักทั้งหมด แต่อาจไม่ได้เป็นส่วนหนึ่งของการติดตั้งพื้นฐาน) พวกเขาสำรองและเรียกคืน ACL เมื่อ ACL มีอยู่ แต่พวกเขายังทำงานสำหรับสิทธิ์พื้นฐานแม้ในระบบที่ไม่สนับสนุน ACL

ในการสำรองสิทธิ์ในไดเรกทอรีปัจจุบันและไดเรกทอรีย่อยซ้ำ:

getfacl -R . >permissions.facl

วิธีคืนค่าสิทธิ์:

setfacl --restore=permissions.facl

อืมมม ฉันจริงๆต้องอ่านข้อมูลเกี่ยวกับ ACL ของ
roaima

1
ในไฟล์ที่สร้างพวกเขาจะสัมพันธ์กับไดเรกทอรีด้วยหรือไม่
leeand00

2
@ leeand00 ใช่ไฟล์ที่สร้างขึ้นจะใช้ชื่อไฟล์ที่เกี่ยวข้องเสมอ
Gilles 'หยุดความชั่วร้าย'

@ Gilles จากไฟล์unix.stackexchange.com/questions/364517/… setfaclอาจไม่สามารถ chmodเกิดความขัดแย้งได้อีก
kittygirl

1
@kittygirl ฉันไม่รู้ว่าคุณกำลังถามอะไรอยู่ “ ไฟล์ setfacl นั้นไม่สามารถ chmod อีกครั้ง” หมายความว่าอะไร? สิ่งนี้เกี่ยวข้องกับunix.stackexchange.com/questions/364517/หรือไม่? ความขัดแย้งอะไร
Gilles 'ดังนั้นหยุดความชั่วร้าย'

2

ฉันไม่ทราบว่ามีอะไร "ปิดชั้น" ที่จะทำเช่นนี้ นี่คือสคริปต์เริ่มต้นสำหรับคุณที่จะจัดการสิทธิ์พื้นฐาน มันไม่ได้จัดการ ACL ของคำอธิบายใด ๆ - แต่คำถามของคุณไม่รวมคำเหล่านั้น (นอกจากนี้ยังจะล้มเหลวในชื่อไฟล์ทางพยาธิวิทยา - ผู้ที่เริ่มต้นด้วยช่องว่างหรือมีอักขระที่พิมพ์ไม่ได้)

บันทึกการอนุญาต

find * -depth -exec stat --format '%a %u %g %n' {} + >/tmp/save-the-list

คืนค่าการอนุญาต

while read PERMS OWNER GROUP FILE
do
    chmod "$PERMS" "$FILE"
    chown "${OWNER}:${GROUP}" "$FILE"
done </tmp/save-the-list

คุณหมายถึง ACL จะล้มเหลวในชื่อไฟล์ทางพยาธิวิทยาหรือไม่
kittygirl

@kittygirl ฉันไม่ได้รวมการประมวลผลของ ACL ใน scriptlet เพราะ OP ได้แยกพวกเขาออกจากข้อกำหนดอย่างชัดเจน คุณสามารถเพิ่มสิ่งที่คุณต้องการได้โปรดจำไว้ว่ารหัสนั้นไม่ได้มีประสิทธิภาพมากนัก (ดูความคิดเห็นที่อธิบายชื่อไฟล์ทางพยาธิวิทยา)
roaima

ผมพบว่าปัญหา: ไม่สามารถหา.htaccess, gitignore...
kittygirl

0
#!/bin/bash
# prepare files
home="/home/exchange"
cd $home
>acl
echo "#!/bin/bash">recovery_acl.sh
echo "cd $home">>recovery_acl.sh
f='./'
# create acl file sorted by dir_level
for i in `seq 0 15`;do
  find . -mindepth $i -maxdepth $i -type d -exec getfacl {} +|grep -E '*UTS|file:'>>acl
done
sed -i 's/default\:user/\-dm\ u/g' acl
sed -i 's/default\:group/\-dm\ g/g' acl
sed -i 's/user/\-m\ u/g' acl
sed -i 's/group/\-m\ g/g' acl
sed -i 's/\#\ file\:\ /\.\//g' acl
sed -i 's,\\,\\\\,g' acl

while IFS='' read -r line ; do
  # grep dir name
  if echo "$line" | grep -q "$f" ; then
    dir="$line"
    continue
  fi
  echo setfacl $line '"'$dir'"'>>recovery_acl.sh
  # grep non def acl (for files)
  if echo "$line" | grep -q '\-m' ; then
    echo setfacl $line '"'$dir'"'/*>>recovery_acl.sh
  fi
done < "acl"

sed -i "s/\\\134/\\\\\\\134/g" recovery_acl.sh
sed -i "s/\\\040/\\\\ /g" recovery_acl.sh

สคริปต์ทุบตีนี้รับ acl เท่านั้น dirs (ในกรณีของฉันไฟล์ acls = dir (parent) acl) หลังจากดำเนินการสคริปต์จะสร้าง "recovery_acl.sh" อีกอัน

ขณะกู้คืนข้อผิดพลาดเช่น "ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" หมายความว่า dir ว่างเปล่าหรือ dirname มีช่องว่างสองรายการขึ้นไปพร้อมกัน

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