명령 줄에서 보안 업데이트 만 설치하려면 어떻게해야합니까?


333

sudo apt-get upgrade보안 업데이트뿐만 아니라 모든 업데이트를 설치합니다. Update Manager를 사용하여 중요한 보안 업데이트 만 선택할 수 있지만 명령 줄에서이를 수행 할 수있는 방법이 있습니까?


2
나는 그렇게 생각하지 않습니다. dist-upgrade는 전체 시스템을 새로운 릴리스로 가져옵니다. Update Manager에 표시되는 것과 같은 일상적인 업데이트에 대해 이야기하고 있습니다.
Michael Crenshaw

1
오, 지금 무슨 말을하는지 봅니다. Het, 나는 종종 apt-get update를 실행하고 생각없이 입력합니다. 고마워요!
Michael Crenshaw

7
"apt-get upgrade"가 아니라 "apt-get dist-upgrade"를 원합니다. "dist-upgrade"는 새 릴리스 용이 아닙니다 (즉, "do-release-upgrade"는 별도의 명령 임). "dist-upgrade"를 사용하면 새 패키지의 변경 종속성을 처리합니다. 이것은 중요 할 수 있습니다.
Kees Cook

3
dist-upgrade는 Update Manager GUI에서 수행하는 일반적인 작업입니다. linux-image-generic현재 이미지에 따라 패키지 가있는 커널과 같은 패키지의 경우 linux-image-3.x.y-zz-generic( 예 : 각 버전이 별도의 패키지 이름 임) dist-upgrade (종속성을 만족시키기 위해 새 패키지를 설치할 수 있도록 함)는이 업그레이드를 수행합니다. 업그레이드는 커널 패키지를 보류 상태로 표시합니다.
chronitis

3
apt-get각 서버에 얼마나 눈에 잘 띄는가를 고려할 때 이에 대한 좋은 답변 이 없다는 사실을 놀라움
Karthik T

답변:


308

무인 업그레이드 패키지 는 보안 업데이트를 자동으로 설치하는 기능을 제공합니다.

이것을 사용할 수는 있지만 자동 부품을 구성하는 대신 수동으로 호출 할 수 있습니다.

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.


자동 실행을 비활성화하려면 unattended-upgrade수정해야 할 수도 /etc/cron.daily/apt있지만 "올바른"것인지 확실하지는 않습니다.
Jaime Hablutzel

참고 : Ubuntu 12.04.5 LTS 서버의 경우 unattended-upgrades기본적으로 설치되지 않습니다.
랩터

13
명령 행에서이 작업을 수행하므로 -v정보 메시지 또는 -d디버그 메시지에 사용하십시오. 그렇지 않으면이 유틸리티는 매우 조용하므로이 경우 로그를 확인해야합니다 /var/log/unattended-upgrades. --dry-run시뮬레이션 하거나 실제로 업그레이드하지는 않습니다. 자세한 정보 및 기타 옵션 --help을 보려면을 사용 하여 도움말 메시지를 받으십시오.
ADTC

나는 unattended-upgrades오늘 에 대해 몇 가지를 배웠다 . 감사!
the0ther

"어떻게 진행되는지 모니터링하기 위해"그것은 단지 비 대화식 메시지를 디버그하는 것입니까?
물병 자리 힘

116

업데이트 관리 방법에 대한 몇 가지 팁

이것은 데비안과 우분투 모두에 적용되지만 우분투에 대한 자세한 지침은 다음과 같습니다.

  • 보안 업데이트 만 표시 :

    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
    

노트:

  • 때때로 우분투는 $ release-updates 저장소에서 온 것처럼 보안 업데이트를 보여줍니다. 우분투 개발자들은 보안 업데이트를 $ 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 파일에 대한 메모리 참조를 유지하고있을 수 있습니다. 이는 서비스를 다시 시작해야하는 이유가 아닙니다.

    따라서 표준 유틸리티를 사용하여이를 확인하는 또 다른보다 안정적인 방법은 https://locallost.net/?p=233 에서 뻔뻔스럽게 훔친 다음 작은 bash 스크립트입니다.

    활성 메모리에 사본을 보관하여 시스템에서 실행중인 프로세스가 여전히 삭제 된 라이브러리를 사용 중인지 확인합니다.

    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
    

1
나는 지금이 포스트 만 주목한다. 매우 정확합니다. 고마워요 (+1)
Danduk82

'checkrestart'는 어디에서 왔습니까? 우분투 트러스티에서 찾을 수 없습니다. 나는 당신의 지시에 맞는 것처럼 보이는 "needrestart"를 찾았습니까?
Ben XO

debian-goodies package : packages.debian.org/wheezy/debian-goodies 에서 찾을 수 있습니다 . 다시 시작해야합니다. 다음을 실행하여 Xenial에서 두 가지를 모두 찾을 수 있습니다. $ apt-cache search checkrestart
ILIV

sudo를 사용해도 "E : 잠금 파일 / var / lib / dpkg / lock-열 수 없음 (13 : 권한 거부)"이 표시됩니다. 이것은 업데이트 또는 제공 한 명령 중 하나에 특정한 것입니까?
Nathan Hornby

잠금 파일이 지워지지 않은 dpkg의 올바르지 않거나 비정상적인 종료일 가능성이 높습니다. 예를 들어 패키지 설치가 성공적으로 완료되지 않을 때까지 (전체 디스크 등) 정상적으로 발생하지 않습니다. 다른 apt-get 및 dpkg 명령을 실행할 수 없습니까?
ILIV

46

/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 맨 페이지의 고정에 대한 자세한 내용 .

