前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ubuntu Server 第三章 包管理

Ubuntu Server 第三章 包管理

作者头像
天钧
发布2019-07-26 16:39:59
8590
发布2019-07-26 16:39:59
举报
文章被收录于专栏:渗透云笔记渗透云笔记

我们说到Linux的时候,所指代的意义是不同的,一般认为Linux指的是Linux内核,而Linux内核是硬件系统向上对应用提供接口的一个中间层,本质上Linux内核也是一个应用,不过该应用面向的是硬件与其他应用。在操作系统中,我们经常接触到一个词,"库文件",Linux下有".so"结尾的库文件,Windows下有".dll"结尾的库文件。库文件的存在是为了方便开发者开发应用,。对下层调用硬件资源,对上层提供友好的开发接口,使开发应用降低复杂度,也能实现功能。

那么一个Linux发行版和Linux内核是什么关系呢?

Linux发行版是把内核、库文件、命令行shell、图形接口、其它应用软件包共用组成一个发行版的操作系统,

库文件和驱动程序是其它应用必须依赖的,依赖缺失或者被破坏和修改,应用都无法运行。这种依赖关系有的一层层的依赖形成一个庞大以树形依赖结构,为了管理这种依赖关系,引入了包管理的概念。

包管理除了能解决软件的安装、删除、更新、配置修改,还需要提供其它软件的依赖(包管理提供一套自己的稳定的依赖),。

不同发行版之间的依赖关系是不同的,建议使用发行版官方提供的包管理工具,以免依赖关系出现冲突。包管理的同时还节省的存储空间,使同一个依赖只安装一次(避免重复造轮子)。

为什么Windows下没有这么多依赖问题呢?我日常使用中其实也遇见dll缺少的时候,一般找到官方提供的dll即可解决。Windows都是由微软发行并提供维护,而LInux的发行版太多。

0x01 软件包

常见的Liunx软件格式有RPM(Redhat)、DEB(Ubuntu继承于Debian Linux),在前面第二章时我们讲过Tar、Gzip等的打包压缩源代码发布,这种打包只是多个文件的集合,不具有文件执行的功能,而RPM和DEB格式的文件里通常包含以下三种内容:

  • Meta-data:数据的元数据,提供最终包中全部文件的功能
  • 预编译的可执行二进制程序文件(非源码)
  • 配置脚本

为了维护软件包,官方包所有的包都放在官方仓库(Repositories)里,官方提供封闭但保证质量的软件包来源,例如某水果企业也是同样的。作为用户,我们需要慎用第三方软件仓库。

0x02 包管理工具

Dpkg本地包管理器

Dpkg可是本地安装、删除、创建Deb包,注意我说的是本地,也就是说它不依赖软件仓库、不自动检索和下载软件包,甚至不能解决前面提到的依赖关系。

代码语言:javascript
复制
dpkg -l #查看本地的包
dpkg -L 包名 #列出包在本地安装的所有文件
dpkg -r 包名 #卸载软件包
dpkg -P 包名 #卸载软件包的同时删除配置文件
dpkg --print-architecture #查看当前架构,常见的为64(AMD64)和32为(I386)
dpkg --print-foreign-architectures #查看其它支持的架构
这个信息来源于"/var/lib/dpkg/arch ",也就是说其实可以修改显示的信息。
dpkg --remove-architecture 架构 #删除架构

0x03 APT包管理器

APT包管理器是Ubuntu官方提供的包管理工具,和上面的Dpkg一样,安装、卸载、更新甚至包括整个操作系统的所有软件包,安装过程中,还能自动解决依赖问题,基于索引更新软件包。APT包管理器的工作流程包含两个部分,

  • 更新索引,索引可理解为一份清单,上面列出了软件包的名字、版本、架构、依赖关系等
  • 更新软件包,根据索引像官方仓库请求软件包与安装
代码语言:javascript
复制
apt update # 更新索引,非root加"sudo"
vim /etc/apt/sources.list #如果想提高速度,推荐使用国内知名镜像源,注释官方源修改此文件内容。
ls /etc/apt/sources.list.d #一般是存放第三方源文件
apt list --upgradable #查看可以更新的软件包
apt upgrade #根据索引下载软件包并安装,并自动解决依赖
apt dist-upgrade #上面的命令不增加和删除新包,而这条命令会更新新包,删除旧包(包括内核)
apt instll 包名 #安装软件包
apt remove 包名 --purge / apt purge 包名 #删除包及其配置文件
/var/log/dpkg.log #包含安装或dpkg命令清楚软件包的日志
apt search "name" #通过关键词搜索包
apt show name #显示包信息
apt autoremove #自动删除不再需要的包(在进行内核更新的时候,使用此命令会删除旧内核,有可能出现依赖问题)
ls /var/cache/apt/archives #下载的deb包位置
ls /var/lib/apt/ #此目录保存着从更新源更新的索引文件
apt download 包名 #下载软件包的源码
apt sorece 报名 #下载软件包的Deb文件和源码和其它文件
apt showsec 包名 #显示包信息

0x04 自动更新

