Câu hỏi Làm thế nào tôi có thể cài đặt các bản cập nhật bảo mật từ dòng lệnh?


sudo apt-get upgrade cài đặt tất cả các bản cập nhật, không chỉ cập nhật bảo mật. Tôi biết rằng tôi có thể sử dụng Trình quản lý cập nhật để chỉ chọn các bản cập nhật bảo mật quan trọng, nhưng có cách nào để thực hiện điều này từ dòng lệnh không?


287
2017-07-28 22:50


gốc


Tôi không nghĩ vậy. dist-upgrade đưa toàn bộ hệ thống lên bản phát hành mới. Tôi đang nói về các bản cập nhật hàng ngày, như các bản cập nhật bạn thấy trong Trình quản lý cập nhật. - mac9416
Ồ, tôi thấy những gì bạn đang nói bây giờ. Heh, tôi chạy apt-get update thường xuyên, tôi gõ nó mà không cần suy nghĩ. Cảm ơn cho những người đứng đầu lên! - mac9416
Bạn muốn "apt-get dist-upgrade", không phải "apt-get upgrade". "dist-upgrade" không dành cho các bản phát hành mới (đó là "do-release-upgrade" một lệnh riêng biệt). Sử dụng "dist-upgrade" có nghĩa là nó sẽ xử lý các phụ thuộc thay đổi của các gói mới. Điều này có thể quan trọng. - Kees Cook
dist-upgrade là hoạt động bình thường được thực hiện bởi GUI của Trình quản lý cập nhật. Đối với các gói như hạt nhân, nơi có linux-image-generic gói, tùy thuộc vào hình ảnh hiện tại, ví dụ linux-image-3.x.y-zz-generic (mỗi phiên bản trong đó là một tên gói riêng biệt), dist-upgrade (cho phép các gói mới được cài đặt để đáp ứng các phụ thuộc) sẽ thực hiện nâng cấp này, trong khi nâng cấp sẽ hiển thị gói hạt nhân như được giữ lại. - chronitis
Đáng ngạc nhiên là không có tốt apt-get dựa trên câu trả lời cho điều này, xem xét cách nổi bật nó được liệt kê trên mỗi máy chủ - Karthik T


Các câu trả lời:


Gói không giám sát-nâng cấp cung cấp chức năng tự động cài đặt các bản cập nhật bảo mật.

Bạn có thể sử dụng nó, nhưng thay vì cấu hình phần tự động, bạn có thể gọi nó bằng tay. Đối với trường hợp này, sau đây nên làm điều đó một cách lặng lẽ:

sudo unattended-upgrade

hoặc phiên bản chi tiết hơn, để kiểm soát cách nó

sudo unattended-upgrade -d

LƯU Ý: Khi bạn gọi không cần giám sát-nâng cấp bạn rời khỏi "s" ra khỏi cuối.

Điều này giả định rằng các gói phần mềm được cài đặt theo mặc định, mà nó có thể là. Nếu không, chỉ cần làm:

sudo apt-get install unattended-upgrades

Xem thêm /usr/share/doc/unattended-upgrades/README.md.


268
2017-07-29 17:28



Để vô hiệu hóa việc thực thi tự động unattended-upgrade bạn có thể cần sửa đổi /etc/cron.daily/apt, nhưng không chắc nó là "đúng" để làm như vậy - Jaime Hablutzel
lưu ý phụ: cho máy chủ LTS Ubuntu 12.04.5, unattended-upgrades không được cài đặt theo mặc định. - Raptor
Vì bạn đang làm điều này từ dòng lệnh, sử dụng -v cho tin nhắn thông tin hoặc -d để gỡ lỗi tin nhắn. Nếu không, tiện ích sẽ rất im lặng, trong trường hợp đó bạn sẽ cần kiểm tra nhật ký /var/log/unattended-upgrades. Bạn cũng có thể dùng --dry-run để mô phỏng nhưng không thực sự nâng cấp bất cứ thứ gì. Để biết thêm thông tin và các tùy chọn khác, hãy sử dụng --help để nhận được thông báo trợ giúp. - ADTC
tôi đã học được một vài điều về unattended-upgrades hôm nay. cảm ơn! - the0ther
"để theo dõi cách nó đi", nó chỉ là gỡ lỗi các thông điệp không tương tác phải không? - Aquarius Power


