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
den 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, /etc/ssh/sshd_config
wird nicht direkt von jedem Paket zur Verfügung gestellt, aber die anderen beiden durch vorgesehen sind openssh-client
und sudo
jeweils. Wenn Sie sich also erholen möchten /etc/ssh/ssh_config
, 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 relativ zum aktuellen Verzeichnis an den vorgesehenen Speicherort, anstatt sie /
zu vergleichen und zu vergleichen oder manuell zusammenzuführen. Für das ehemalige:
dpkg-deb --fsys-tarfile openssh-client_*.deb | sudo tar x ./etc/ssh/ssh_config -C /
Der -C /
Befehl tar
zum Extrahieren nach dem Wechsel zu /
, was bedeutet, dass die Zieldatei ersetzt wird. Wenn Sie es entfernen, tar
wird es in das aktuelle Verzeichnis extrahiert, was bedeutet, ./etc/ssh/ssh_config
dass es in Ihrem aktuellen Verzeichnis vorhanden ist.
Wenn aus irgendeinem Grund sudo
nicht funktioniert, verwenden Sie pkexec
stattdessen. Wenn pkexec
dies auch nicht funktioniert, starten Sie den Computer im Wiederherstellungsmodus neu und hängen Sie ihn /
als ein rw
. Wenn das nicht geht ...
Erstellt von einem Paket
Was ist /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, in denen es sich um ein anderes Beispiel handelt /etc/modules
) 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 unter anderem in neueren Versionen PermitRootLogin
geändert werden soll no
.
Um solche Fälle zu identifizieren, versuchen Sie, die Betreuerskripte zu durchsuchen. Normalerweise müsstest du nur schauen postinst
, aber wenn du kein Glück hast postinst
, versuche es preinst
auch:
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 sehen Sie Folgendes (ein weiteres Beispiel /etc/modules
auskmod
):
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 einer VM oder einem Live-USB).
Behalten Sie auf lange Sicht Ihre Konfiguration unter Versionskontrolle. Jedes VCS, das sein Geld wert ist, kann hier den Tag retten, und das etckeeper
Hilfsprogramm vereinfacht die Aufbewahrung /etc
in einem VCS erheblich .