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


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.