Một vài lời khuyên về cách quản lý cập nhật

Điều này áp dụng cho cả Debian và Ubuntu, nhưng hướng dẫn cụ thể hơn cho Ubuntu theo sau.

  • Chỉ hiển thị cập nhật bảo mật:

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

    hoặc là

    sudo unattended-upgrade --dry-run -d
    

    hoặc là

    /usr/lib/update-notifier/apt-check -p
    
  • Hiển thị tất cả các gói có thể nâng cấp

    apt-get -s dist-upgrade | grep "^Inst"
    
  • Chỉ cài đặt bản cập nhật bảo mật

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

Ghi chú: 

  • Đôi khi Ubuntu hiển thị các bản cập nhật bảo mật như thể chúng đến từ kho lưu trữ bản phát hành $ update. Điều này là như vậy, tôi đã nói, bởi vì các nhà phát triển Ubuntu đẩy các bản cập nhật bảo mật vào kho phát hành bản cập nhật $ cũng như để đẩy nhanh tính khả dụng của chúng.

    Nếu đúng như vậy, bạn có thể thực hiện các thao tác sau để chỉ hiển thị cập nhật bảo mật:

    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'}
    
  • Kiểm tra dịch vụ nào cần được khởi động lại sau khi nâng cấp gói. Tìm ra những gói bạn sẽ nâng cấp trước và lên lịch khởi động lại / khởi động lại. Vấn đề ở đây là trừ khi bạn khởi động lại một dịch vụ, nó vẫn có thể đang sử dụng một phiên bản cũ của thư viện (lý do phổ biến nhất) được tải vào bộ nhớ trước khi bạn cài đặt gói mới để sửa lỗi bảo mật hoặc bất kỳ thứ gì.

    checkrestart -v
    

    Tuy nhiên, hãy nhớ rằng checkrestart có thể liệt kê các quy trình không nhất thiết phải được khởi động lại. Ví dụ, dịch vụ PostgreSQL có thể được giữ trong tham chiếu bộ nhớ của nó đến một tập tin xlog đã bị xóa, mà không phải là một lý do hợp lệ để khởi động lại dịch vụ.

    Do đó, cách khác, đáng tin cậy hơn, để kiểm tra điều này bằng cách sử dụng utils tiêu chuẩn là tập lệnh bash nhỏ mà tôi không biết xấu hổ https://locallost.net/?p=233

    Nó sẽ kiểm tra xem các tiến trình đang chạy trên một hệ thống vẫn đang sử dụng các thư viện đã xóa do có giữ bản sao của các bộ nhớ trong bộ nhớ hoạt động hay không.

    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
    

104
2017-11-16 11:35



Tôi chỉ nhận thấy bây giờ bài đăng này. Nó là cực kỳ chính xác. Cảm ơn rất nhiều (+1) - Danduk82
'checkrestart' đến từ đâu? Tôi không thể tìm thấy nó trong Ubuntu Trusty. Tôi đã tìm thấy "needrestart" có vẻ như nó sẽ phù hợp với hướng dẫn của bạn? - Ben XO
Nó có thể được tìm thấy trong gói debian-goodies: packages.debian.org/wheezy/debian-goodies. Ngoài ra còn có nhu cầu cần thiết. Bạn có thể tìm thấy cả trên Xenial bằng cách chạy: $ apt-cache search checkrestart - ILIV
Tôi nhận được "E: Không thể mở tập tin khóa / var / lib / dpkg / lock - mở (13: Quyền bị từ chối)" ngay cả với sudo. Đây có phải là một cái gì đó cụ thể cho một trong các bản cập nhật hoặc các lệnh bạn đã cung cấp? - Nathan Hornby
Rất có thể đó là về việc chấm dứt không chính xác / bất thường của dpkg để lại một tập tin khóa không rõ ràng. Không xảy ra bình thường cho đến khi, ví dụ: cài đặt một gói không kết thúc thành công (đĩa đầy đủ, vv) Bạn có thể không chạy các lệnh apt-get và dpkg khác, có thể không? - ILIV


