Corrigir permissões quebradas em / var (ou qualquer outro diretório do sistema)

6

Para encurtar a história, eu destruí /var e restaurei o backup - mas o backup não tinha as permissões corretas definidas e agora tudo em /var é de propriedade de root. Isso parece tornar alguns programas infelizes.

Desde então, tenho corrigido o apt failing fopen em /var/cache/man , conforme recomendado aqui assim como o apache2 falha ao iniciar (dando a propriedade de /var/lib/apache2 to www-data ). No entanto, neste momento, a única maneira de consertar tudo parece ser usar as permissões manualmente à medida que surgem problemas - isso parece muito difícil, pois eu teria que esperar um programa começar a dar problemas, estabelecer que o problema está relacionado a permissões de alguns arquivos em /var e depois configurá-los eu mesmo.

Existe uma maneira fácil de corrigir isso? Eu já tentei reinstalar (simples aptitude reinstall x ) todos os pacotes listados em dpkg -S /var , mas isso não funcionou.

    
por jaymmer 20.09.2014 / 16:09

1 resposta

9

Na verdade, apt-get --reinstall install package deve funcionar, com arquivos pelo menos:

➜  ~  ls -l /usr/share/lintian/checks/version-substvars.desc        
-rw-r--r-- 1 root root 2441 Jun 22 14:19 /usr/share/lintian/checks/version-substvars.desc
➜  ~  sudo chmod +x /usr/share/lintian/checks/version-substvars.desc
➜  ~  ls -l /usr/share/lintian/checks/version-substvars.desc        
-rwxr-xr-x 1 root root 2441 Jun 22 14:19 /usr/share/lintian/checks/version-substvars.desc
➜  ~  sudo apt-get --reinstall install lintian  
(Reading database ... 291736 files and directories currently installed.)
Preparing to unpack .../lintian_2.5.27_all.deb ...
Unpacking lintian (2.5.27) over (2.5.27) ...
Processing triggers for man-db (2.6.7.1-1) ...
Setting up lintian (2.5.27) ...
➜  ~  ls -l /usr/share/lintian/checks/version-substvars.desc
-rw-r--r-- 1 root root 2441 Jun 22 14:19 /usr/share/lintian/checks/version-substvars.desc

Agora, você provavelmente não obteve todos os pacotes que possuem arquivos no diretório /var , então é melhor encontrar todos eles :

➜  ~ find /var -exec dpkg -S {} + 2> /dev/null | grep -v "no path found" | wc -l 
460

No meu caso, ele é responsável por 460 caminhos que possuem um pacote, isso é realmente menor se você considerar que o mesmo pacote pode ter vários caminhos, que com alguns pós-processamento podemos descobrir que são ~ 122:

➜  ~  find /var -exec dpkg -S {} + 2> /dev/null | grep -v "no path found" | cut -d : -f 1 | sort | uniq | wc -l
122

Isso, claro, conta vários pacotes que têm o mesmo caminho, como wamerican, aspell-en, ispanish, wspanish, aspell-es, myspell-es . Isso é facilmente corrigível:

➜  ~  find /var -exec dpkg -S {} + 2> /dev/null | grep -v "no path found" | cut -d : -f 1 | sed 's/, /\n/g' | sort | uniq | wc -l
107

Portanto, tenho 107 pacotes que possuem qualquer tipo de arquivo em /var ou subdiretórios. Você pode reinstalá-los usando:

sudo apt-get --reinstall install $(find /var -exec dpkg -S {} + 2> /dev/null | grep -v "no path found" | cut -d : -f 1 | sed 's/, /\n/g')

Isso deve corrigir as permissões.

Agora, há outra opção, encontrar uma boa instalação e copiar as permissões do arquivo na sua instalação:

chmod --recursive --reference good/var bad/var
    
por 20.09.2014 / 16:56