Sao lưu và khôi phục quyền truy cập tệp


17

Có cách nào để sao lưu và khôi phục quyền sở hữu và quyền của tệp (những thứ có thể thay đổi bằng chownchmod) không?

Bạn có thể làm điều này trong Windows bằng icacls .

Điều gì về danh sách kiểm soát truy cập?


Nó sẽ giúp ích nếu bạn nói rằng bạn đang sử dụng bản phân phối nào, vì các bản phân phối khác nhau sử dụng các trình quản lý gói khác nhau.
garethTheRed 9/03/2015

@garethTheRed, nó cũng phụ thuộc vào fs đang được sử dụng, hay chỉ là bản phân phối?
leeand00

1
Tôi nghi ngờ nó sẽ phụ thuộc vào hệ thống tập tin.
garethTheRed 9/03/2015

Cho đến bây giờ, không có câu trả lời hoàn hảo.
kittygirl

Câu trả lời:


24

Bạn có thể làm điều này với các lệnh từ gói acl (sẽ có sẵn trên tất cả các bản phân phối chính, nhưng có thể không phải là một phần của cài đặt cơ sở). Họ sao lưu và khôi phục ACL khi có ACL, nhưng chúng cũng hoạt động cho các quyền cơ bản ngay cả trên các hệ thống không hỗ trợ ACL.

Để sao lưu quyền trong thư mục hiện tại và các thư mục con của nó theo cách đệ quy:

getfacl -R . >permissions.facl

Để khôi phục quyền:

setfacl --restore=permissions.facl

Hừm. Tôi thực sự cần phải đọc lên trên ACL.
roaima

1
Trong tệp được tạo, chúng có liên quan đến một thư mục không?
leeand00

2
@ leeand00 Có, tệp được tạo luôn sử dụng tên tệp tương đối.
Gilles 'SO- đừng trở nên xấu xa'

@ Gilles, dựa trên unix.stackexchange.com/questions/364517/ setfacl Tập tin sau đó không thể chmodmột lần nữa, có thể sẽ gây ra xung đột?
kittygirl

1
@kittygirl Tôi không biết bạn đang hỏi gì. Các tập tin setfacl sau đó không thể chmod lại có nghĩa là gì? Điều này có liên quan gì với unix.stackexchange.com/questions/364517/iêu ? Xung đột gì?
Gilles 'SO- ngừng trở nên xấu xa'

2

Tôi không biết bất cứ điều gì "ngoài giá" sẽ làm điều này. Tuy nhiên, đây là một kịch bản khởi động cho bạn, sẽ xử lý các quyền cơ bản. Nó không xử lý ACL của bất kỳ mô tả nào - nhưng Câu hỏi của bạn loại trừ rõ ràng những câu hỏi đó. (Nó cũng sẽ thất bại với tên tệp bệnh lý - những tên bắt đầu bằng khoảng trắng hoặc chứa các ký tự không in được.)

Lưu quyền

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

Khôi phục quyền

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

bạn có nghĩa là ACL cũng sẽ thất bại trên tên tập tin bệnh lý?
kittygirl

@kittygirl Tôi không bao gồm bất kỳ xử lý ACL nào trong scriptlet vì OP đã loại trừ chúng ra khỏi yêu cầu một cách rõ ràng. Bạn có thể thêm những gì bạn thích, lưu ý rằng mã không đặc biệt mạnh mẽ (xem bình luận mô tả tên tệp bệnh lý).
roaima

Tôi đã tìm thấy một vấn đề: không thể tìm thấy .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

Tập lệnh bash này chỉ nhận các thư mục acl (trong trường hợp của tôi là tập tin acls = dir (cha mẹ) acl) Sau khi thực thi tập lệnh, sẽ tạo một "recovery_acl.sh" khác.

Trong khi khôi phục các lỗi như "Không có tệp hoặc thư mục như vậy" có nghĩa là dir trống hoặc dirname có hai / nhiều khoảng trắng cùng nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.