何らかの理由でLightDMをデフォルトの状態に戻したい/etc/lightdm/unity-greeter.conf
は空のファイルになりました。
/etc/lightdm/unity-greeter.conf
を削除してからSudo apt-get install --reinstall unity-greeter
を実行しても、予想どおりに新しい構成ファイルは作成されません。
不足している設定ファイルを復元するにはどうすればよいですか?
設定ファイルをインストールしたパッケージ を見つけます。
$ dpkg -S unity-greeter.conf
unity-greeter: /etc/lightdm/unity-greeter.conf
ご覧のとおり、パッケージの名前はunity-greeter
です。
/etc/pam.d
などのディレクトリを削除した場合、ディレクトリパスを使用して、ディレクトリに追加されたすべてのパッケージをリストできます。
$ 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
<package-name>
をパッケージの名前に置き換えて、次のコマンドを実行します。
Sudo apt install --reinstall -o Dpkg::Options::="--force-confask,confnew,confmiss" <package-name>
そして、ディレクトリを復元するために:
Sudo apt install --reinstall -o Dpkg::Options::="--force-confask,confnew,confmiss" $(dpkg -S /etc/some/directory | sed 's/,//g; s/:.*//')
すべてが期待どおりに機能した場合、メッセージが表示されます。
Configuration file `/etc/lightdm/unity-greeter.conf', does not exist on system.
Installing new config file as you requested.
すべてのPulseAudio構成ファイルを再インストールする必要がある場合の実用的な例:
apt-cache pkgnames Pulse |xargs -n 1 apt-get -o Dpkg::Options::="--force-confmiss" install --reinstall
多くの場合、デフォルトの構成ファイルはパッケージによって直接提供されます。そのような場合は、パッケージから特定のファイルを抽出して、ファイルを簡単に復元できます。
パッケージがファイルを提供するかどうかを確認するには、ファイルのフルパスでdpkg -S
を実行します。例えば:
$ 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
ご覧のとおり、/etc/ssh/sshd_config
はどのパッケージからも直接提供されませんが、他の2つはそれぞれopenssh-client
およびSudo
によって提供されます。したがって、/etc/ssh/ssh_config
を回復する場合は、最初にパッケージを取得します。
apt-get download openssh-client
これで、目的の場所にファイルを直接抽出するか、/
の代わりに現在のディレクトリに目的の場所relativeに抽出できます。比較して対比したり、手動でマージしたりしてください。前者の場合:
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
としてマウントします。 thatが機能しない場合...
/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
一致するファイルは1つだけで、運がよければ、それには デフォルトの構成ファイル を作成するコードが含まれています。
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
通常、これが表示されます(別の例、 /etc/modules
FROM kmod
):
cat > /path/to/the/file <<EOF
# default contents
EOF
そのため、このコードを探して、スクリプトから直接コンテンツを取得できます。
そのようなスクリプトはありませんか?関連するパッケージのファイルリストを調べて、何かがヒットするかどうかを確認することはできますが、現時点では、簡単に一般化できる方法はありません(chrootまたはVMまたはライブUSB)。
長期的には、構成をバージョン管理下に置いてください。その塩に値するVCSは、ここで1日を節約できます。また、 etckeeper
ユーティリティ は、VCSで/etc
を保持するタスクを大幅に簡素化します。
Ubuntuフォーラムの this スレッドによると、ターミナルで次を実行するのと同じくらい簡単です。
Sudo dpkg-reconfigure lightdm
構成ファイルを所有するパッケージを見つけます。
dpkg --search /etc/path/to/config
次のようなものが出力されます。
unity-greeter: /etc/lightdm/unity-greeter.conf
パッケージ名は「ユニティグリッター」なので、パッケージをダウンロードします。
apt-get download unity-greeter
次に、ファイルシステムツリーデータをtarファイルに抽出します。
dpkg-deb --fsys-tarfile unity-greeter_version-0ubuntu1_AMD64.deb > pkg.tar
最後に、必要な場所にある正確な構成のみを抽出します。
tar -Oxf pkg.tar ./etc/lightdm/unity-greeter.conf |
Sudo tee /etc/lightdm/unity-greeter.conf
./etc/lightdm/unity-greeter.conf
は、アーカイブ内のファイル名です。/etc/lightdm/unity-greeter.conf
は、保存するために送信する場所です。または、@ Muruが示唆したように、1つのライナーで行うことができます。
dpkg-deb --fsys-tarfile unity-greeter_version-0ubuntu1_AMD64.deb |
Sudo tar -x -C / ./etc/lightdm/unity-greeter.conf
Ubuntu 17.04でも同じ問題が発生しました。ポストインストールでは、/usr/share/openssh/
のテンプレートが使用されます。 rootloginが有効かどうかを確認し、このオプションを設定して/etc/ssh
にコピーします。その後、いくつかのucfおよびucfr呼び出しを実行します(その目的はわかりません)。
/usr/share/openssh/sshd_config
を/etc/ssh/sshd_config
にコピーするだけです:
Sudo cp /usr/share/openssh/sshd_config /etc/ssh/sshd_config
必要に応じてsshd_config
を調整します。
これはすべての構成ファイルで機能するわけではありません。 /etc/nsswitch.conf
については、 etc/nsswitch.confファイルを復元/再作成する方法 を参照してください。 dpkg-reconfigure
を使用してそのファイルを再構築することはできないようです。