Создайте резервную копию и восстановите полномочия файла

Можно понравиться этот ресурс: http://www.catonmat.net/books/, который Это дает очень хорошему обзору того, что может быть сделано, и с примерами.

17
10.03.2015, 02:14
3 ответа

Вы можете сделать это с командами из пакета ACL (который должен быть доступен во всех основных распределениях, но не может быть частью базовой установки). Они создают резервную копию и восстановить ACL, когда присутствуют ACL, но они также работают для базовых разрешений даже на системах, которые не поддерживают ACL.

Для резервного копирования разрешений в текущем каталоге и его подкаталах рекурсивно:

getfacl -R . >permissions.facl

для восстановления разрешений:

setfacl --restore=permissions.facl
24
27.01.2020, 19:47

Я не знаю что-нибудь «с полки», что бы сделать это. Тем не менее, вот сценарий стартера для вас, который будет обрабатывать основные разрешения. Он не обрабатывает 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
2
27.01.2020, 19:47
#!/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

Этот скрипт bash получает только каталоги acl (в моем случае files acls = dir (parent )acl )После выполнения скрипта будет создан еще один "recovery _acl.sh".

При восстановлении ошибки типа «Нет такого файла или каталога» означают, что каталог пуст или имя каталога содержит два или более пробелов вместе.

0
20.08.2021, 12:37

Теги

Похожие вопросы