당신은 일시적으로 업데이트를위한 특정 분포를 홍보 할 수 --target-release와 함께 작동 옵션 apt-get과을 aptitude(적어도)가 업그레이드 할 수 있습니다 있도록 특정 릴리스 핀 수있다.

스크립트에만 사용하고 시스템에 대해서는 기본값으로 설정하지 않으려면 규칙을 다른 위치에 배치하고 대신 사용할 수 있습니다.

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

이것은 기본이 아닌 위치에서 환경 설정 파일을 찾는 것입니다.

예를 들어 제공된 환경 설정 파일은 써드 파티 저장소에는 적용되지 않습니다.이 저장소도 고정하려는 경우 apt-cache policy고정에 필요한 키를 쉽게 판별하는 데 사용할 수 있습니다.


시간을내어 철저히 답변 해 주셔서 감사합니다. 나는 그것이 어떻게 작동하는지 이해 한다고 생각 합니다. 그러나 / etc / apt / preferences 파일을 만들고 apt-get upgrade를 실행하면 보안 업데이트뿐만 아니라 모든 패키지를 업그레이드하려고합니다. 이전과 이후의 목록 업그레이드 는 / etc / apt / preferences를 제외하고 는 완전히 동일합니다. Leafpad를 업그레이드하고 싶지는 않습니다. Leafpad는 소스에서 빌드하고 dpkg로 "손으로"설치했습니다. 나에게는 매우 이상하지만 당신에게 뭔가를 의미 할 수도 있습니다.
Michael Crenshaw

1
apt-cache policy 명령으로 진행중인 작업을 확인할 수 있습니다. 보안 수정이 적용되지 않은 패키지 중 하나를 선택하고 실행하십시오 apt-cache policy packagename. 다양한 버전의 우선 순위가 표시됩니다. 다양한 줄과 다른 우선 순위가 표시되어야합니다. 우선 순위가 50 인 라인이없는 경우 피닝은 어떤 이유로 든 해당 패키지에 영향을 미치지 않습니다.
Ressu

1
나는 과거 에이 대답을 따랐습니다. 오늘이 답변으로 인해 68 개의 보안 업데이트 패키지가 서버에 설치되지 않았으며 설치 후보로 표시되지 않는 것으로 나타났습니다. 이것은 좋은 답변이 아닙니다!
Shade

12

다음은 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";

이렇게하면 하루에 한 번 자동 무인 보안 업그레이드가 실행됩니다.

이제 수동으로 실행하십시오 sudo unattended-upgrade.

아무 것도하지 않고 드라 이런으로 테스트하려면 : sudo unattended-upgrade --dry-run.

출처 : https://help.ubuntu.com/14.04/serverguide/automatic-updates.html


이것을 월간 일정으로 만드는 방법이 있습니까?
mike.b93

1
@ mike.b93, 설정 APT::Periodic::Unattended-Upgrade "30";이 30 일마다 수행 될 것이라고 생각합니다 .
vcardillo

5

꽤 추악하지만 보안 저장소와 별도로 모든 저장소를 비활성화 한 다음 다음을 수행 할 수 있습니다.

sudo apt-get update && sudo apt-get upgrade

나는 그것을 테스트하지 않았지만 이론적으로는 보안 저장소에서 업데이트 만 찾아서 적용 할 것입니다 ...


네, 가능합니다. 내가 살펴볼 게 나는 BASH에 능숙하지 않지만 그것을하기 위해 스크립트를 만들려고 할 수 있습니다.
Michael Crenshaw

OK, 나는 우분투 보안 저장소를 제외한 모든 것을 비활성화하고 sudo apt-get update && sudo apt-get upgrade(업그레이드가 완료되기 전에 취소)를 실행했습니다 . 그런 다음 모든 repos를 다시 활성화하고을 실행 sudo apt-get updatee하고 Update Manager를 열었습니다. 보안 업데이트로 표시된 패키지는 정확히 apt-get upgrade발견 된 것은 아니지만 매우 가깝습니다. Update Manager가 어떻게 작동하는지, 명령 줄에서 어떻게하는지 정확히 알고 있었으면 좋겠지 만, 그렇게 할 것입니다. 감사!
Michael Crenshaw

3
  • apt-get update: 기존 목록에 따라 저장소의 항목을 읽으십시오. 새로운 내용을 확인해야했습니다.
  • apt-get upgrade: 커널 모듈없이 설치된 패키지에 대한 모든 업데이트. 릴리스 업데이트가 없습니다.
  • apt-get dist-upgrade: 커널 모듈과 함께 설치된 패키지의 모든 업데이트. 릴리스 업데이트가 없습니다.
  • apt-get매개 변수 사용 -s: 테스트 전용, 변경 사항 없음.

0

데비안에서는이 명령을 사용하여 보안 업데이트 만 수행합니다.

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

0

apt-get 또는 aptitude에서 옵션을 찾을 수 없지만 수퍼 유저에 대해 같은 질문이 있습니다. 유일한 응답은 다음과 같습니다.

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

그러나 그것이 효과가 있었는지에 대한 대답은 없습니다.


2
해당 위키 페이지에 설명 된 방법은 aptitude의 --target-release 인수를 <release> -security로 설정하는 것에 달려 있습니다. 해당 질문의 OP와 마찬가지로이 방법은 보안 업그레이드뿐만 아니라 모든 업그레이드를 설치합니다. apt-get와 적성 매뉴얼 페이지를 읽고, 나는 --target-릴리스 인수가 심지어 내가 그냥 모르겠어요하지만, 단지 보안 업그레이드에 한정되는 것은 생각하지 않는 것입니다 위해.
Michael Crenshaw

0

다음은 몇 가지 다른 방법으로이를 달성하는 스크립트입니다.

#!/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)"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.