thay thế /etc/apt/preferences với những điều sau đây:

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

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

bây giờ là một đơn giản apt-get upgrade sẽ chỉ nâng cấp tất cả các bản cập nhật bảo mật.

Tại sao (và làm thế nào) công trình này: Các tập tin ưu đãi sẽ pin tất cả các gói từ phân phối Ubuntu đến ưu tiên 50, mà sẽ làm cho họ ít mong muốn hơn so với các gói đã được cài đặt. Các tệp có nguồn gốc từ kho lưu trữ bảo mật được ưu tiên mặc định (500) để chúng được xem xét để cài đặt. Điều này có nghĩa rằng chỉ những gói được coi là hấp dẫn hơn những gói hiện được cài đặt là bản cập nhật bảo mật. Thông tin thêm về ghim trong apt_preferences manpage.

Bạn có thể tạm thời quảng bá phân phối nhất định cho các bản cập nhật bằng --target-release tùy chọn hoạt động với apt-get và aptitude (ít nhất) sẽ cho phép bạn ghim một số bản phát hành để chúng đủ điều kiện để nâng cấp.

Nếu bạn chỉ muốn sử dụng lệnh này cho các tập lệnh và không làm cho nó mặc định cho hệ thống, bạn có thể đặt các quy tắc vào một số vị trí khác và sử dụng nó thay vì:

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

Điều này sẽ làm cho apt tìm kiếm tệp tùy chọn từ một vị trí không mặc định.

Tệp tùy chọn được đưa ra dưới dạng ví dụ không áp dụng cho kho lưu trữ của bên thứ ba, nếu bạn muốn ghim những thứ đó, bạn có thể sử dụng apt-cache policy để dễ dàng xác định các khóa cần thiết để ghim.


46
2017-07-29 04:12



Cảm ơn bạn đã dành thời gian cho một câu trả lời kỹ lưỡng. tôi suy nghĩ Tôi hiểu cách nó hoạt động. Nhưng khi tôi tạo tệp / etc / apt / preferences và chạy apt-get upgrade, nó muốn nâng cấp tất cả các gói, không chỉ các bản cập nhật bảo mật. Danh sách nâng cấp trước và sau là chính xác như nhau, ngoại trừ với / etc / apt / preferences nó không muốn nâng cấp Leafpad, mà tôi xây dựng từ nguồn và cài đặt "bằng tay" với dpkg. Nó rất lạ với tôi, nhưng có thể có ý nghĩa gì đó với bạn. - mac9416
Bạn có thể xem những gì đang xảy ra với lệnh apt-cache policy. Chọn một trong các gói không nhận được bản sửa lỗi bảo mật và chạy apt-cache policy packagename. Điều này sẽ liệt kê các ưu tiên cho các phiên bản khác nhau. Bạn sẽ thấy các dòng khác nhau và các ưu tiên khác nhau. Nếu không có dòng nào có mức ưu tiên 50, việc ghim không ảnh hưởng đến các gói được đề cập vì một lý do nào đó. - Ressu
Tôi đã theo dõi câu trả lời này trong quá khứ. Hôm nay tôi phát hiện ra rằng do câu trả lời này, 68 gói cập nhật bảo mật đã không được cài đặt trên máy chủ của tôi và không hiển thị như là ứng cử viên cài đặt tiềm năng. Đây không phải là một câu trả lời hay! - Shade


Sau đây được xác nhận trong Ubuntu 14.04 LTS.

Sử dụng unattended-upgrade gói.

Nhìn vào tập tin /etc/apt/apt.conf.d/50unattended-upgrades. Nên có một phần ở trên cùng là:

