Faça backup e restaure as permissões de arquivo

11

Existe uma maneira de fazer backup e restaurar a propriedade e as permissões de arquivos (as coisas que podem ser alteradas com chown e chmod )?

Você pode fazer isso no Windows usando icacls .

E as listas de controle de acesso?

    
por leeand00 09.03.2015 / 20:55

3 respostas

18

Você pode fazer isso com os comandos do pacote acl (que deve estar disponível em todas as distribuições principais, mas pode não fazer parte da instalação base). Eles fazem backup e restauram o ACL quando o ACL está presente, mas também funcionam para permissões básicas mesmo em sistemas que não suportam ACL.

Para fazer backup de permissões no diretório atual e em seus subdiretórios recursivamente:

getfacl -R . >permissions.facl

Para restaurar permissões:

setfacl --restore=permissions.facl
    
por 10.03.2015 / 01:17
2

Não estou ciente de nada "pronto" que possa fazer isso. Aqui está um script inicial para você, que lidará com permissões básicas. Ele não manipula ACLs de nenhuma descrição, mas sua pergunta exclui explicitamente essas. (Ele também falhará em nomes de arquivos patológicos - aqueles que começam com espaço em branco ou contêm caracteres não imprimíveis.)

Salve as permissões

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

Restaurar as permissões

while read PERMS OWNER GROUP FILE
do
    chmod "$PERMS" "$FILE"
    chown "${OWNER}:${GROUP}" "$FILE"
done </tmp/save-the-list
    
por 09.03.2015 / 22:41
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/\4/\\\4/g" recovery_acl.sh
sed -i "s/\0/\\ /g" recovery_acl.sh

Este script bash recebe apenas dirs acl (no meu caso, acls = dir (pai) acl) Após a execução do script, criará outro "recovery_acl.sh".

Ao recuperar Erros como "Nenhum arquivo ou diretório" significa que o diretório está vazio ou o nome do diretório tem dois / mais espaços juntos.

    
por 03.08.2017 / 12:00