구성 파일을 어떻게 복원 할 수 있습니까?


98

어떤 이유로 인해
/etc/lightdm/unity-greeter.conf이제 빈 파일 이기 때문에 LightDM을 기본 상태로 복원하고 싶습니다 .

삭제 /etc/lightdm/unity-greeter.conf한 다음 실행 sudo apt-get install --reinstall unity-greeter해도 새 구성 파일이 생성되지 않습니다.

누락 된 구성 파일을 어떻게 복원 할 수 있습니까?

답변:


144
  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 
    

3
감사합니다; 나는 수년 동안 이것에 대해 궁금해하고 있습니다. 그래도 지정하기가 더 쉬워야합니다. 버그가 있습니까?
글리프

4
이 답변을 작은 스크립트로 변환했습니다. gist.github.com/jameshfisher/10547691
jameshfisher 17

5
--force-confask삭제하지 않고 얻을 수있는 또 다른 이점은 변경 사항과 원본 사이의 차이점을 보여줍니다.
anps

4
우분투에서 테스트되지는 않았지만 데비안 ucf에서 --force-confmiss옵션 으로 관리되는 설정 파일을 복원 하려면 작동하지 않습니다 sudo UCF_FORCE_CONFFMISS=1 apt-get --reinstall install [pkgname].
Skippy le Grand Gourou

내가 사용할 때 -o"dpkg : error : unknown option -o"오류가 발생했지만 --option대신 사용했을 때 작동한다는 것이 매우 이상합니다 . 우분투 16.04.1에 있습니다.
Ryan H.

27

대부분의 경우 기본 구성 파일은 패키지에서 직접 제공합니다. 이러한 경우 패키지에서 특정 파일을 추출하여 파일을 쉽게 복구 할 수 있습니다.

패키지가 파일을 제공하는지 확인하려면 파일 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직접 패키지가 제공되지 않지만, 다른 두에서 제공 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.

이러한 경우를 식별하려면 관리자 스크립트를 통해 greping을 시도하십시오. 일반적으로을 살펴보면 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 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에서kmod ) :

cat > /path/to/the/file <<EOF
# default contents
EOF

따라서이 코드를 찾아서 스크립트에서 직접 내용을 가져올 수 있습니다.


그런 스크립트가 없습니까? 여전히 관련 패키지의 파일 목록을 조사하여 문제가 발생했는지 확인할 수는 있지만,이 시점에서 쉽게 일반화 할 수있는 방법은 없습니다 (chroot, VM 또는 라이브 USB와 같은 일시적인 환경에서 다시 설치하지 못하는 경우).


장기적으로 구성을 버전 제어 상태로 유지하십시오. 그 소금의 가치가 모든 VCS는 여기에 하루에 저장할 수 있으며, 유틸리티는 상당히 유지하는 작업을 단순화 VCS는에 있습니다.etckeeper/etc


3

우분투 포럼 의이 스레드에 따르면 터미널에서 다음을 실행하는 것만 큼 간단합니다.

sudo dpkg-reconfigure lightdm

1
나는 그 명령을 실행했고 이것은 출력이었다 dpkg-maintscript-helper: warning: environment variable DPKG_MAINTSCRIPT_NAME missing dpkg-maintscript-helper: warning: environment variable DPKG_MAINTSCRIPT_PACKAGE missing. LightDM도 원래 구성으로 복원되지 않았습니다.
이사야

@DoR : 흠 ... 이상해. 패키지를 다시 설치하는 옵션입니다.
Nathan Osman

다시 설치했지만 ( sudo apt-get --reinstall install lightdm) 여전히 /etc/lightdm/unity-greeter.conf비어 있습니다.
이사야

1
이것은 일반적인 조언이지만, 분명히 틀립니다. 내가 시도한 대부분의 경우 작동하지 않습니다.
글리프

2

구성 파일을 소유 한 패키지를 찾으십시오.

dpkg --search /etc/path/to/config

다음과 비슷한 결과가 출력됩니다.

unity-greeter: /etc/lightdm/unity-greeter.conf

패키지 이름이 "unity-greeter"이면 패키지를 다운로드하십시오.

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가 제안했듯이 하나의 라이너로 할 수 있습니다.

dpkg-deb --fsys-tarfile unity-greeter_version-0ubuntu1_amd64.deb |
sudo tar -x -C / ./etc/lightdm/unity-greeter.conf

1
당신은 단순히 자신이 속한 곳을 다시 복원하는 경우, 할 dpkg-deb --fsys-tarfile unity-greeter_version-0ubuntu1_amd64.deb | sudo tar x -C / ./etc/lightdm/unity-greeter.conf, 그래서 tar에 CD를 것이다 /추출하기 전에.
muru

@muru 대안으로 추가;)
Ravexina

투표 할 때 항상 의견을 남기십시오 ...
Ravexina

1

우분투 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

(다시) 삭제 파일을 다시 설치 unity-greeter와 함께 apt-get install --reinstall unity-greeter.


1
구성 파일은 복원되지 않습니다.
starbeamrainbowlabs
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.