سؤال كيف يمكنني تثبيت تحديثات الأمان فقط من سطر الأوامر؟


sudo apt-get upgrade يثبت جميع التحديثات ، وليس فقط تحديثات الأمان. أعلم أنه يمكنني استخدام Update Manager لتحديد التحديثات الأمنية الهامة فقط ، ولكن هل هناك طريقة للقيام بذلك من خلال سطر الأوامر؟


287
2017-07-28 22:50


الأصل


لا أعتقد ذلك. ترقية dist يأخذ النظام بأكمله إلى إصدار جديد. أتحدث عن التحديثات اليومية ، مثل التحديثات التي تراها في مدير التحديث. - mac9416
أوه ، أرى ما تقوله الآن. هيه ، أقوم بتشغيل تحديث apt-get في كثير من الأحيان ، أنا اكتبه دون تفكير. وذلك بفضل لرؤساء متابعة! - mac9416
تريد "apt-get dist-upgrade" ، وليس "apt-get upgrade". "dist-upgrade" غير مخصص للإصدارات الجديدة (وهو أمر "do-release-upgrade"). استخدام "dist-upgrade" يعني أنها ستتعامل مع تبعيات التغيير للحزم الجديدة. هذا يمكن أن يكون مهما. - Kees Cook
dist-upgrade هي العملية العادية التي يقوم بها برنامج Update Manager GUI. لحزم مثل النواة حيث يوجد linux-image-generic الحزمة ، اعتمادا على الصورة الحالية ، على سبيل المثال linux-image-3.x.y-zz-generic (كل إصدار منها هو اسم حزمة منفصل) ، سيؤدي ترقية الترقية (التي تسمح بتثبيت الحزم الجديدة لتلبية الاعتماديات) إلى إجراء هذه الترقية ، بينما ستعرض الترقية حزمة النواة كاحتياطي. - chronitis
من المستغرب أنه لا يوجد جيد apt-get تستند إلى هذا ، مع الأخذ في الاعتبار مدى وضوحها في كل خادم - Karthik T


الأجوبة:


حزمة ترقيات غير المراقب يوفر وظائف لتثبيت تحديثات الأمان تلقائيًا.

يمكنك استخدام هذا ، ولكن بدلاً من تكوين الجزء التلقائي يمكنك الاتصال به يدويًا. في هذه الحالة ، يجب أن يفعل ما يلي بهدوء:

sudo unattended-upgrade

أو أكثر من نسخة مطولة ، للتحكم في كيفية سيرها

sudo unattended-upgrade -d

ملاحظة: عند استدعاء الترقية غير المراقب تركت "s" إيقاف النهاية.

هذا يفترض أن يتم تثبيت الحزمة بشكل افتراضي ، وهو على الأرجح. إذا لم يكن كذلك ، فقط قم بما يلي:

sudo apt-get install unattended-upgrades

أنظر أيضا /usr/share/doc/unattended-upgrades/README.md.


268
2017-07-29 17:28



لتعطيل التنفيذ التلقائي لـ unattended-upgrade ربما تحتاج إلى تعديل /etc/cron.daily/apt، ولكن ليس من المؤكد أنها "صحيحة" للقيام بذلك - Jaime Hablutzel
ملاحظة جانبية: لخادم Ubuntu 12.04.5 LTS ، unattended-upgrades غير مثبت بشكل افتراضي. - Raptor
بما أنك تقوم بذلك من سطر الأوامر ، استخدمه -v لرسائل المعلومات أو -d لرسائل التصحيح. وإلا ستكون الأداة صامتة للغاية ، وفي هذه الحالة ستحتاج إلى التحقق من السجلات /var/log/unattended-upgrades. تستطيع ايضا استخذام --dry-run لمحاكاة ولكن لا ترقية في الواقع أي شيء. لمزيد من المعلومات والخيارات الأخرى ، استخدم --help للحصول على رسالة المساعدة. - ADTC
تعلمت بعض الأشياء unattended-upgrades اليوم. شكر! - the0ther
"لرصد كيف تسير الأمور" ، فمن مجرد تصحيح رسائل غير تفاعلية أليس كذلك؟ - Aquarius Power


بعض النصائح حول كيفية إدارة التحديثات

