มีวิธีการสำรองและกู้คืนความเป็นเจ้าของไฟล์และการอนุญาต (สิ่งที่สามารถเปลี่ยนแปลงได้ด้วยchown
และchmod
)?
คุณสามารถทำเช่นนี้ใน Windows ใช้ icacls
สิ่งที่เกี่ยวกับรายการควบคุมการเข้าถึง?
มีวิธีการสำรองและกู้คืนความเป็นเจ้าของไฟล์และการอนุญาต (สิ่งที่สามารถเปลี่ยนแปลงได้ด้วยchown
และchmod
)?
คุณสามารถทำเช่นนี้ใน Windows ใช้ icacls
สิ่งที่เกี่ยวกับรายการควบคุมการเข้าถึง?
คำตอบ:
คุณสามารถทำสิ่งนี้ได้ด้วยคำสั่งจากแพ็กเกจacl (ซึ่งควรมีอยู่ในการแจกแจงหลักทั้งหมด แต่อาจไม่ได้เป็นส่วนหนึ่งของการติดตั้งพื้นฐาน) พวกเขาสำรองและเรียกคืน ACL เมื่อ ACL มีอยู่ แต่พวกเขายังทำงานสำหรับสิทธิ์พื้นฐานแม้ในระบบที่ไม่สนับสนุน ACL
ในการสำรองสิทธิ์ในไดเรกทอรีปัจจุบันและไดเรกทอรีย่อยซ้ำ:
getfacl -R . >permissions.facl
วิธีคืนค่าสิทธิ์:
setfacl --restore=permissions.facl
setfacl
อาจไม่สามารถ chmod
เกิดความขัดแย้งได้อีก
ฉันไม่ทราบว่ามีอะไร "ปิดชั้น" ที่จะทำเช่นนี้ นี่คือสคริปต์เริ่มต้นสำหรับคุณที่จะจัดการสิทธิ์พื้นฐาน มันไม่ได้จัดการ 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
.htaccess
, gitignore
...
#!/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 มีช่องว่างสองรายการขึ้นไปพร้อมกัน