Para muchos casos, el archivo de configuración predeterminado lo proporciona un paquete directamente. En tales casos, puede extraer el archivo específico del paquete, recuperando así fácilmente el archivo.
Para verificar si un paquete proporciona el archivo, ejecute dpkg -S
en la ruta completa del archivo. Por ejemplo:
$ 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
Proporcionado por un paquete
Como podemos ver, /etc/ssh/sshd_config
ningún paquete lo proporciona directamente, pero los otros dos son proporcionados por openssh-client
y sudo
respectivamente. Entonces, si desea recuperarse /etc/ssh/ssh_config
, primero obtenga el paquete:
apt-get download openssh-client
Ahora, puede extraer el archivo directamente a su ubicación prevista, o a su ubicación prevista relativa al directorio actual en lugar de hacerlo /
, si desea comparar y contrastar, o fusionarlos manualmente o algo así. Para el primero:
dpkg-deb --fsys-tarfile openssh-client_*.deb | sudo tar x ./etc/ssh/ssh_config -C /
Le -C /
dice tar
a extraer después de cambiar a /
, lo que significa que el archivo de destino será reemplazado. Si lo elimina, tar
extraerá el directorio actual, lo ./etc/ssh/ssh_config
que significa que existirá en su directorio actual.
Si por alguna razón sudo
no funciona, use pkexec
en su lugar. Si pkexec
tampoco funciona, reinicie en modo de recuperación, monte /
como rw
. Si eso no funciona ...
Creado por un paquete
¿Qué hay de /etc/ssh/sshd_config
? No parece ser proporcionado por ningún paquete, entonces, ¿cómo apareció?
En este caso (y en muchos otros casos, siendo otro ejemplo /etc/modules
), el archivo se creó usando un script de mantenimiento de paquetes durante la instalación. Esto a menudo se hace cuando el archivo de configuración necesita ser cambiado debido a las respuestas del usuario a las consultas. OpenSSH, por ejemplo, pregunta si PermitRootLogin
debería cambiarse a no
, en versiones más nuevas, entre otras cosas.
Para identificar tales casos, intente recorrer los guiones del mantenedor. Por lo general, solo necesitaría mirar postinst
, pero si no tiene suerte postinst
, intente preinst
también:
grep -l /etc/ssh/sshd_config /var/lib/dpkg/info/*.postinst
En este caso, estamos de suerte:
$ grep /etc/ssh/sshd_config /var/lib/dpkg/info/*.postinst -l
/var/lib/dpkg/info/openssh-server.postinst
Solo un archivo coincidió y, por suerte, contiene código para crear un archivo de configuración predeterminado :
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
Por lo general, esto es lo que vería (otro ejemplo, /etc/modules
dekmod
):
cat > /path/to/the/file <<EOF
# default contents
EOF
Por lo tanto, puede buscar este código y obtener el contenido del script directamente.
No hay tal guión? Todavía puede intentar revisar las listas de archivos de paquetes relacionados para ver si algo golpea, pero en este punto, no veo un método fácilmente generalizable (salvo la reinstalación en entornos transitorios, como un chroot o una VM o un USB en vivo).
A la larga, mantenga su configuración bajo control de versiones. Cualquier VCS que valga la pena puede salvar el día aquí, y la etckeeper
utilidad simplifica considerablemente la tarea de mantener /etc
un VCS.