É possível voltar dessa situação confusa.
Corri novamente o mesmo tipo de problema (algum bug em um script que estava escrevendo) e o resolvi, mas você precisa pedir a ajuda de algum especialista. Seja muito cauteloso!
Primeiro, minha situação foi mais fácil de resolver porque eu tinha um sistema de inicialização dupla (Ubuntu e minha antiga instalação do Fedora), mas executar o sistema operacional a partir de um CD / DVD ou uma chave USB deve fazer a mesma coisa.
MPOINT=/mount/ubuntu
Primeiro montei meus sistemas de arquivos assim (não esqueça de criar os pontos de montagem):
mount /dev/ubuntu/root $MPOINT
mount /dev/ubuntu/home $MPOINT/home
Em seguida, executei o seguinte comando (meu problema era apenas em alguns diretórios - críticos) para copiar as permissões do sistema em execução para o mais complicado (de fato, no meu caso, instalei um sistema Ubuntu no Virtual Box no fedora e obteve as permissões lá):
find /etc /usr /bin /sbin -exec stat --format "chmod %a \"${MPOINT}%n\"" {} \; > /tmp/restoreperms.sh
E então eu executei o script restoreperms.sh.
Consegui novamente iniciar no Ubuntu.
O conteúdo do restoreperms.sh será algo como:
(...)
chmod 755 /mount/ubuntu//etc/ppp
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up
chmod 2750 /mount/ubuntu//etc/ppp/peers
chmod 640 /mount/ubuntu//etc/ppp/peers/provider
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up.d
chmod 777 /mount/ubuntu//etc/ppp/resolv.conf
(...)
Não testei, mas deve funcionar também para proprietários e grupos de proprietários. Algo como:
find /etc /usr /bin -exec stat --format 'chown %U:%G ${MPOINT}%n' {} \; > /tmp/restoreperms.sh^
(...)
chown root:root /mount/ubuntu//etc/obex-data-server/imaging_capabilities.xml
chown root:root /mount/ubuntu//etc/obex-data-server/capability.xml
chown root:dip /mount/ubuntu//etc/ppp
chown root:root /mount/ubuntu//etc/ppp/ipv6-up
chown root:dip /mount/ubuntu//etc/ppp/peers
chown root:dip /mount/ubuntu//etc/ppp/peers/provider
chown root:root /mount/ubuntu//etc/ppp/ipv6-up.d
chown root:root /mount/ubuntu//etc/ppp/resolv.conf
(...)
Obviamente, você deve tomar cuidado aqui, que o UID e o GID são iguais nos dois sistemas, mas para os usuários e grupos relacionados ao sistema, isso não deve ser um problema.
Editar:
Além disso, o proprietário da configuração anulará os sinalizadores SGID e SUID , o que causa problemas estranhos (por exemplo, você não poderá executar o sudo a menos que a permissão seja 4755). Você deve e somente deve definir permissões DEPOIS proprietários da configuração. SALVAR informações completas de permissão de arquivo junto com informações do proprietário.
Rk:
- Uma coisa importante para isso é manter um disco de instalação sincronizado com a versão que você está usando, ou pelo menos trabalhar com a versão atual do ubuntu.
Agora, eu tenho esses comandos em um cronjob, executando todos os dias (pode demorar semanas) para manter essas informações. Facilitará a solução da próxima vez, mas, é claro, como eu tenho isso agora, isso nunca mais acontecerá. ;-) Algo assim:
0 12 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chmod %a %n" {} \; |/bin/bzip2 -c > /tmp/restore_chmod.$(/bin/date +%w).sh.bz2
0 13 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chown %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_chown.$(/bin/date +%w).sh.bz2
O comando certo (combinado) é mais parecido com:
`/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {} \; -exec /usr/bin/stat --format="/bin/chown -h %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_fileperms.$(/bin/date +%w).sh.bz2`
Observe que cuidados adicionais podem ser necessários para contabilizar parênteses nos nomes de arquivos (em locais, por exemplo) e que o chown pode silenciosamente desabilitar os bits setuid e setgid definidos pelo chmod. No último caso, que quebraria, por exemplo, / bin / su e / usr / bin / sudo, talvez você precise trocar a ordem das cláusulas exec acima.