ينطبق ذلك على كل من 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 تحديثات الأمان كما لو كانت قادمة من مستودع تحديثات الإصدارات $. قلت ذلك ، لأنني ، لأن مطوري أوبونتو يدفعون التحديثات الأمنية إلى مستودع تحديثات الإصدارات $ وكذلك لتسريع توافرها.

    إذا كان الأمر كذلك ، فيمكنك القيام بما يلي لعرض تحديثات الأمان فقط:

    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 تم حذفه بالفعل ، وهو ليس سببًا صالحًا لإعادة تشغيل الخدمة.

    لذلك ، هناك طريقة أخرى أكثر موثوقية للتحقق من هذا باستخدام utiles القياسية هي البرنامج النصي bash القليل التالي الذي سرقه بلا خجل من https://locallost.net/؟p=233

    ويتحقق ما إذا كانت عمليات التشغيل على نظام ما تزال تستخدم مكتبات محذوفة بحفظ نسخ من تلك الموجودة في الذاكرة النشطة.

    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



ألاحظ الآن فقط هذا المنصب. انها دقيقة للغاية. شكرًا جزيلاً (+1) - Danduk82
من أين تأتي "checkrestart"؟ لا أستطيع العثور عليه في Ubuntu Trusty. لقد وجدت "needrestart" التي يبدو أنها ستناسب تعليماتك؟ - Ben XO
يمكن العثور عليها في حزمة debi-goodies: packages.debian.org/wheezy/debian-goodies. هناك أيضا needrestart. يمكنك العثور على كل من Xenial عن طريق تشغيل: $ apt-cache search checkrestart - ILIV
أحصل على "E: لا يمكن فتح ملف القفل / var / lib / dpkg / lock - open (13: تم رفض الإذن)" حتى مع sudo. هل هذا شيء محدد لأحد التحديثات أو الأوامر التي قدمتها؟ - Nathan Hornby
على الأرجح يتعلق الأمر بإنهاء dpkg غير صحيح / غير طبيعي أدى إلى عدم إزالة ملف القفل. لا يحدث عادة حتى ، على سبيل المثال ، لا ينتهي تثبيت الحزمة بنجاح (القرص الكامل ، إلخ.) ربما لا يمكنك تشغيل أوامر apt-get و dpkg أخرى ، أليس كذلك؟ - ILIV


يحل محل /etc/apt/preferences كالآتي:

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

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

الآن بسيط apt-get upgrade سيقوم بتحديث كافة التحديثات الأمنية فقط.

لماذا (وكيف) يعمل هذا: سيقوم ملف التفضيلات بتثبيت جميع الحزم من توزيعة أوبونتو إلى الأولوية 50 ، مما يجعلها أقل رغبة من الحزم المثبتة بالفعل. يتم إعطاء الملفات التي تنشأ من مستودع الأمان الأولوية الافتراضية (500) بحيث يتم اعتبارها للتثبيت. هذا يعني أن الحزم التي تعتبر أكثر مرغوبة من الحزم المثبتة حالياً هي تحديثات الأمان. مزيد من المعلومات حول تثبيت في apt_preferences manpage.

يمكنك الترويج مؤقتًا لتوزيع معيّن للتحديثات مع --target-release الخيار الذي يعمل مع apt-get و aptitude (على الأقل) مما يسمح لك بتثبيت إصدارات معينة بحيث تكون مؤهلة للترقية.

إذا كنت ترغب في استخدام هذا للنصوص البرمجية فقط ولا تجعله افتراضيًا للنظام ، فيمكنك وضع القواعد في موقع آخر واستخدامها بدلاً من ذلك:

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

هذا سيجعل نظرة ملائمة لملف التفضيلات من موقع غير افتراضي.

لا ينطبق ملف التفضيلات المقدم كمثال على مستودعات الطرف الثالث ، إذا كنت ترغب في تثبيت هذه الملفات أيضًا ، يمكنك استخدامها apt-cache policy لتحديد المفاتيح المطلوبة للتثبيت بسهولة.


46
2017-07-29 04:12



