Во многих случаях конфигурационный файл по умолчанию предоставляется непосредственно пакетом. В таких случаях вы можете извлечь конкретный файл из пакета, что позволит легко восстановить файл.
Чтобы проверить, предоставляет ли пакет файл, запустите dpkg -S
по полному пути к файлу. Например:
$ dpkg -S /etc/ssh/sshd_config /etc/ssh/ssh_config /etc/sudoersdpkg-query: no path found matching pattern /etc/ssh/sshd_configopenssh-client: /etc/ssh/ssh_configsudo: /etc/sudoers
Предоставляется пакетом
Как мы можем видеть, /etc/ssh/sshd_config
напрямую не предоставляется ни одним пакетом, но два других предоставляются openssh-client
и sudo
соответственно. Итак, если вы хотите выздороветь /etc/ssh/ssh_config
, сначала получите посылку:
apt-get download openssh-client
Теперь вы можете либо извлечь файл непосредственно в его предполагаемое местоположение, либо в его предполагаемое местоположение родственник в текущий каталог вместо /
, если вы хотите сравнить и сопоставить, или вручную объединить их, или что-то в этом роде. Для первого:
dpkg-deb --fsys-tarfile openssh-client_*.deb | sudo tar x ./etc/ssh/ssh_config -C /
То -C /
говорит tar
для извлечения после изменения на /
, что означает, что целевой файл будет заменен. Если вы удалите его, tar
будет извлечен в текущий каталог, что означает ./etc/ssh/ssh_config
будет существовать в вашем текущем каталоге.
Если по какой-то причине sudo
не работает, используйте pkexec
вместо. Если pkexec
тоже не работает, перезагрузитесь в режим восстановления, смонтируйте /
как rw
. Если тот не работает...
Созданный пакетом
Что о /etc/ssh/sshd_config
? Похоже, что он не предоставляется каким-либо пакетом, так как же он появился?
В этом случае (и во многих других подобных случаях, другим примером является /etc/modules
), файл был создан с помощью сценарий сопровождающего пакета во время установки. Это часто делается, когда файл конфигурации необходимо изменить из-за ответов пользователей на запросы. OpenSSH, например, спрашивает, если PermitRootLogin
должен быть изменен на no
, в более новых версиях, среди прочего.
Чтобы выявить такие случаи, попробуйте выполнить поиск по скриптам сопровождающего. Как правило, вам нужно будет только посмотреть postinst
, но если вам не повезет с postinst
, попробуй preinst
также:
grep -l /etc/ssh/sshd_config /var/lib/dpkg/info/*.postinst
В этом случае нам повезло:
$ grep /etc/ssh/sshd_config /var/lib/dpkg/info/*.postinst -l/var/lib/dpkg/info/openssh-server.postinst
Совпадал только один файл, и, как назло, он содержит код для создания конфигурационный файл по умолчанию:
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 forPort 22# Use these options to restrict which interfaces/protocols sshd will bind to#ListenAddress ::#ListenAddress 0.0.0.0Protocol 2# HostKeys for protocol version 2HostKey /etc/ssh/ssh_host_rsa_keyHostKey /etc/ssh/ssh_host_dsa_keyHostKey /etc/ssh/ssh_host_ecdsa_key#Privilege Separation is turned on for securityUsePrivilegeSeparation yes# Lifetime and size of ephemeral version 1 server keyKeyRegenerationInterval 3600ServerKeyBits 768# LoggingSyslogFacility AUTHLogLevel INFO# Authentication:LoginGraceTime 120PermitRootLogin yesStrictModes yesRSAAuthentication yesPubkeyAuthentication yes#AuthorizedKeysFile %h/.ssh/authorized_keys# Don't read the user's ~/.rhosts and ~/.shosts filesIgnoreRhosts yes# For this to work you will also need host keys in /etc/ssh_known_hostsRhostsRSAAuthentication no# similar for protocol version 2HostbasedAuthentication 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 yesX11Forwarding yesX11DisplayOffset 10PrintMotd noPrintLastLog yesTCPKeepAlive yes#UseLogin no#MaxStartups 10:30:60#Banner /etc/issue.net# Allow client to pass locale environment variablesAcceptEnv 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 yesEOF
Как правило, это то, что вы бы увидели (другой пример, /etc/modules
от kmod
):
cat > /path/to/the/file <<EOF# default contentsEOF
Таким образом, вы можете искать этот код и получать содержимое непосредственно из скрипта.
Нет такого сценария? Вы все еще можете попробовать просмотреть списки файлов связанных пакетов, чтобы посмотреть, не попадет ли что-нибудь, но на данный момент я не вижу легко обобщаемого метода (за исключением переустановки в переходных средах, таких как chroot, виртуальная машина или живой USB).
В долгосрочной перспективе держите свою конфигурацию под контролем версий. Любой достойный венчурный капитал может спасти положение здесь, и то etckeeper
польза значительно упрощает задачу сохранения /etc
в венчурном капитале.