作为企业的系统管理员或者服务器管理员,需要管理数量庞大的服务器时,无人值守就是提高工作效率的好方法,

我们需要做的安装无人值守的安装包,修改配置文件。

代码语言:javascript
复制
apt install unattended-upgrades
lsb_release -a  #查看当前的系统版本与Codename,权限不够加"sudo"
/etc/apt/apt.conf.d/50unattended-upgrades #unattended-upgrades的配置文件(更新内容),企业生成坏境中一般选择只更新安全更新,而不进行通用更新和扩展性更新。
/etc/apt/apt.conf.d/10periodic #更新索引、下载软件包、自动清理软件包、自动安装的时间配置文件,单位为天
service unattended-upgrades restart #Ubuntu中的应用基本为这个套路,安装、修改配置文件、重启服务配置生效
sysystemctl restart unattended-upgrades.service #新版的Ubuntu采用Systemctl来管理服务
ls /var/log/unattended-upgrades #日志记录位置

每天登录服务器,打开日志文件,有点繁琐,有没有更好的解决无人值守通知的问题呢?有两种方法

代码语言:javascript
复制
/etc/apt/apt.conf.d/50unattended-upgrades #在这个配置文件中,搜索emaiL字段,删除"//",可以修改为天更新的日志发送到管理员邮箱,或者出现错误再发送到管理员邮箱,关于邮件服务我们使用邮件服务再介绍
apt install apticron #除了上面修改配置文件,还可以使用该应用来实现效果
vi /etc/apticron/apticron.conf #配置文件路径

0x05 APT 更新配置

代码语言:javascript
复制
vim /etc/apt/sources.list #APT更新源配置文件,如果包含CDrom源的话,注释掉
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multivers #一般格式是这样,第一列注明二进制安装包或者源码包(deb/deb-src),第二列为库的URL地址,第三列是操作系统的codename,第四列是库的内容构成、以及是否官方支持

第四列的选项含义

  • Main:官方支持的,包含源码,官方维护Bug
  • Restricted :官方支持,非开源许可
  • Universe :社区支持
  • Multiverse :既不开源也不支持,自行承担风险,

第三方库

我们推荐使用官方软件库,但有时候因为不同的原因官方软件库还没有支持,这个时候需要用到第三方的软件库,建议为每个第三方库创建独立的源".list"文件(/etc/apt/source.list.d)。第三方的安全性也指的考虑,Ubntu也提供的一种校验机制,使用GnuPG Key来进行验证,GnuPG 是一个公开的密钥管理系统。安装第三方时,可以先获取第三方的key,导入到系统中,更新索引,

代码语言:javascript
复制
add-apt-repository URL #添加第三方源,数据会存放在"/etc/apt/sources.list.d/"下,
apt-key add keyname #导入key到本地trsted数据库中
apt-key keyname #卸载第三方时,把不需要的key也删除
apt-get update #更新索引之后,即可开始使用第三方库

Personal Package Archive (PPA)

上面的第三方库,使用者基本属于企业或机构,对于个人开发者来说,开发兼顾第三方库服务器的管理太过繁琐。所以Ubuntu官方也推出了个人软件包归档,官方提供服务器,存储空间与维护,PPA中的软件包是没有经过审核的,软件是由个人发布于维护。PPA库本质上是另外一种形式的APT软件库,命令和第三方库类似,这里不做演示。

0x06 SNAP包管理

前面讲述了APT包管理工具的这么特性,存在着以下些缺点

  • 系统版本升级之后,旧版本的软件库基本冻结(安全补丁除外)
  • 为了维护一致的包和库的依赖关系无法安装最新版软件

对于个人来说,升级系统备份好数据还是可以接受的,企业生产环境中升级系统的决定非常困难,SNAP就是为了解决这一问题而诞生的工具

  • SNAP包管理独立于官方仓库
  • 可分发不属于官方库的软件版本
  • 软件安装使用不受操作系统包和库依赖关系的影响
  • SNap包内建了与发行版不兼容的库,以解决依赖关系

但是现在我们使用的最多的还是APT包管理,苑老师非常看好这款工具的发展O(∩_∩)O哈哈~

代码语言:javascript
复制
apt install snap #安装Snap
snap find name #查找软件包
snap install name #安装软件包
snap remove name #删除软件包
snap refresh name #更新软件包,不加包名执行是更新snap的索引

Snap安装的软件包均独立存在(运行环境和依赖都是独立的),目前为止,推荐Snap作为APT的一个重要补充。

0x07 参考链接

Ubuntu Server 从入门到精通

GnuPG

/VAR/LOG/各个日志文件分析

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 渗透云笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01 软件包
  • 0x02 包管理工具
    • Dpkg本地包管理器
      • 0x03 APT包管理器
      • 0x04 自动更新
      • 0x05 APT 更新配置
      • 0x06 SNAP包管理
      • 0x07 参考链接
      相关产品与服务
      密钥管理系统
      密钥管理系统(Key Management Service,KMS)是一款安全管理类服务,可以让您轻松创建和管理密钥,保护密钥的保密性、完整性和可用性,满足用户多应用多业务的密钥管理需求,符合合规要求。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档