web-dev-qa-db-ja.com

コマンドラインからセキュリティ更新プログラムのみをインストールする方法はありますか?

Sudo apt-get upgradeは、セキュリティアップデートだけでなく、すべてのアップデートをインストールします。 Update Managerを使用して重要なセキュリティアップデートのみを選択できることは知っていますが、コマンドラインからこれを行う方法はありますか?

330

パッケージ nattended-upgrades は、セキュリティ更新プログラムを自動的にインストールする機能を提供します。

これを使用できますが、自動パーツを構成する代わりに、手動で呼び出すことができます。

Sudo unattended-upgrade -d --dry-run
Sudo unattended-upgrade -d

代わりに静かに実行したい場合:

Sudo unattended-upgrade

注:無人アップグレードを呼び出す場合は、「s」を最後から外します。

これは、おそらくパッケージがデフォルトでインストールされていることを前提としています。そうでない場合は、次のようにします。

Sudo apt-get install unattended-upgrades

/usr/share/doc/unattended-upgrades/README.mdもご覧ください。

307
blueyed

更新を管理する方法に関するいくつかのヒント

これはDebianとUbuntuの両方に適用されますが、Ubuntuのより具体的な手順は次のとおりです。

  • セキュリティアップデートのみを表示する:

    apt-get -s dist-upgrade |grep "^Inst" |grep -i securi 
    

    または

    Sudo unattended-upgrade --dry-run -d
    

    または

    /usr/lib/update-notifier/apt-check -p
    
  • アップグレード可能なパッケージをすべて表示

    apt-get -s dist-upgrade | grep "^Inst"
    
  • セキュリティ更新プログラムのみをインストールする

    apt-get -s dist-upgrade | grep "^Inst" | 
        grep -i securi | awk -F " " {'print $2'} | 
        xargs apt-get install
    

注:

  • Ubuntuは、$ release-updatesリポジトリから来ているかのようにセキュリティ更新を表示することがあります。 Ubuntu開発者はセキュリティ更新プログラムを$ release-updatesリポジトリにプッシュし、可用性を向上させるため、これはそうです。

    その場合は、次の手順を実行してセキュリティ更新プログラムのみを表示できます。

    Sudo sh -c 'grep ^deb /etc/apt/sources.list | 
        grep security > /etc/apt/sources.security.only.list'
    

    そして

    apt-get -s dist-upgrade -o Dir::Etc::SourceList=/etc/apt/sources.security.only.list -o Dir::Etc::SourceParts=/dev/null  | 
        grep "^Inst" | awk -F " " {'print $2'}
    
  • パッケージのアップグレード後に再起動する必要があるサービスを確認します。事前にアップグレードするパッケージを把握し、再起動/再起動をスケジュールします。ここでの問題は、サービスを再起動しない限り、セキュリティの脆弱性などを修正する新しいパッケージをインストールする前にメモリにロードされた古いバージョンのライブラリ(最も一般的な理由)を使用している可能性があることです。

    checkrestart -v
    

    ただし、checkrestartには、必ずしも再起動する必要のないプロセスがリストされる場合があることに注意してください。たとえば、PostgreSQLサービスは既に削除されたxlogファイルへのメモリ参照を保持している場合がありますが、これはサービスを再起動する正当な理由ではありません。

    したがって、標準のユーティリティを使用してこれを確認する別のより信頼性の高い方法は、次の小さなbashスクリプトです。私は恥知らずに https://locallost.net/?p=2

    システムで実行中のプロセスが、アクティブなメモリにそれらのコピーを保持することにより、削除されたライブラリをまだ使用しているかどうかをチェックします。

    ps xh -o pid |
    while read PROCID; do
           grep 'so.* (deleted)$' /proc/$PROCID/maps 2> /dev/null
           if [ $? -eq 0 ]; then
                   CMDLINE=$(sed -e 's/\x00/ /g' < /proc/$PROCID/cmdline)
                   echo -e "\tPID $PROCID $CMDLINE\n"
           fi
    done
    
114
ILIV

/etc/apt/preferencesを次のものに置き換えます。

Package: *
Pin: release a=lucid-security
Pin-Priority: 500

Package: *
Pin: release o=Ubuntu
Pin-Priority: 50

