パッケージを削除する前に呼び出されるフックを「インストール」できますか?

パッケージを削除する前に呼び出されるフックを「インストール」できますか?

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特定のファイルがそのパッケージが提供する場所にあることを望まない場合。

おすすめ記事