شكرا لأخذ الوقت للحصول على إجابة دقيقة. أنا يفكر أنا أفهم كيف يعمل. ولكن عند إنشاء ملف / etc / apt / preferences وتشغيل ترقية apt-get ، فإنها تريد ترقية جميع الحزم ، وليس فقط تحديثات الأمان. ترقية القائمة قبل وبعدها هي نفسها تمامًا ، إلا مع / etc / apt / preferences لا ترغب في ترقية Leafpad ، التي قمت بإنشائها من المصدر وتثبيتها "باليد" مع dpkg. إنه أمر غريب بالنسبة لي ، لكنه قد يعني شيئًا لك. - mac9416
يمكنك رؤية ما يحدث مع أمر سياسة apt-cache. اختر إحدى الحزم التي لا تحصل على إصلاح أمان وتشغيلها apt-cache policy packagename. هذا سوف يسرد الأولويات للإصدارات المختلفة. يجب أن ترى مختلف الخطوط والأولويات المختلفة. إذا لم تكن هناك سطور تحمل الأولوية 50 ، فلن يؤثر التثبيت على الحزم المعنية لسبب ما. - Ressu
كنت قد اتبعت هذه الإجابة في الماضي. اليوم اكتشفت أنه بسبب هذه الإجابة ، لم يتم تثبيت 68 حزمة تحديث أمان على الخادم الخاص بي ولم تظهر كمرشحين محتملين لتثبيت. هذه ليست إجابة جيدة! - Shade


تم تأكيد ما يلي في 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


9
2017-10-03 17:18



هل هناك طريقة لجعل هذا جدول شهري؟ - mike.b93
@ mike.b93 ، أعتقد الإعداد APT::Periodic::Unattended-Upgrade "30"; سنفعل هذا - كل 30 يومًا. - vcardillo


على الرغم من أنه قبيح جدا ، يمكنك تعطيل جميع المستودعات بغض النظر عن مستودع الأمان ثم القيام بما يلي:

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

لم أختبره ، ولكن من الناحية النظرية فإنه سيجد فقط التحديثات في ريبو الأمن وتطبيقها ...


5
2017-07-29 00:00



نعم ، هذا احتمال. سانظر بداخلها. أنا لست جيدًا في BASH ، ولكن قد أحاول إنشاء نص برمجي للقيام بذلك. - mac9416
حسنًا ، لقد عطلت كل ما عدا نظام التشغيل الآمن لـ Ubuntu وركضت sudo apt-get update && sudo apt-get upgrade (إلغاء قبل أي ترقيات تم القيام به). ثم أعدت تمكين كل ما عندي من repos ، ركض sudo apt-get updatee، وفتح مدير التحديث. الحافظات التي تم وضع علامة عليها كتحديثات أمنية لم تكن بالضبط apt-get upgrade وجدت ، لكنها كانت قريبة جدا بما يكفي بالنسبة لي. ما زلت أتمنى لو كنت أعرف بالضبط كيف يفعل ذلك مدير التحديث وكيف نفعل الشيء نفسه من سطر الأوامر ، ولكن هذا سيفعل. شكر! - mac9416


  • apt-get update: فقط قم بقراءة الإدخالات في المستودع - حسب القائمة الموجودة. مطلوب للتحقق ما هو جديد.
  • apt-get upgrade: جميع التحديثات للحزم المثبتة بدون وحدات kernel. لا تحديث الإصدار.
  • apt-get dist-upgrade: جميع التحديثات للحزم المثبتة أيضا مع وحدات النواة. لا تحديث الإصدار.
  • apt-get مع المعلمة -s: اختبار فقط ، أي تغييرات أجريت.

3
2017-08-02 09:49





لا أستطيع العثور على خيار في apt-get أو aptitude ، ومع ذلك كان هناك شخص ما نفس السؤال على SuperUser. الرد الوحيد هو:

تحقق وضبط /etc/apt/apt.conf.d/50 بدون رقابة. هل استبدلت "karmic" بالاسم الرمزي لـ Ubuntu؟

لا يوجد رد على ما إذا كان ذلك يعمل على أية حال.


0
2017-07-28 23:04



يبدو أن الطريقة الموضحة في صفحة wiki هذه تعتمد على إعداد وسيطة aptitude --Target-release إلى <release> -security. مثل OP في هذا السؤال ، تقوم هذه الطريقة بتثبيت جميع الترقيات ، وليس فقط ترقيات الأمان. عند قراءة صفحات apt-get و aptitude man ، لا أعتقد أن حجة الإصدار -Target حتى يقصد منها الحد من ترقيات الأمن فقط ، على الرغم من أنني لست متأكدًا من ذلك هو إلى عن على. - mac9416