web-dev-qa-db-ja.com

構成ファイルを復元するにはどうすればよいですか?

何らかの理由でLightDMをデフォルトの状態に戻したい
/etc/lightdm/unity-greeter.confは空のファイルになりました。

/etc/lightdm/unity-greeter.confを削除してからSudo apt-get install --reinstall unity-greeterを実行しても、予想どおりに新しい構成ファイルは作成されません。

不足している設定ファイルを復元するにはどうすればよいですか?

97
Isaiah
  1. 設定ファイルをインストールしたパッケージ を見つけます。

    $ 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
    
  2. <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/:.*//')
    
  3. すべてが期待どおりに機能した場合、メッセージが表示されます。

    Configuration file `/etc/lightdm/unity-greeter.conf', does not exist on system. 
    Installing new config file as you requested.
    
  4. すべてのPulseAudio構成ファイルを再インストールする必要がある場合の実用的な例:

    apt-cache pkgnames Pulse |xargs -n 1 apt-get -o Dpkg::Options::="--force-confmiss" install --reinstall 
    
142
Isaiah

多くの場合、デフォルトの構成ファイルはパッケージによって直接提供されます。そのような場合は、パッケージから特定のファイルを抽出して、ファイルを簡単に復元できます。

パッケージがファイルを提供するかどうかを確認するには、ファイルのフルパスで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は、特に新しいバージョンでPermitRootLoginnoに変更するかどうかを尋ねます。

そのような場合を特定するには、メンテナースクリプトを調べます。通常、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を保持するタスクを大幅に簡素化します。

27
muru

Ubuntuフォーラムの this スレッドによると、ターミナルで次を実行するのと同じくらい簡単です。

Sudo dpkg-reconfigure lightdm
3
Nathan Osman

構成ファイルを所有するパッケージを見つけます。

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
2
Ravexina

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を調整します。

1
user2162968

これはすべての構成ファイルで機能するわけではありません。 /etc/nsswitch.confについては、 etc/nsswitch.confファイルを復元/再作成する方法 を参照してください。 dpkg-reconfigureを使用してそのファイルを再構築することはできないようです。

0
Bram Geron