Defina-me como proprietário de / etc com o comando chown agora recebendo todos os tipos de erros [duplicados]

7

Eu precisava editar um arquivo .config (que eu sei de fato não está criando esses problemas, apenas para esclarecer isso) e ele não me deixou salvá-lo, então assumi a propriedade de /etc e todo o conteúdo com o comando chown -hR username /etc e que me permite editar o arquivo .config , mas agora, sempre que tento instalar algum pacote ou usar comandos sudo, ele não funciona (verifiquei erros no arquivo sudo em sudoers.d e não havia nada de errado com isso).

Então, como posso devolvê-lo ao proprietário anterior?

    
por Raf 27.05.2013 / 14:59

2 respostas

10

Como alguns dos arquivos em /etc podem não pertencer a root , se você quiser evitar a reinstalação, poderá fazer o seguinte:

  1. Inicialize em um sistema ativo e monte a partição que contém o diretório /etc . Por exemplo, se sua partição / for /dev/sda1 , você faria isso a partir do sistema ativo:

    sudo mount /dev/sda1 /mnt
    
  2. Defina a propriedade de todos os arquivos para root :

    sudo chown -R root /mnt/etc
    
  3. Neste ponto, todos os arquivos pertencem ao root. Provavelmente, isso é o que você precisa, mas alguns arquivos em /etc/ podem ter uma propriedade diferente. Se esses arquivos também não forem de propriedade do root no sistema ativo, você poderá usá-los como referência para alterar as permissões no sistema instalado:

    shopt -s globstar
    liveSystem="/etc"
    cd /mnt/etc
    for file in **/*; do 
        [ -e "$liveSystem/$file" ] &&
            echo sudo chown --reference "$liveSystem/$file" "$file"
    done
    

    Se você também alterou as permissões, faça isso:

    shopt -s globstar
    liveSystem="/etc"
    cd /mnt/etc
    for file in **/*; do 
        [ -e "$liveSystem/$file" ] &&
            echo sudo chown --reference "$liveSystem/$file" "$file" &&
            echo sudo chmod --reference "$liveSystem/$file" "$file"
    done
    

    Isso apenas imprimirá qual comando seria executado. Uma vez que você tenha visto o que isso faz e esteja certo de que está correto, remova o echo para realmente executar os comandos.

    Agora, isso itera todos os arquivos, incluindo aqueles cuja propriedade é root nos dois diretórios, mas isso não importa. Você poderia escrever uma abordagem mais sofisticada, mas não vale a pena, pois isso levará alguns segundos.

  4. Reinicialize sua máquina: tudo deve voltar ao normal.

IMPORTANTE : isso não ajudará se você instalou algo que não está no sistema ativo e cujos arquivos em /etc não pertencem a root . Se este for o caso, você precisará localizar o que instalou e reinstalá-lo ou talvez seja necessário reinstalar o sistema.

    
por terdon 18.02.2017 / 12:36
3

Inicialize na recuperação e emita os seguintes comandos:

mount -o remount,rw -n /
chown -R root: /etc
    
por Frantique 27.05.2013 / 15:33