패키지를 제거하기 전에 호출되는 후크를 "설치"할 수 있습니까?

패키지를 제거하기 전에 호출되는 후크를 "설치"할 수 있습니까?

sshd배경: Ubuntu에서는 파일을 삭제한 후 로드하려고 할 때 오류가 기록되지 않도록 하고 싶습니다 . 이를 시도 하지 못하도록 ssh_host_dsa_key하는 구성 옵션이 없는 것 같습니다 . 따라서 파일을 지운 후 변경할 수 없는 속성을 설정했습니다.sshd_configsshdchattr +i

이제 openssh-server답변에서 이 특정 예(패키지)를 살펴보겠습니다.

질문:제거(정리) 프로세스 중에 패키지 자체가 호출하기 전에 실행되는 스크립트를 어떻게 설치합니까?

상상할 수 있듯이 apt-get --purge remove패키지를 제거( )하면 불변 속성으로 인해 실패합니다. 이러한 후크를 사용하면 변경할 수 없는 속성을 제거하고 패키지 삭제가 성공할 수 있습니다.


DSA 키를 로드할 수 없으면 로그에 다음 오류가 나타납니다.

sshd[5669]: error: Could not load host key: /etc/ssh/ssh_host_dsa_key

답변1

dpkg이 명령에 후크를 추가 할 수 있습니다 . 다음 내용으로 파일을 생성합니다 /etc/dpkg/dpkg.cfg.d/my_hook(디렉토리가 없으면 생성).

pre-invoke=/usr/local/sbin/dpkg-pre-hook

이 프로그램은 /usr/local/sbin/dpkg-pre-hook작업이 수행되기 전에 실행됩니다. dpkg환경 변수에는 수행 중인 작업 DPKG_HOOK_ACTION( , 또는 기타 여러 작업 중 하나 )이 포함됩니다 dpkg. 작업 중인 패키지의 이름을 알 수 있는 방법이 없습니다. 이러한 후크는 개별 패키지의 동작에 영향을 주지 않고 시스템 상태를 업데이트하도록 설계되었습니다(예: 패키지의 색인 또는 문서를 최신 상태로 유지). 그래도 전달된 인수를 보면 무슨 일이 일어나고 있는지 알 수 있습니다. 이것은 완전히 신뢰할 수는 없지만 시스템 관리자가 이를 깨려고 시도하지 않는 한 작동합니다.installunpackconfigureremovepurgedpkg

#!/bin/bash
IFS=$'\t' read -a arguments < <(</proc/$PPID/cmdline tr '\0' '\t')
shift arguments
case $DPKG_HOOK_ACTION in
  remove|purge)
    for x in "${arguments[@]}"; do
      case $x in
        openssh-server) …;;
      esac
    done
esac

당신의 예는 이상합니다. 누구세요거의 확실하게 잘못된 트리입니다.. ssh_host_ecdsa_keyUbuntu 패키지는 패키지를 제거할 때 새 파일을 생성하지 않습니다(정말 이상한 일입니다!). 그것삭제이 키 파일(다른 키 파일 및 기타 구성 파일 포함)은 다음과 같습니다.분명한팩. 키 파일 삭제를 원하지 않는 경우, 패키지를 삭제하는 대신 패키지를 삭제하거나, 키 파일을 백업하세요.

SSH 서버가 특정 키 유형을 사용하는 것을 원하지 않는 경우(아마도 처음에는 좋은 생각이 아닐 수 있음) 파일 속성을 조작하지 마십시오. 이는 구성 파일에서 이 옵션을 사용하여 달성됩니다. HostKey이 옵션은 사용할 키에 대해 명시적으로 전달되며 기본 키 파일 이름은 사용되지 않습니다.

패키지에서 제공하는 파일의 경우(각 시스템에서 생성해야 하는 SSH 키 파일의 경우는 해당되지 않음) 다음을 사용합니다.dpkg-divert특정 파일이 해당 패키지에서 제공하는 위치에 있는 것을 원하지 않는 경우.

답변2

prermdeb 패키지의 스크립트를 통해 임의 제거 작업을 수행할 수 있으며 postrm, 이를 위해 패키지를 다시 빌드할 수 있지만가능한openssh-server.prerm(에서 ) 편집하는 경우 /var/lib/dpkg/info/에도 작동합니다 . (RPM 사양 파일 %preun및 섹션 과 유사합니다 %postun.)

현재 OpenSSH 패키지는 이를 사용하여 update-alternatives구성 파일을 정리합니다. 예를 들어 다음을 볼 수 있습니다.여기Ubuntu 에서 openssh_6.6p1-2ubuntu1.debian.tar.xz사용하는 패키지 설정.

바라보다https://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html (특히 섹션 7.6)

Ubuntu에서 OpenSSH 패키지의 설치 및 작동에 대해 제가 이해한 바에 따르면 다양한 키는 새로 설치할 때만 생성되며 일부 배포판처럼 부팅할 때마다 요구되는 것은 아닙니다.

Ubuntu가 제공하는 유일한 다른 유형의 "후크"는 충돌 감지라고 생각합니다.동의하다, 여기서는 쓸모가 없습니다.

sshd참조하는 파일은 그 자체로 생성되지 않지만 ( sshd_config기본값 HostKey) 해당 파일이 존재할 것으로 예상합니다. 현재 OpenSSH에서는 활성화된 호스트 키 알고리즘을 선택할 수 없습니다.분명히, 명시된 대로 KexAlgorithms활성화되어 있습니다.암묵적으로부팅 시 각 유형(RSA, DSS, ECDSA)의 실행 가능한 호스트 키가 발견된 경우. 또 다른 접근 방식은 HostKey지원하려는 각 키 유형에 대한 기본값을 재정의하는 키를 지정하는 것입니다.

관련 정보