Você pode usar getfacl
para recuperar a lista completa de permissões de arquivos, proprietário, grupo e ACLs adicionais (listas de controle de acesso).
$ getfacl filename.txt
# file: filename.txt
# owner: score
# group: score
user::rw-
group::---
other::---
Se você salvar essa saída em um arquivo (por exemplo, acl.txt
), poderá restaurar a partir desse formato com setfacl --restore acl.txt
. Se você quiser restaurar apenas um único arquivo, e esse arquivo tiver um nome de arquivo diferente do original, você deverá usar setfacl --set-file acl.txt filename.txt
(onde filename.txt
é o novo nome do arquivo).
Etapas
-
Salvar as permissões originais em acl.txt
:
$ getfacl filename.txt > acl.txt
-
Substituir permissões (para demonstração; isso é apenas para você ver que a restauração na próxima etapa funciona)
$ chmod 777 filename.txt
$ sudo chown nobody:root filename.txt
$ ls -l filename.txt
-rwxrwxrwx 1 nobody root 0 Jan 8 14:24 filename.txt
-
Use setfacl
para restaurar as permissões corretas de acl.txt
:
$ sudo setfacl --restore acl.txt
$ ls -l filename.txt
-rw------- 1 score score 0 Jan 8 14:24 filename.txt
O nome do arquivo é retirado do comentário # file:
gerado por getfacl
, portanto, não há necessidade de especificá-lo na linha de comando.
Se você quiser restaurar essas permissões para um arquivo diferente, use --set-file
em vez de --restore
da seguinte forma:
$ setfacl --set-file acl.txt second_filename.txt
Exemplo
Se você acabar substituindo as permissões em alguns arquivos em /usr
, mas não souber quais arquivos foram sobrescritos, normalmente poderá corrigi-los restaurando de outro sistema configurado de forma semelhante.
-
Permissões de backup do sistema em funcionamento (nota: getfacl
gera caminhos relativos, portanto, assegure-se de que cd
seja um local consistente em ambas as máquinas)
# cd /
# getfacl -R usr > /root/acls.txt
-
Copie o dump da ACL para o sistema com permissões quebradas
$ scp root@working-system:/root/acls.txt .
$ scp acls.txt root@broken-system:/root/
-
Restaure o dump da ACL para sobrescrever as permissões quebradas com aquelas da máquina boa conhecida
# cd /
# setfacl --restore /root/acls.txt