Como posso restaurar arquivos de configuração?

83

Eu gostaria de restaurar o LightDM ao seu estado padrão, porque, por algum motivo, /etc/lightdm/unity-greeter.conf agora é um arquivo vazio.

A exclusão de /etc/lightdm/unity-greeter.conf e a execução de sudo apt-get install --reinstall unity-greeter não cria um novo arquivo de configuração como você poderia esperar.

Como posso restaurar um arquivo de configuração ausente?

    
por Isaiah 15.10.2011 / 01:42

7 respostas

122
  1. Descubra qual pacote instalou o arquivo de configuração :

    $ dpkg -S unity-greeter.conf
    unity-greeter: /etc/lightdm/unity-greeter.conf
    

    Como você pode ver, o nome do pacote é unity-greeter .

    Se você excluiu um diretório, como /etc/pam.d , pode listar todos os pacotes adicionados a ele usando o caminho do diretório:

    $ dpkg -S /etc/pam.d
     login, sudo, libpam-runtime, cups-daemon, openssh-server, cron, policykit-1, at, samba-common, ppp, accountsservice, dovecot-core, passwd: /etc/pam.d
    
  2. Renomeie (ou exclua) o arquivo de configuração que você deseja restaurar:

    sudo mv -i /etc/lightdm/unity-greeter.conf /etc/lightdm/unity-greeter.conf.bak 
    
  3. Execute o seguinte comando, substituindo <package-name> pelo nome do pacote:

    sudo apt-get -o Dpkg::Options::="--force-confmiss" install --reinstall <package-name>
    

    E para restaurar o diretório:

    sudo apt-get -o Dpkg::Options::="--force-confmiss" install --reinstall $(dpkg -S /etc/some/directory | sed 's/,//g; s/:.*//')
    
  4. Se tudo funcionou como esperado, você deve receber esta mensagem:

    Configuration file '/etc/lightdm/unity-greeter.conf', does not exist on system. 
    Installing new config file as you requested.
    
  5. Um exemplo prático ao precisar reinstalar todos os arquivos de configuração do PulseAudio:

    apt-cache pkgnames pulse |xargs -n 1 apt-get -o Dpkg::Options::="--force-confmiss" install --reinstall 
    
por Isaiah 15.10.2011 / 20:43
20

Em muitos casos, o arquivo de configuração padrão é fornecido diretamente por um pacote. Nesses casos, você pode extrair o arquivo específico do pacote, recuperando facilmente o arquivo.

Para verificar se um pacote fornece o arquivo, execute dpkg -S no caminho completo do arquivo. Por exemplo:

$ dpkg -S /etc/ssh/sshd_config /etc/ssh/ssh_config /etc/sudoers
dpkg-query: no path found matching pattern /etc/ssh/sshd_config
openssh-client: /etc/ssh/ssh_config
sudo: /etc/sudoers

Fornecido por um pacote

Como podemos ver, /etc/ssh/sshd_config não é fornecido diretamente por nenhum pacote, mas os outros dois são fornecidos por openssh-client e sudo , respectivamente. Então, se você deseja recuperar /etc/ssh/ssh_config , primeiro obtenha o pacote:

apt-get download openssh-client

Agora, você pode extrair o arquivo diretamente para o local pretendido ou para o local pretendido relativo ao diretório atual, em vez de / , se desejar comparar e contrastar ou manualmente mesclá-los ou algo assim. Para o primeiro:

dpkg-deb --fsys-tarfile openssh-client_*.deb | sudo tar x ./etc/ssh/ssh_config -C /

O -C / informa tar para extrair depois de alterar para / , o que significa que o arquivo de destino será substituído. Se você removê-lo, tar irá extrair para o diretório atual, significando que ./etc/ssh/ssh_config existirá em seu diretório atual.

Se por algum motivo sudo não funcionar, use pkexec . Se pkexec também não funcionar, reinicialize no modo de recuperação, monte / as rw . Se isso não funcionar ...

Criado por um pacote

Que tal /etc/ssh/sshd_config ? Não parece ser fornecido por nenhum pacote, então como surgiu?

Neste caso (e em muitos outros casos, sendo outro exemplo /etc/modules ), o arquivo foi criado usando um script do mantenedor de pacotes durante a instalação. Isso geralmente é feito quando o arquivo de configuração precisa ser alterado devido às respostas dos usuários às consultas. O OpenSSH, por exemplo, pergunta se PermitRootLogin deve ser alterado para no , em versões mais recentes, entre outras coisas.

