Come posso ripristinare i file di configurazione?

84

Vorrei ripristinare LightDM allo stato predefinito, perché per qualche motivo
/etc/lightdm/unity-greeter.conf è ora un file vuoto.

Cancellare /etc/lightdm/unity-greeter.conf e poi eseguire sudo apt-get install --reinstall unity-greeter non crea un nuovo file di configurazione come ci si potrebbe aspettare.

Come posso ripristinare un file di configurazione mancante?

    
posta Isaiah 15.10.2011 - 01:42

7 risposte

122
  1. Scopri quale pacchetto ha installato il file di configurazione :

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

    Come puoi vedere, il nome del pacchetto è unity-greeter .

    Se hai cancellato una directory, come /etc/pam.d , puoi elencare tutti i pacchetti che sono stati aggiunti usando il percorso della directory:

    $ 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. Rinomina (o cancella) il file di configurazione che desideri ripristinare:

    sudo mv -i /etc/lightdm/unity-greeter.conf /etc/lightdm/unity-greeter.conf.bak 
    
  3. Esegui il seguente comando, sostituendo <package-name> con il nome del pacchetto:

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

    E per il ripristino della directory:

    sudo apt-get -o Dpkg::Options::="--force-confmiss" install --reinstall $(dpkg -S /etc/some/directory | sed 's/,//g; s/:.*//')
    
  4. Se tutto funziona come previsto, dovresti ottenere questo messaggio:

    Configuration file '/etc/lightdm/unity-greeter.conf', does not exist on system. 
    Installing new config file as you requested.
    
  5. Un esempio pratico in cui è necessario reinstallare tutti i file di configurazione PulseAudio:

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

In molti casi, il file di configurazione predefinito viene fornito direttamente da un pacchetto. In questi casi, puoi estrarre il file specifico dal pacchetto, recuperando così facilmente il file.

Per verificare se un pacchetto fornisce il file, eseguire dpkg -S sul percorso completo del file. Ad esempio:

$ 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

Fornito da un pacchetto

Come possiamo vedere, /etc/ssh/sshd_config non è direttamente fornito da alcun pacchetto, ma gli altri due sono forniti rispettivamente da openssh-client e sudo . Quindi, se desideri recuperare /etc/ssh/ssh_config , prima prendi il pacchetto:

apt-get download openssh-client

Ora puoi estrarre il file direttamente nella posizione desiderata oppure nella posizione desiderata relativa nella directory corrente anziché in / , se desideri confrontare e confrontare o manualmente unirli o qualcosa Per il primo:

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

Il -C / indica tar da estrarre dopo aver cambiato in / , il che significa che il file di destinazione verrà sostituito. Se lo rimuovi, tar verrà estratto nella directory corrente, ovvero ./etc/ssh/ssh_config sarà presente nella directory corrente.

Se per qualche ragione sudo non funziona, utilizza pkexec . Se pkexec non funziona, riavvia in modalità di ripristino, montare / come rw . Se che non funziona ...

Creato da un pacchetto

Che dire di /etc/ssh/sshd_config ? Non sembra essere fornito da nessun pacchetto, quindi come è apparso?

In questo caso (e in molti altri casi simili, un altro esempio è /etc/modules ), il file è stato creato utilizzando uno script manutentore del pacchetto durante l'installazione. Questo è spesso fatto quando il file di configurazione deve essere cambiato a causa delle risposte dell'utente alle query. OpenSSH, ad esempio, chiede se PermitRootLogin debba essere modificato in no , nelle versioni più recenti, tra le altre cose.

Per identificare questi casi, prova a usare grep attraverso gli script del manutentore. Normalmente dovresti solo guardare postinst , ma se non hai fortuna con postinst , prova anche preinst :

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

In questo caso, siamo fortunati:

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

Solo un file corrisponde e, per fortuna, contiene codice per creare un file di configurazione predefinito :

    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

Tipicamente, questo è quello che vedresti (un altro esempio /etc/modules da kmod ):

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

Quindi, puoi cercare questo codice e ottenere direttamente il contenuto dallo script.

Nessun copione simile? Puoi ancora provare a sfogliare le filelist dei pacchetti correlati per vedere se qualcosa colpisce, ma a questo punto, non vedo alcun metodo facilmente generalizzabile (a meno di reinstallazione su ambienti transienti, come un chroot o una VM o un USB live).

A lungo termine, mantieni la configurazione sotto controllo di versione. Qualsiasi VCS degno di questo nome può salvare il giorno qui e l'utilità etckeeper semplifica considerevolmente il compito di mantenendo /etc in un VCS.

    
risposta data muru 22.05.2015 - 16:31
3

Secondo questo thread sui forum di Ubuntu, è semplice come eseguire quanto segue in un terminale:

sudo dpkg-reconfigure lightdm
    
risposta data Nathan Osman 15.10.2011 - 01:45
2

Trova il pacchetto proprietario del file di configurazione:

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

produrrà qualcosa di simile a:

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

quindi il nome del pacchetto è "unity-greeter", scarica il pacchetto:

apt-get download unity-greeter

quindi estrai i dati dell'albero del file system in un file tar:

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

finalmente estrai solo quella configurazione esatta ovunque tu voglia che sia:

tar -Oxf pkg.tar ./etc/lightdm/unity-greeter.conf |
sudo tee /etc/lightdm/unity-greeter.conf 
  • ./etc/lightdm/unity-greeter.conf è il nome del file nel nostro archivio.
  • /etc/lightdm/unity-greeter.conf è dove lo sto inviando per essere memorizzato.

O come suggerito da @Muru, possiamo farlo in una sola riga:

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

Ho avuto lo stesso problema su Ubuntu 17.04. Il postinstall utilizza un modello da /usr/share/openssh/ . Controlla se rootlogin è abilitato o meno, imposta questa opzione e la copia su /etc/ssh . Dopodiché esegue alcune chiamate ucf e ucfr (non so a cosa serva).

Copia semplicemente /usr/share/openssh/sshd_config in /etc/ssh/sshd_config :

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

Ora modifica il sshd_config come desideri.

    
risposta data user2162968 27.07.2017 - 14:49
0

Questo non funziona tutti i file di configurazione. Per /etc/nsswitch.conf , vedi Come ripristinare / ricreare etc / nsswitch.conf file . Non sembra possibile ricostruire quel file con dpkg-reconfigure .

    
risposta data Bram Geron 01.11.2017 - 17:35
-1

Elimina (indietro) il file e reinstalla unity-greeter con apt-get install --reinstall unity-greeter .

    
risposta data RolandiXor 15.10.2011 - 05:54

Leggi altre domande sui tag