これで、単純なapt-get upgradeはすべてのセキュリティ更新のみをアップグレードします。

なぜ(そしてどのように)これが機能するのか:設定ファイルはUbuntuディストリビューションのすべてのパッケージを優先度50に固定します。セキュリティリポジトリから生成されたファイルには、デフォルト(500)の優先度が与えられているため、インストールが考慮されます。つまり、現在インストールされているパッケージよりも望ましいと考えられるパッケージのみがセキュリティ更新プログラムです。 apt_preferences manpage のピン留めの詳細。

--target-releaseおよびaptitude(少なくとも)で動作するapt-getオプションを使用して、特定のリリースを一時的に昇格させることができます。これにより、特定のリリースをアップグレードできるように固定できます。

これをスクリプトのみに使用し、システムのデフォルトにしたくない場合は、ルールを他の場所に配置し、代わりにこれを使用できます。

apt-get -o Dir::Etc::Preferences=/path/to/preferences_file upgrade

これにより、aptはデフォルト以外の場所から設定ファイルを探します。

例として示されている設定ファイルは、サードパーティのリポジトリには適用されません。それらも固定する場合は、apt-cache policyを使用して固定に必要なキーを簡単に決定できます。

46
Ressu

Ubuntu 14.04 LTSでは次のことが確認されています。

unattended-upgradeパッケージを使用します。

ファイル/etc/apt/apt.conf.d/50unattended-upgradesを見てください。上部に次のセクションがあるはずです。

// Automatically upgrade packages from these (Origin:archive) pairs
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
//  "${distro_id}:${distro_codename}-updates";
//  "${distro_id}:${distro_codename}-proposed";
//  "${distro_id}:${distro_codename}-backports";
};

デフォルトでセキュリティパッケージの無人アップグレードのみを許可するように設定されていることに注意してください。

次のようなファイル/etc/apt/apt.conf.d/10periodicを変更します。

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

これにより、1日1回、自動無人セキュリティアップグレードが実行されます。

ここで、手動で実行するには:Sudo unattended-upgrade

何もせずにドライランとしてテストするには:Sudo unattended-upgrade --dry-run

ソース: https://help.ubuntu.com/14.04/serverguide/automatic-updates.html

12
vcardillo

かなりいですが、セキュリティリポジトリ以外のすべてのリポジトリを無効にしてから実行できます。

Sudo apt-get update && Sudo apt-get upgrade

私はそれをテストしていませんが、理論的にはセキュリティリポジトリで更新を見つけて適用するだけです...

5
Stephen RC
  • apt-get update:リポジトリ内のエントリを読み取る-既存のリストによる。新機能を確認する必要がありました。
  • apt-get upgrade:カーネルモジュールなしのインストール済みパッケージのすべての更新。リリース更新なし。
  • apt-get dist-upgrade:インストールされたパッケージのすべてのアップデートとカーネルモジュール。リリース更新なし。
  • apt-getパラメータ付き-s:テストのみ、変更なし。
3
fuser

これをいくつかの異なる方法で実現するスクリプトを次に示します。

#!/usr/bin/env bash
set -e

# List upgradable packages
apt-get update
apt list --upgradable 2>/dev/null
# List security upgrades
test "$(apt-get upgrade -s -y)" && (apt-get upgrade -s -y)
# List upgradable apt packages then upgrade
apt-get update && apt-get upgrade -y  -V | grep '=>' | awk '{print$1}' && test "$(apt-get upgrade -y)"
0
Seth Bergman

Debianでは、このコマンドを使用してセキュリティ更新のみを行います。

apt-get install -y --only-upgrade $( apt-get --just-print upgrade | awk 'tolower($4) ~ /.*security.*/ || tolower($5) ~ /.*security.*/ {print $2}' | sort | uniq )
0
keypress

Apt-getまたはaptitudeのいずれにもオプションが見つかりませんが、SuperUserで 同じ質問 がありました。唯一の応答は次のとおりです。

Check and adjust /etc/apt/apt.conf.d/50unattended-upgrade. 
Did you replace 'karmic' with the code name of your Ubuntu?

しかし、それが機能したかどうかについては返信しません。

0
Ross