Para identificar esses casos, tente usar os scripts do mantenedor. Normalmente, você precisaria procurar apenas em postinst , mas se não tiver sorte com postinst , tente também preinst :

grep -l /etc/ssh/sshd_config /var/lib/dpkg/info/*.postinst

Nesse caso, estamos com sorte:

$ grep /etc/ssh/sshd_config /var/lib/dpkg/info/*.postinst -l
/var/lib/dpkg/info/openssh-server.postinst

Apenas um arquivo corresponde e, por sorte, contém código para criar um arquivo de configuração padrão :

    cat <<EOF > /etc/ssh/sshd_config
# Package generated configuration file
# See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes

# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 768

# Logging
SyslogFacility AUTH
LogLevel INFO

# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys

# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes

# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication yes

# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no

#MaxStartups 10:30:60
#Banner /etc/issue.net

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

Subsystem sftp /usr/lib/openssh/sftp-server

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes
EOF

Normalmente, isso é o que você veria (outro exemplo, /etc/modules de kmod ):

cat > /path/to/the/file <<EOF
# default contents
EOF

Assim, você pode procurar esse código e obter o conteúdo diretamente do script.

Nenhum roteiro desse tipo? Você ainda pode tentar vasculhar as listas de arquivos de pacotes relacionados para ver se algo está ocorrendo, mas, neste ponto, não vejo nenhum método facilmente generalizável (falta de reinstalação em ambientes transitórios, como um chroot ou uma VM ou um USB ativo). p>

No longo prazo, mantenha sua configuração sob controle de versão. Qualquer VCS vale o seu sal pode salvar o dia aqui, e o utilitário etckeeper simplifica consideravelmente a tarefa de mantendo /etc em um VCS.

    
por muru 22.05.2015 / 16:31
3

De acordo com o este tópico nos Fóruns do Ubuntu, é tão simples quanto rodar o seguinte em um terminal:

sudo dpkg-reconfigure lightdm
    
por Nathan Osman 15.10.2011 / 01:45
2

Encontre o pacote que possui o arquivo de configuração:

dpkg --search /etc/path/to/config

produzirá algo semelhante a:

unity-greeter: /etc/lightdm/unity-greeter.conf

para que o nome do pacote seja "unity-greeter", faça o download do pacote:

apt-get download unity-greeter

extraia os dados da árvore do sistema de arquivos para um arquivo tar:

dpkg-deb --fsys-tarfile unity-greeter_version-0ubuntu1_amd64.deb > pkg.tar

finalmente, extraia apenas a configuração exata em qualquer lugar que você queira:

tar -Oxf pkg.tar ./etc/lightdm/unity-greeter.conf |
sudo tee /etc/lightdm/unity-greeter.conf 
  • ./etc/lightdm/unity-greeter.conf é o nome do arquivo em nosso arquivo.
  • /etc/lightdm/unity-greeter.conf é onde eu estou enviando para ser armazenado.

Ou como sugerido pelo @Muru, podemos fazer isso em um liner:

dpkg-deb --fsys-tarfile unity-greeter_version-0ubuntu1_amd64.deb |
sudo tar -x -C / ./etc/lightdm/unity-greeter.conf
    
por Ravexina 06.08.2017 / 22:56
1

Eu tive o mesmo problema no Ubuntu 17.04. O postinstall usa um modelo de /usr/share/openssh/ . Ele verifica se rootlogin está habilitado ou não, define essa opção e copia para /etc/ssh . Depois disso, ele faz algumas chamadas do ucf e ucfr (não sei para que serve isso).

Basta copiar /usr/share/openssh/sshd_config para /etc/ssh/sshd_config :

sudo cp /usr/share/openssh/sshd_config /etc/ssh/sshd_config

Agora ajuste seu sshd_config como quiser.

    
por user2162968 27.07.2017 / 14:49
0

Isso não funciona em todos os arquivos de configuração. Para /etc/nsswitch.conf , veja Como restaurar / recriar etc / nsswitch.conf arquivos . Não parece ser possível reconstruir esse arquivo com dpkg-reconfigure .

    
por bgeron 01.11.2017 / 17:35
-1

Exclua (volte) o arquivo e reinstale o unity-greeter com apt-get install --reinstall unity-greeter .

    
por RolandiXor 15.10.2011 / 05:54