// 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";
};

Lưu ý cách nó đã được cấu hình để chỉ cho phép nâng cấp không cần giám sát cho các gói bảo mật, theo mặc định.

Sửa đổi tệp /etc/apt/apt.conf.d/10periodic tương tự như:

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

Điều này sẽ chạy nâng cấp bảo mật tự động không giám sát, một lần mỗi ngày.

Bây giờ, để chạy thủ công: sudo unattended-upgrade.

Để kiểm tra như một khô chạy, mà không làm bất cứ điều gì: sudo unattended-upgrade --dry-run.

Nguồn: https://help.ubuntu.com/14.04/serverguide/automatic-updates.html


9
2017-10-03 17:18



Có cách nào để thực hiện lịch biểu hàng tháng này không? - mike.b93
@ mike.b93, tôi tin rằng cài đặt APT::Periodic::Unattended-Upgrade "30"; Làm điều này - cứ 30 ngày một lần. - vcardillo


Mặc dù nó khá xấu xí, bạn có thể vô hiệu hóa tất cả các kho lưu trữ ngoài kho lưu trữ bảo mật và sau đó thực hiện:

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

Tôi đã không thử nghiệm nó, nhưng về mặt lý thuyết nó sẽ chỉ tìm thấy bản cập nhật trong repo an ninh và áp dụng chúng ...


5
2017-07-29 00:00



Vâng, đó là một khả năng. Tôi sẽ xem xét nó. Tôi không giỏi BASH, nhưng tôi có thể cố gắng tạo một kịch bản để làm điều đó. - mac9416
OK, tôi đã vô hiệu hóa tất cả trừ bản repos bảo mật của Ubuntu và chạy sudo apt-get update && sudo apt-get upgrade (hủy trước khi thực hiện bất kỳ nâng cấp nào). Sau đó, tôi bật lại tất cả các bản repo của mình, chạy sudo apt-get updateevà mở Trình quản lý cập nhật. Các gói được đánh dấu là bản cập nhật bảo mật không chính xác apt-get upgrade tìm thấy, nhưng chúng rất gần - đủ gần cho tôi. Tôi vẫn muốn tôi biết chính xác như thế nào Update Manager hiện nó và làm thế nào để làm tương tự từ dòng lệnh, nhưng điều này sẽ làm. Cảm ơn! - mac9416


  • apt-get update: chỉ cần đọc các mục trong kho - theo danh sách hiện có. Cần kiểm tra những gì mới.
  • apt-get upgrade: tất cả các bản cập nhật cho các gói đã cài đặt không có mô-đun hạt nhân. Không có bản cập nhật phát hành.
  • apt-get dist-upgrade: tất cả các bản cập nhật cho các gói đã cài đặt cũng có các mô-đun hạt nhân. Không có bản cập nhật phát hành.
  • apt-get với thông số -s: chỉ kiểm tra, không có thay đổi nào được thực hiện.

3
2017-08-02 09:49





Tôi không thể tìm thấy một tùy chọn trong apt-get hoặc aptitude, tuy nhiên ai đó có cùng một câu hỏi trên SuperUser. Câu trả lời duy nhất là:

Kiểm tra và điều chỉnh /etc/apt/apt.conf.d/50unattended-upgrade. Bạn đã thay thế 'karmic' bằng tên mã của Ubuntu chưa?

Không có câu trả lời là liệu việc đó có hiệu quả hay không.


0
2017-07-28 23:04



Dường như phương pháp được mô tả trong trang wiki đó phụ thuộc vào việc thiết lập đối số -target-release của aptitude thành <release> -ecurity. Giống như OP của câu hỏi đó, phương pháp đó cài đặt tất cả các nâng cấp, không chỉ nâng cấp bảo mật. Đọc các trang người dùng apt-get và aptitude, tôi không nghĩ rằng đối số -target-release thậm chí còn có ý định hạn chế nâng cấp lên chỉ bảo mật, mặc dù tôi không chắc nó là gì Là cho. - mac9416