Đối với nhiều trường hợp, tệp cấu hình mặc định được cung cấp trực tiếp bởi một gói. Trong các trường hợp như vậy, bạn có thể trích xuất tệp cụ thể từ gói, do đó dễ dàng khôi phục tệp.
Để kiểm tra xem một gói có cung cấp tệp không, hãy chạy dpkg -S
trên đường dẫn đầy đủ của tệp. Ví dụ:
$ 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
Được cung cấp bởi một gói
Như chúng ta có thể thấy, /etc/ssh/sshd_config
không được cung cấp trực tiếp bởi bất kỳ gói nào, nhưng hai gói còn lại được cung cấp bởi openssh-client
và sudo
tương ứng. Vì vậy, nếu bạn muốn khôi phục /etc/ssh/ssh_config
, trước tiên hãy lấy gói:
apt-get download openssh-client
Bây giờ, bạn có thể trích xuất tệp trực tiếp đến vị trí dự định của nó hoặc đến vị trí dự định của nó so với thư mục hiện tại thay vì /
, nếu bạn muốn so sánh và đối chiếu, hoặc hợp nhất thủ công chúng hoặc một cái gì đó. Cho ngươi tiên nhiệm:
dpkg-deb --fsys-tarfile openssh-client_*.deb | sudo tar x ./etc/ssh/ssh_config -C /
Các -C /
kể tar
để giải nén sau khi chuyển sang /
, có nghĩa là các tập tin mục tiêu sẽ được thay thế. Nếu bạn loại bỏ nó, tar
sẽ trích xuất vào thư mục hiện tại, nghĩa là ./etc/ssh/ssh_config
sẽ tồn tại trong thư mục hiện tại của bạn.
Nếu vì lý do sudo
nào đó không hoạt động, pkexec
thay vào đó sử dụng . Nếu pkexec
không hoạt động, khởi động lại vào chế độ phục hồi, gắn kết /
như rw
. Nếu đó không hoạt động ...
Tạo bởi một gói
Thế còn /etc/ssh/sshd_config
? Nó dường như không được cung cấp bởi bất kỳ gói nào, vậy nó đã xuất hiện như thế nào?
Trong trường hợp này (và trong nhiều trường hợp khác, ví dụ khác /etc/modules
), tệp được tạo bằng tập lệnh duy trì gói trong khi cài đặt. Điều này thường được thực hiện khi tệp cấu hình cần được thay đổi do phản hồi của người dùng đối với các truy vấn. OpenSSH, ví dụ, hỏi liệu có PermitRootLogin
nên thay đổi thành no
, trong các phiên bản mới hơn, trong số những thứ khác.
Để xác định các trường hợp như vậy, hãy thử greping thông qua các tập lệnh duy trì. Thông thường bạn sẽ chỉ cần nhìn postinst
, nhưng nếu bạn không có may mắn nào postinst
, hãy thử preinst
:
grep -l /etc/ssh/sshd_config /var/lib/dpkg/info/*.postinst
Trong trường hợp này, chúng tôi gặp may mắn:
$ grep /etc/ssh/sshd_config /var/lib/dpkg/info/*.postinst -l
/var/lib/dpkg/info/openssh-server.postinst
Chỉ có một tệp phù hợp và may mắn sẽ có nó, nó chứa mã để tạo tệp cấu hình mặc định :
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
Thông thường, đây là những gì bạn sẽ thấy (ví dụ khác, /etc/modules
từkmod
):
cat > /path/to/the/file <<EOF
# default contents
EOF
Vì vậy, bạn có thể tìm mã này và lấy nội dung từ tập lệnh trực tiếp.
Không có kịch bản như vậy? Bạn vẫn có thể thử chọc vào các filelist của các gói liên quan để xem có gì xảy ra không, nhưng tại thời điểm này, tôi thấy không có phương pháp dễ khái quát nào (thiếu cài đặt lại trên các môi trường nhất thời, như chroot hoặc VM hoặc USB trực tiếp).
Về lâu dài, hãy giữ cấu hình của bạn dưới sự kiểm soát phiên bản. Bất kỳ VCS trị giá muối của nó có thể tiết kiệm trong ngày ở đây, và các etckeeper
tiện ích đơn giản hoá đáng kể nhiệm vụ giữ /etc
trong một VCS.