Mic*_*haw 377 updates package-management security command-line
sudo apt-get upgrade安装所有更新,而不仅仅是安全更新。我知道我可以使用更新管理器仅选择重要的安全更新,但是有没有办法从命令行执行此操作?
blu*_*yed 347
包unattended-upgrades提供了自动安装安全更新的功能。
您可以使用它,但您可以手动调用它,而不是配置自动部分:
sudo unattended-upgrade -d --dry-run
sudo unattended-upgrade -d # Idem --debug
Run Code Online (Sandbox Code Playgroud)
如果你想安静地运行它:
sudo unattended-upgrade
Run Code Online (Sandbox Code Playgroud)
注意:当您调用 unattended-upgrade 时,您将“s”放在最后(在较新的版本中,有一个符号链接可以避免这种情况)。
这假设该包是默认安装的,它可能是。如果没有,只需执行以下操作:
sudo apt install unattended-upgrades
Run Code Online (Sandbox Code Playgroud)
另见/usr/share/doc/unattended-upgrades/README.md。
小智 135
这适用于 Debian 和 Ubuntu,但更具体的 Ubuntu 说明如下。
仅显示安全更新:
apt-get -s dist-upgrade |grep "^Inst" |grep -i securi
Run Code Online (Sandbox Code Playgroud)
或者
sudo unattended-upgrade --dry-run -d
Run Code Online (Sandbox Code Playgroud)
或者
/usr/lib/update-notifier/apt-check -p
Run Code Online (Sandbox Code Playgroud)显示所有可升级包
apt-get -s dist-upgrade | grep "^Inst"
Run Code Online (Sandbox Code Playgroud)仅安装安全更新
apt-get -s dist-upgrade | grep "^Inst" |
grep -i securi | awk -F " " {'print $2'} |
xargs apt-get install
Run Code Online (Sandbox Code Playgroud)笔记:
有时 Ubuntu 会显示安全更新,就好像它们来自 $release-updates 存储库一样。我被告知是这样,因为 Ubuntu 开发人员还将安全更新推送到 $release-updates 存储库,以加快其可用性。
如果是这种情况,您可以执行以下操作以仅显示安全更新:
sudo sh -c 'grep ^deb /etc/apt/sources.list |
grep security > /etc/apt/sources.security.only.list'
Run Code Online (Sandbox Code Playgroud)
和
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'}
Run Code Online (Sandbox Code Playgroud)检查软件包升级后需要重启哪些服务。事先弄清楚您要升级的软件包并安排重新启动/重新启动。这里的问题是,除非您重新启动服务,否则它仍然可能使用旧版本的库(最常见的原因),该库在您安装修复安全漏洞或其他问题的新包之前已加载到内存中。
checkrestart -v
Run Code Online (Sandbox Code Playgroud)
但是,请记住,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
Run Code Online (Sandbox Code Playgroud)Res*_*ssu 46
替换/etc/apt/preferences为以下内容:
Package: *
Pin: release a=lucid-security
Pin-Priority: 500
Package: *
Pin: release o=Ubuntu
Pin-Priority: 50
Run Code Online (Sandbox Code Playgroud)
现在一个简单的apt-get upgrade将只升级所有安全更新。
为什么(以及如何)这是有效的:首选项文件会将 Ubuntu 发行版中的所有软件包固定到优先级 50,这将使它们不如已安装的软件包理想。源自安全存储库的文件具有默认 (500) 优先级,因此可以考虑安装它们。这意味着只有被认为比当前安装的软件包更受欢迎的软件包才是安全更新。apt_preferences 联机帮助页中有关固定的更多信息。
您可以使用--target-release适用于apt-get和aptitude(至少)的选项临时推广某个更新发行版,这将允许您固定某些版本,以便它们有资格进行升级。
如果您只想将它用于脚本而不是系统的默认设置,您可以将规则放在其他位置并使用它:
apt-get -o Dir::Etc::Preferences=/path/to/preferences_file upgrade
Run Code Online (Sandbox Code Playgroud)
这将使 apt 从非默认位置查找首选项文件。
作为示例给出的首选项文件不适用于第三方存储库,如果您也希望固定这些存储库,您可以使用apt-cache policy它轻松确定固定所需的密钥。
vca*_*llo 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";
};
Run Code Online (Sandbox Code Playgroud)
请注意,默认情况下,它是如何配置为仅允许对安全包进行无人值守升级的。
修改文件/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";
Run Code Online (Sandbox Code Playgroud)
这将每天运行一次自动无人值守安全升级。
现在,手动运行:sudo unattended-upgrade。
为了测试作为干运行,没有做任何事情:sudo unattended-upgrade --dry-run。
来源:https : //help.ubuntu.com/14.04/serverguide/automatic-updates.html
小智 12
如果您只想安装安全更新,则可以使用以下方法。首先,它列出所有可升级的软件包,仅过滤掉来自安全存储库的软件包,在第一个字段中剪切返回的字符串,然后将它们传递给 apt-get install 进行软件包更新。
sudo apt list --upgradable | grep security |cut -d\/ -f1|xargs sudo apt-get install -y
Run Code Online (Sandbox Code Playgroud)
在 Debian 上,我使用此命令仅进行安全更新:
apt-get install -y --only-upgrade $( apt-get --just-print upgrade | awk 'tolower($4) ~ /.*security.*/ || tolower($5) ~ /.*security.*/ {print $2}' | sort | uniq )
Run Code Online (Sandbox Code Playgroud)
尽管它非常丑陋,但您可以禁用除安全存储库之外的所有存储库,然后执行以下操作:
sudo apt-get update && sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)
我还没有测试过它,但理论上它只会在安全存储库中找到更新并应用它们......
| 归档时间: |
|
| 查看次数: |
367280 次 |
| 最近记录: |