it-swarm.com.de

Wie kann ich Konfigurationsdateien wiederherstellen?

Ich möchte LightDM aus irgendeinem Grund auf den Standardzustand zurücksetzen
/etc/lightdm/unity-greeter.conf ist jetzt eine leere Datei.

Wenn Sie /etc/lightdm/unity-greeter.conf löschen und dann Sudo apt-get install --reinstall unity-greeter ausführen, wird nicht wie erwartet eine neue Konfigurationsdatei erstellt.

Wie kann ich eine fehlende Konfigurationsdatei wiederherstellen?

97
Isaiah
  1. Finde heraus welches Paket hat die Konfigurationsdatei installiert :

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

    Wie Sie sehen können, lautet der Name des Pakets unity-greeter.

    Wenn Sie ein Verzeichnis wie /etc/pam.d gelöscht haben, können Sie jedes hinzugefügte Paket unter Verwendung des Verzeichnispfads auflisten:

    $ 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. Führen Sie den folgenden Befehl aus und ersetzen Sie <package-name> durch den Namen des Pakets:

    Sudo apt install --reinstall -o Dpkg::Options::="--force-confask,confnew,confmiss" <package-name>
    

    Und zum Wiederherstellen des Verzeichnisses:

    Sudo apt install --reinstall -o Dpkg::Options::="--force-confask,confnew,confmiss" $(dpkg -S /etc/some/directory | sed 's/,//g; s/:.*//')
    
  3. Wenn alles wie erwartet funktioniert hat, sollten Sie eine Nachricht erhalten:

    Configuration file `/etc/lightdm/unity-greeter.conf', does not exist on system. 
    Installing new config file as you requested.
    
  4. Ein praktisches Beispiel für die Neuinstallation aller PulseAudio-Konfigurationsdateien:

    apt-cache pkgnames Pulse |xargs -n 1 apt-get -o Dpkg::Options::="--force-confmiss" install --reinstall 
    
142
Isaiah

In vielen Fällen wird die Standardkonfigurationsdatei direkt von einem Paket bereitgestellt. In solchen Fällen können Sie die spezifische Datei aus dem Paket extrahieren und so die Datei leicht wiederherstellen.

Um zu überprüfen, ob ein Paket die Datei enthält, führen Sie _dpkg -S_ im vollständigen Pfad der Datei aus. Zum Beispiel:

_$ 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
_

Bereitgestellt von einem Paket

Wie wir sehen können, wird _/etc/ssh/sshd_config_ von keinem Paket direkt bereitgestellt, aber die anderen beiden werden von _openssh-client_ bzw. Sudo bereitgestellt. Wenn Sie also _/etc/ssh/ssh_config_ wiederherstellen möchten, holen Sie sich zuerst das Paket:

_apt-get download openssh-client
_

Jetzt können Sie die Datei entweder direkt an den vorgesehenen Speicherort extrahieren oder an den vorgesehenen Speicherort relativ zum aktuellen Verzeichnis anstelle von _/_. wenn Sie vergleichen und gegenüberstellen oder manuell zusammenführen möchten. Für das ehemalige:

_dpkg-deb --fsys-tarfile openssh-client_*.deb | Sudo tar x ./etc/ssh/ssh_config -C /
_

Der _-C /_ weist tar an, nach dem Ändern zu _/_ zu extrahieren, was bedeutet, dass die Zieldatei ersetzt wird. Wenn Sie es entfernen, wird tar in das aktuelle Verzeichnis extrahiert, was bedeutet, dass _./etc/ssh/ssh_config_ in Ihrem aktuellen Verzeichnis vorhanden ist.

Wenn Sudo aus irgendeinem Grund nicht funktioniert, verwenden Sie stattdessen pkexec. Wenn pkexec ebenfalls nicht funktioniert, starten Sie den Computer im Wiederherstellungsmodus neu und hängen Sie _/_ als rw ein. Wenn das nicht funktioniert ...


Erstellt von einem Paket

Was ist mit _/etc/ssh/sshd_config_? Es scheint von keinem Paket bereitgestellt zu werden. Wie ist es also erschienen?

In diesem Fall (und in vielen anderen Fällen, bei denen es sich um _/etc/modules_ handelt) wurde die Datei während der Installation mit einem Paketverwaltungsskript erstellt. Dies geschieht häufig, wenn die Konfigurationsdatei aufgrund von Benutzerantworten auf Abfragen geändert werden muss. OpenSSH fragt beispielsweise, ob PermitRootLogin unter anderem in neueren Versionen in no geändert werden soll.

Um solche Fälle zu identifizieren, versuchen Sie, die Betreuerskripte zu durchsuchen. Normalerweise müssen Sie nur nach postinst suchen, aber wenn Sie mit postinst kein Glück haben, versuchen Sie es auch mit preinst:

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

In diesem Fall haben wir Glück:

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

Es stimmt nur eine Datei überein, und zum Glück enthält sie Code zum Erstellen einer Standardkonfigurationsdatei :

_    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
_

In der Regel wird Folgendes angezeigt (ein weiteres Beispiel: /etc/modules_ VON kmod ):

_cat > /path/to/the/file <<EOF
# default contents
EOF
_

Sie können also nach diesem Code suchen und den Inhalt direkt aus dem Skript abrufen.


Kein solches Skript? Sie können immer noch versuchen, in den Dateilisten verwandter Pakete zu stöbern, um festzustellen, ob etwas zutrifft. Derzeit sehe ich jedoch keine einfach zu verallgemeinernde Methode (kurz vor der Neuinstallation in vorübergehenden Umgebungen wie einer Chroot oder einerVModer einer Live-USB).


Behalten Sie auf lange Sicht Ihre Konfiguration unter Versionskontrolle. Jedes VCS, das es wert ist, kann hier den Tag retten, und das Dienstprogramm etckeeper vereinfacht die Aufgabe, _/etc_ in einem VCS zu behalten, erheblich.

27
muru

Laut this -Thread in den Ubuntu-Foren ist es so einfach, in einem Terminal Folgendes auszuführen:

Sudo dpkg-reconfigure lightdm
3
Nathan Osman

Suchen Sie das Paket, dem die Konfigurationsdatei gehört:

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

es wird etwas Ähnliches ausgeben wie:

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

damit der Paketname "unity-greeter" lautet, laden Sie das Paket herunter:

apt-get download unity-greeter

dann extrahieren Sie die Daten des Dateisystembaums in eine TAR-Datei:

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

extrahieren Sie schließlich nur die genaue Konfiguration, die Sie möchten:

tar -Oxf pkg.tar ./etc/lightdm/unity-greeter.conf |
Sudo tee /etc/lightdm/unity-greeter.conf 
  • ./etc/lightdm/unity-greeter.conf ist der Dateiname in unserem Archiv.
  • /etc/lightdm/unity-greeter.conf ist der Ort, an den ich es zur Speicherung sende.

Oder wie @Muru vorgeschlagen hat, können wir es in einem Liner tun:

dpkg-deb --fsys-tarfile unity-greeter_version-0ubuntu1_AMD64.deb |
Sudo tar -x -C / ./etc/lightdm/unity-greeter.conf
2
Ravexina

Ich hatte das gleiche Problem auf Ubuntu 17.04. Die Nachinstallation verwendet eine Vorlage aus /usr/share/openssh/. Es prüft, ob rootlogin aktiviert ist oder nicht, setzt diese Option und kopiert sie nach /etc/ssh. Danach führt es einige UFC- und UFC-Aufrufe durch (ich weiß nicht, wofür das ist).

Kopieren Sie einfach /usr/share/openssh/sshd_config nach /etc/ssh/sshd_config:

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

Stellen Sie nun Ihren sshd_config wie gewünscht ein.

1
user2162968

Dies funktioniert nicht bei allen Konfigurationsdateien. Informationen zu /etc/nsswitch.conf finden Sie unter Wiederherstellen/Neuerstellen von etc/nsswitch.conf-Dateien . Es scheint nicht möglich zu sein, diese Datei mit dpkg-reconfigure zu rekonstruieren.

0
Bram Geron