目前主流 Linux distribution 使用的软件管理机制,大概是底下两种:
distribution 代表 | 软件管理机制 | 使用指令 | 在线升级方案(指令) |
Red Hat/Fedora | RPM | rpm, rpmbuild | YUM (yum, dnf) |
Debian/Ubuntu | DPKG | dpkg | APT (apt-get) |
CentOS 为 Red Hat 的一支,因此也是使用 RPM 的软件管理机制。
RPM 全名是『 RedHat Package Manager 』简称则为 RPM 。 顾名思义,当初这个软件管理的机制是由 Red Hat 这家公司发展出来的。 RPM 是以一种数据库记录的方式来将你所需要的软件安装到你的 Linux 系统的一套管理机制。
他最大的特点就是将你要安装的软件先编译过, 并且打包成为 RPM 机制的包装档案,通过包装好的软件里头预设的数据库记录, 记录这个软件要安装的时候必须具备的相依属性软件,当安装在你的 Linux 主机时, RPM 会先依照软件里头的数据查询 Linux 主机的相依属性软件是否满足, 若满足则予以安装,若不满足则不予安装。 那么安装的时候就将该软件的信息整个写入 RPM 的数据库中,以便未来的查询、验证与反安装! 这样一来的优点是:
由于已经编译完成并且打包完毕,所以软件传输与安装上很方便 (不需要再重新编译);
由于软件的信息都已经记录在 Linux 主机的数据库上,很方便查询、升级与反安装
如果用户想要自行修改 RPM 内的软件参数时,就需要通过含有源代码在内的 SRPM 来处理。
RPM 的软件命名方式
一般来说,RPM 软件的命名有其一定的规则,以 chrony-3.5-1.el8.x86_64.rpm 来说明:
chrony - 3.5 - 1 .el8.x86_64 .rpm 軟體名稱 軟體的版本資訊 釋出的次數 適合的硬體平台 副檔名
除了后面适合的硬件平台与扩展名外,主要是以'-'来隔开各个部分,这样子可以很清楚的发现该软件的名称、 版本信息、打包次数与操作的硬件平台! 较为特殊的是'适合的硬件平台'项目。
由于 RPM 可以适用在不同的操作平台上,但是不同的平台设定的参数还是有所差异性! 并且,我们可以针对比较高端的CPU来进行优化参数的设置, 这样才能够使用高端CPU所带来的硬件加速功能。 所以就有所谓的i386, i586, i686, x86_64 与 noarch 等的文件名称出现。
RPM 的优点
由于 RPM 是通过预先编译并打包成为 RPM 文件格式后,再加以安装的一种方式,并且还能够进行数据库的记载。 所以 RPM 有以下的优点:
RPM 内含已经编译过的程序与配置文件等资料,可以让使用者免除重新编译的困扰;
RPM 在被安装之前,会先检查系统的硬盘容量、操作系统版本等,可避免档案被错误安装;
RPM 文件本身提供软件版本信息、相依属性软件名称、软件用途说明、软件所含档案等信息,便于了解软件;
RPM 管理的方式使用数据库记录 RPM 文件的相关参数,便于升级、移除、查询与验证。
不过,由于软件彼此之间可能会有相关性的问题,因此 RPM 有所谓的'软件相依'的情况,亦即某些底层软件没有安装时, 上层软件安装会失败的问题。
RPM 属性相依的克服方式: YUM 在线升级
既然 RPM 已经内置了软件相依的状态, yum 则主动的分析 RPM 软件的属性相依问题,并做成列表列表,当管理员想要安装某个软件时, yum 机制即可立即根据列表来了解底层软件是否已经安装,若未安装则开始相依属性克服,将所有需要的软件一口气进行安装的动作。
以CentOS为例,CentOS通过 (1)先将释出的软件放置到 YUM 服务器内,然后(2)分析这些软件的相依属性问题,将软件内的记录信息写下来 (header)。 然后再将这些信息分析后记录成软件相关性的列表列表。 这些列表数据与软件所在的本地或网络位置可以称呼为容器或软件仓库或软件库 (repository)。 当客户端有软件安装的需求时,客户端主机会主动的向网络上面的 yum 服务器的软件库网址下载列表列表, 然后通过列表列表的数据与本地 RPM 数据库已存在的软件数据相比较,就能够一口气安装所有需要的具有相依属性的软件了。
例题 12.1.1-1: 了解 Linux 主流系统的软件安装机制
目前主流 Linux distribution 大概使用那两类的软件安装机制?
Red Hat 系统使用的线上升级机制为何?
何谓软件的相依性问题?
由于有了 yum 这个线上升级机制,因此目前很少会用到 rpm 来进行安装、升级的任务,用户可以略过这方面的学习。 但是 rpm 有本机软件查询以及档案验证的功能,对于快速检查相当有帮助。
RPM 查询 (query)
RPM 在查询的时候,其实查询的地方是在 /var/lib/rpm/ 这个目录下的数据库档案。 常见的查询选项如下:
[root@localhost ~]# rpm -qa <==已安裝軟體 [root@localhost ~]# rpm -q[licdR] 已安裝的軟體名稱 <==已安裝軟體 [root@localhost ~]# rpm -qf 存在於系統上面的某個檔名 <==已安裝軟體 [root@localhost ~]# rpm -qp[licdR] 未安裝的某個檔案名稱 <==查閱RPM檔案
例题 12.1.2-1: 使用 rpm 进行软件相关资料的查询
找出你的 Linux 是否有安装 logrotate 这个软件?
列出上题当中,属于该软件所提供的所有目录与档案
列出 logrotate 这个软件的相关说明数据
找出 /bin/sh 是那个软件提供的?
如果我误砍了某个重要档案,例如 /etc/crontab,偏偏不晓得他属于哪一个软件,该怎么办?
怎么知道 chrony 这个软件的相依软件与档案有哪些?
RPM 验证 (Verify)
验证 (Verify) 的功能主要在于提供系统管理员一个有用的管理机制,作用的方式是'使用 /var/lib/rpm 底下的数据库内容来比对目前 Linux 系统的环境下的所有软件档案 ' 也就是说,当你有资料不小心遗失, 或者是因为你误杀了某个软件的档案,或者是不小心不知道修改到某一个软件的档案内容, 就用这个简单的方法来验证一下原本的档案系统即可。
[root@localhost ~]# rpm -Va [root@localhost ~]# rpm -V 已安裝的軟體名稱 [root@localhost ~]# rpm -Vp 某個 RPM 檔案的檔名 [root@localhost ~]# rpm -Vf 在系統上面的某個檔案
如果有文件的某些数据被修改,则会出现下列的字样:
S :(file Size differs) 文件的容量大小是否被改变
M :(Mode differs 文件的类型或文件属性(rwx) 是否被改变? 如是否可执行等参数已被改变
5 :(MD5 sum differs) MD5 这一种指纹码的内容已经不同
D :(Device major/minor number mis-match) 装置的主/次代码已经改变
L :(readLink(2) path mis-match) Link 路径已被改变
U :(User ownership differs) 文件的所属人已被改变
G :(Group ownership differs) 文件的所属群组已被改变
T :(mTime differs) 文件的建立时间已被改变
P :(caPabilities differ) 功能已经被改变
例题 12.1.2-2: 通过 rpm 指令进行软件的验证行为
列出你的 Linux 内的 logrotate 这个软件是否被更动过
查询一下,你的 /etc/crontab 是否有被更动过
定期在星期天 2:00 进行一次全系统的软件验证,并将验证结果更新到 /root/rpmv.txt 文件中
RPM 数字签名 ( Signature)
就像自己的签名一样,软件开发商原厂所推出的软件也会有一个厂商自己的签名系统,只是这个签名被数字化了而已。 厂商可以用数字签名系统产生一个专属于该软件的签章,并将该签名的公钥(public key)释出。 因此,当你要安装一个 RPM 文件时:
首先你必须要先安装原厂释出的公钥档案;
实际安装原厂的 RPM 软件时, rpm 指令会去读取 RPM 文件的签名信息,与本地系统内的签名信息比对,
若签章相同则予以安装,若找不到相关的签名信息时,则给予警告并且停止安装。
CentOS 使用的数字签名系统为 GNU 计划的 GnuPG (GNU Privacy Guard, GPG)。 GPG 可以通过哈希运算,算出独一无二的专属密钥系统或者是数字签名系统。 而根据上面的说明,我们也会知道首先必须要安装原厂释出的 GPG 数字签名的公钥文件! CentOS 的数字签章位于 /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial, 至于安装与找到密钥的方式如下:
[root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial [root@localhost ~]# rpm -qa | grep pubkey gpg-pubkey-8483c65d-5ccc5b19 [root@localhost ~]# rpm -qi gpg-pubkey-8483c65d-5ccc5b19
RPM 数据库重建
有时候正在安装软件时,却发生停电的状况,或者是某些突发状况,导致的系统问题等等,接可能会直接/间接的造成 /var/lib/rpm 内的 RPM 数据库错乱。 此时可以通过底下的方式来重建数据库:
[root@localhost ~]# rpm --rebuilddb <==重建資料庫
如果读者的CentOS可以连上Internet的话,那么就可以透过CentOS官网与相关映射站来取得原版官网的软件,可以进行各项线上安装/升级的任务,再也无须使用原版光盘了。
yum 是前台使用的软件,其实后端 Linux 还是使用 rpm 来进行软件管理的任务就是了。 yum 常见的用法如下:
查询功能:yum [list|info|search|provides|whatprovides|history] 参数
如果想要查询利用 yum 来查询原版 distribution 所提供的软件,或已知某软件的名称,想知道该软件的功能,直接使用 yum 搭配参数即可。 例如要找出原版的 raid 作为关键字的软件名称时:
[root@localhost ~]# yum search raid [root@station200 ~]# yum search raid CentOS-8 - AppStream 5.4 MB/s | 7.0 MB 00:01 <==進行清單下載動作 CentOS-8 - Base 2.3 MB/s | 2.2 MB 00:00 CentOS-8 - Extras 6.7 kB/s | 5.9 kB 00:00 ============================== Name & Summary 符合: raid ============================== libblockdev-mdraid.x86_64 : The MD RAID plugin for the libblockdev library libblockdev-mdraid.i686 : The MD RAID plugin for the libblockdev library libblockdev-mdraid.x86_64 : The MD RAID plugin for the libblockdev library libstoragemgmt-megaraid-plugin.noarch : Files for LSI MegaRAID support for : libstoragemgmt ================================= Summary 符合: raid ================================== iprutils.x86_64 : Utilities for the IBM Power Linux RAID adapters iprutils.x86_64 : Utilities for the IBM Power Linux RAID adapters mdadm.x86_64 : The mdadm program controls Linux md devices (software RAID arrays) mdadm.x86_64 : The mdadm program controls Linux md devices (software RAID arrays)
yum 进行软件安装与升级的动作相当简单,通过下载服务器的列表列表后,与本地的 rpm 数据库比对,若发现服务器存在但本地不存在者, 则可以进行安装,若发现服务器的软件版本较新而本地软件较旧,则可以进行升级。 另外,yum 也会自动透过速度比对,找到最近的官网映射站来进行网络下载的任务。 如果想要了解上述 mdadm 这个软件的说明,可以这样处理:
[root@localhost ~]# yum info mdadm Name : mdadm Version : 4.1 發行版 : 9.el8 Architecture : x86_64 Size : 1.2 M 來源 : mdadm-4.1-9.el8.src.rpm Repository : @System 來源軟體庫 : anaconda Summary : The mdadm program controls Linux md devices (software RAID arrays) URL : http://www.kernel.org/pub/linux/utils/raid/mdadm/ 授權 : GPLv2+ Description : The mdadm program is used to create, manage, and monitor Linux MD : (software RAID) devices. As such, it provides similar functionality to : the raidtools package. However, mdadm is a single program, and it can : perform almost all functions without a configuration file, though a : configuration file can be used to help with some common tasks.
其实就是 rpm -qi mdadm 的内容展现! 而如果想要知道服务器上面的所有软件列表列表,则可以使用『 yum list 』来查阅! 这与 rpm -qa 有点类似,只是 rpm -qa 仅列出本机上面的软件,而 yum list 可以列出服务器上面的所有软件名称!
从前一小节读者可以了解『 rpm -qf /local/file/name 』可以透过档案来找出原本的软件名称,那 yum 的相关功能如何达成? 例如,哪个软件提供了 /etc/passwd 呢? 可以这样处理:
[root@localhost ~]# yum provides "*/passwd" bash-completion-1:2.7-5.el8.noarch : Programmable completion for Bash 軟體庫 :@System 符合來源: 檔案名稱:/usr/share/bash-completion/completions/passwd ......
例题 12.2.1-1:请使用 yum 进行如下任务,不要使用 rpm 喔!
那一个软件提供了 ifconfig 这个指令
显示并查阅该软件的描述 (Description) 尝试了解该软件的任务
列出所有以qemu为开头的软件名称
有个名为qemu-kvm的软件功能为何?
查出到目前为止, yum 进行过什么行为
安装/升级功能:yum [install|update] 软件
安装与升级直接字面上的处理为 install/update 即可!
例题 12.2.1-2: 利用 yum 进行安装、升级、移除的动作
基本的查询与安装任务
用 rpm 本机查询有没有安装 pam-devel 这个软件?
用 yum 查询是否有这个 pam-devel 的软件名称?
用 yum 在线安装这个 pam-devel 的软件。
安装完毕后,透过 rpm 查询 pam-devel 的所属文件名有哪些
基本的升级任务
先使用 yum check-update 尝试分析目前服务器上有比本机 Linux 还要新的软件群
随意选择一个软件(例如sudo)来进行单一软件的升级
进行一次全系统升级
如果需要每天凌晨3点自动背景进行全系统升级,该如何处理? 同时须注意到 yum 是否需要加上特别的参数?
基本的移除任务
将刚刚安装的 pam-devel 删除掉 (请自行 man yum 找出删除的选项)
刚刚已经全系统安装完毕,请问是否需要重新开机? 为什么?
yum 是通过配置文件的规范去找到安装/升级服务器的,因为经常有第三方的第三方推出 yum 兼容的安装服务器, 因此了解与设定 yum 配置文件,是有其必要的。
默认的CentOS 8的配置文件的文件名为: /etc/yum.repos.d/*.repo,重点在扩展名必须为 .repo 才行。 在默认的情况下, CentOS 8 提供了 3 个主要的软件仓储,分别是: AppStream, Base, Extras,这 3 个配置文件如下:
[root@localhost ~]# cat /etc/yum.repos.d/CentOS-{AppStream,Base,Extras}.repo | grep -v '#' [AppStream] name=CentOS-$releasever - AppStream mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial [BaseOS] name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial [extras] name=CentOS-$releasever - Extras mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
相关的配置数据说明如下:
[base]:代表软件库的名字! 中括号一定要存在,里面的名称尽量取与软件有关的关键词。 此外,不能有两个相同的软件库名称,否则 yum 指令会误判
name:与 [] 类似,仅作为完整名称显示,通常可设定与 [] 内的文字相同即可。
mirrorlist=:使用CentOS官网记载的映射站分析,透过 yum 主动分析最靠近本地服务器来源
baseurl=:与 mirrorlist 不同,baseurl 为自行指定固定的 yum 服务器,第三方协力软件需要这个设定,管理员自己设定的 yum 服务器也通常使用 baseurl 来规范来源。
enabled=1:是否启动这个软件库,默认为启动,若只想要设定好这个软件库,但平时不想使用时,可将这个项目设定为 enabled=0
gpgcheck=1:指定是否需要查阅 RPM 文件内的数字签名!
gpgkey=:若指定需要数字签名 (gpgcheck=1),则需要在此填写数字签名的文件文件名。
例题 12.2.2-1: 修改 yum 的设定文件
由于 mirrorlist 需要一段时间去测试最快的服务器,并且偶而会测试错误。 因此请自行手动找到最近的服务器, 将 mirrorlist 修改成 baseurl 的方式来设定好 [base], [updates], [extras] 三个软件库的内容。 你可以由昆山的 http://ftp.ksu.edu.tw 找起!
修改完成后,由于修改过 yum 配置文件,为了担心清单缓存会有重复或者是其他问题,请 yum clean all 清除所有系统快取的信息。
再次的 yum update 测试一下是否正确的下载了清单信息。
如果您想要列出所有的软件库,可使用 yum repolist all 的选项来处理:
例题 12.2.2-2: 管理软件库的设定
CentOS 其实还有提供很多的软件库 (软件仓储),可以让用户自行配置是否启用。 不过,预设仅提供 AppStream 及 BaseOS 即可!
关于 EPEL:Red Hat 提供了 EPEL 的计划,由许多志愿者提供了很多针对 RHEL/CentOS 打包好的软件,提供给用户使用。 但这些软件并非官网提供, 因此其软件库并没有在默认的配置文件内,请依据底下的方式来处理 EPEL 的软件支持。
先列出本机上面所有的软件仓储,不管有没有启用。
将 Extras 这个软件仓储设置成为默认关闭 (yum config-manager --disable...)
使用 yum --enablerepo=extras search 的方式,找到 epel 这个关键词,然后安装该软件。 安装完毕之后请查阅所有的软件仓储结果是否有改变?
让 epel 软件仓储变成默认是不启用的。
系统是否含有 netcdf 这个软件?
使用 yum --enablerepo=epel,PowerTools 之后,再次查询有没有 netcdf? 若有,请安装!
使用 rpm 查询 netcdf 软件内含的文件名,并查出所有含有 bin 在内的指令名称。
除了个别的软件之外,许多大型项目的软件群会集合成为一个'软件群组'。 举例来说,开发者工具经常需要编译器、环境检查确认模块等等, 这些工具则可以整合成为一个软件群组。 yum 提供许多软件组让管理员快速的安装好所需要的环境。 下面以开发工具为例说明:
[root@localhost ~]# LANG=C yum grouplist Available Environment Groups: <==還可以安裝的操作界面 Server Minimal Install Workstation Virtualization Host Custom Operating System Installed Environment Groups: Server with GUI Installed Groups: Container Management Headless Management Available Groups: <==其他的軟體群組! .NET Core Development RPM Development Tools Development Tools <==開發工具! Graphical Administration Tools Legacy UNIX Compatibility Network Servers Scientific Support Security Tools Smart Card Support System Tools [root@localhost ~]# yum groupinfo "Development Tools" 群組:開發工具 描述:基本開發環境。 必備軟體包: autoconf automake binutils ..... 預設軟體包: asciidoc byacc ..... 選用軟體包: cmake expect ..... [root@localhost ~]# yum groupinstall "Development Tools"
上面的最后一个指令,就可以将全部需要的软件安装起来。 不过,就像上面 yum groupinfo 显示的一样,那个 cmake 与 expect 等软件是选配, 也就是如果你使用默认的方式安装 Development Tools 软件群组,并不会主动安装 cmake 与 expect 喔! 那几个软件就得要自己安装才行! 如果连选用软件包也要安装,那可以这样做:
[root@localhost ~]# yum groupinstall --with-optional "Development Tools"
这样比较轻松愉快!
系统的登录文件管理相当重要,因为各种系统活动的记录均会记载于登录文件中。 尤其系统有资安等问题时,登录文件更是查阅相关信息的重要依据。
各 Linux distribution 所使用的登录文件记录位置大多位于 /var/log,但文件名则不见得相同。 至于还有许多指令可以调用出需要的登录信息, CentOS 8 常见的登录文件文件名信息,以及惯用的指令功能如下:
/var/log/cron:记录由 crond 这个服务所产生的各项信息,包括用户 crontab 的结果。
/var/log/lastlog:记录系统上面所有的账号最近一次登录系统时的相关信息。
/var/log/maillog:记录邮件往来的信息,包括由 postfix, devecot 服务所产生的系统信息
/var/log/messages:几乎系统发生的错误消息 (或者是重要的信息) 都会记录在这个档案中; 如果系统发生莫名的错误时,这个档案是一定要查阅的登录文件之一。
/var/log/secure:只要牵涉到'需要输入帐号密码'的软件,那么当登入时 (不管登录正确或错误) 都会被记录在此档案中。
dmesg:这个指令会列出系统在开机的时候核心侦测过程所产生的各项信息。
lastlog:根据 /var/log/lastlog 的数据,列出每个用户最近一次登录系统的时间与状态。
last:根据 /var/log/wtmp 的数据,列出登录系统的用户信息。
utmpdump /var/log/wtmp:可以将 wtmp 的内容以纯文字文件的方式印出来查阅。
登录文件所需相关服务 (daemon) 与程序
由于CentOS8已经改为 systemd 管理系统,systemd 提供了 systemd-journald 这个服务来管理登录文件日志记载,不过还是保留旧有的 rsyslog 服务。 然而记载的资料如果过于庞大,那么记载的档案本身负荷会比较高,因此还需要一个轮替登录文件的功能,那就是 logroate 了!
systemd-journald.service:最主要的讯息收受者,由 systemd 提供的;
rsyslog.service:主要登录系统与网络等服务的讯息;
logrotate:主要在进行登录文件的轮替功能。
例题 12.3.1-1: 检查与登录文件有关的服务与指令
检查一下上述的三个数据中,哪几个是服务? 哪几个是执行文件?
并检查服务项目有没有启动? 而执行文件又是如何执行的?
登录文件内容的一般格式
一般来说,系统产生的信息经过记录下来的数据中,每条信息均会记录底下的几个重要数据:
事件发生的日期与时间;
发生此事件的主机名;
启动此事件的服务名称(如 systemd, CROND 等) 或指令与函数名称 (如 su, login..) ;
该信息的实际数据内容。
举例来说,假设读者刚刚使用 student 的身份切换成为 root 的话,那么记载登录信息的 /var/log/secure 内容可能就会出现如下资料:
[root@localhost ~]# cat /var/log/secure ....... May 26 11:44:26 station200 sudo[2753]: student : TTY=pts/0 ; PWD=/home/student ; USER=root ; COMMAND=/bin/su - May 26 11:44:26 station200 su[2757]: pam_unix(su-l:session): session opened for user root by root(uid=0) |---日期時間---|---主機---|-指令--|--詳細訊息
因为用户使用了sudo su - 这串指令,因此上述表格内即有sudo与su两者的记录状态。 由这个输出,管理员可以很轻松的查询到正确的日期与时间, 还有哪个用户操作了什么指令等等。 也由于 /var/log 内的资料大多含有系统资安的记载,因此大多仅有 root 具有查询的权限。
实际练习:尝试说明底下的信息当中,系统出了什么问题? 第1,2行的内容,显示5月18日,在早上10点前后,www主机上面的 student 操作sudo 失败了,原因很可能是密码输入错误。 至于第3,4行的内容显示,又经过4秒钟,student似乎输入了正确的密码,因此转换身份成为root了。
May 18 09:57:58 www sudo: pam_unix(sudo:auth): conversation failed May 18 09:57:58 www sudo: pam_unix(sudo:auth): auth could not identify password for [student] May 18 09:58:02 www sudo: student : TTY=pts/0 ; PWD=/home/student ; USER=root ; COMMAND=/bin/su - May 18 09:58:02 www su: pam_unix(su-l:session): session opened for user root by student(uid=0)
CentOS 5 以前使用 syslogd 这个服务,在 CentOS 6 以后则使用 rsyslogd 这个服务了。 这个服务的配置文件在 /etc/rsyslog.conf , 设定内容主要是针对'(1)什么服务 (2)的什么等级消息 (3)需要被记录在哪里(装置或档案)』,例如下表的范例:
服務名稱[.=!]訊息等級 訊息記錄的檔名或裝置或主機 mail.info /var/log/maillog_info
服务名称
rsyslogd 主要还是通过 Linux 核心提供的 syslog 相关规范来设定数据的分类的,Linux 的 syslog 本身有规范一些服务讯息, 你可以通过这些服务来存储系统的讯息。 Linux 核心的 syslog 认识的服务类型主要有底下这些: (可使用 man 3 syslog 查询到相关的信息,或查询 syslog.h 这个档案来了解的! )
相对序号 | 服务类别 | 说明 |
0 | kern(kernel) | 就是核心 (kernel) 产生的讯息,大多是硬件侦测以及核心功能的启用 |
1 | user | 在用户层级所产生的信息 |
2 | 只要与邮件收发有关的讯息记录都属于这个; | |
3 | daemon | 主要是系统的服务所产生的信息,例如 systemd 就是这个有关的讯息! |
4 | auth | 主要与认证/授权有关的机制,例如 login, ssh, su 等需要账号/密码的服务 |
5 | syslog | 由 syslog 相关协议产生的信息,就是 rsyslogd 本身产生的信息! |
6 | lpr | 亦即是打印相关的讯息啊! |
7 | news | 与新闻群组服务器有关的东西; |
8 | uucp | 全名为 Unix to Unix Copy Protocol,用于 unix 系统间的程序数据交换 |
9 | cron | 就是例行性工作调度 cron/at 等产生信息记录的地方; |
10 | authpriv | 与 auth 类似,但记录较多帐号私人的信息,包括 pam 模块的运作等! |
11 | ftp | 与 FTP 协议有关的讯息输出! |
16~23 | local0 ~ local7 | 保留给本地用户使用的一些登录文件信息,较常与终端互动。 |
开发服务软件的程序开发者,呼叫了 Linux 系统内的 syslog 函数,就可以将信息加以定义了! 以下图为例:
讯息等级
同一个服务所产生的讯息也是有差别的,有启动时仅通知系统而已的一般讯息 (information), 有出现还不至于影响到正常运作的警告讯息(warn), 还有系统硬件发生严重错误时,所产生的重大问题消息(error等等); 讯息到底有多少种严重的等级呢? 基本上,Linux 核心的 syslog 将信息分为七个主要的等级,根据 syslog.h 的定义,讯息名称与数值的对应如下:
等级数值 | 等级名称 | 说明 |
7 | debug | 用来 debug (除错) 时产生的讯息资料; |
6 | info | 仅是一些基本的讯息说明而已; |
5 | notice | 虽然是正常信息,但比 info 还需要被注意到的一些信息内容; |
4 | warning (warn) | 警示的讯息,可能有问题,但是还不至于影响到某个 daemon 运作的信息;基本上, info, notice, warn 这三个讯息都是在告知一些基本信息而已,应该还不至于造成一些系统运作困扰; |
3 | err (error) | 一些重大的错误讯息,例如配置文件的某些设置值造成该服务服法启动的信息说明, 通常通过 err 的错误告知,应该可以了解到该服务无法启动的问题呢! |
2 | crit | 比 error 还要严重的错误信息,这个 crit 是临界点 (critical) 的缩写,这个错误已经很严重了喔! |
1 | alert | 警告警告,已经很有问题的等级,比crit还要严重! |
0 | emerg (panic) | 疼痛等级,意指系统已经几乎要当机的状态! 很严重的错误信息了。 通常大概只有硬件出问题,导致整个核心无法顺利运作,就会出现这样的等级的讯息吧! |
特别留意一下在信息等级之前还有 [.=!] 的链接符号喔! 他代表的意思是这样的:
. :代表'比后面还要严重的等级 (含该等级) 都被记录下来'的意思,例如: mail.info 代表只要是 mail 的信息,而且该信息技术严重于 info (含 info 本身)时,就会被记录下来的意思。
.=:代表所需要的等级就是后面接的等级而已, 其他的不要!
.! :代表不等于, 亦即是除了该等级外的其他等级都记录。
CentOS 8 默认的 rsyslog.conf 内容
默认 rsyslog.conf 内容如下:
[root@localhost ~]# grep -v '^#' /etc/rsyslog.conf | grep -v '^$'|sed 's/#.*$//g' module(load="imuxsock" SysSock.Use="off") module(load="imjournal" StateFile="imjournal.state") global(workDirectory="/var/lib/rsyslog") module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat") include(file="/etc/rsyslog.d/*.conf" mode="optional") *.info;mail.none;authpriv.none;cron.none /var/log/messages authpriv.* /var/log/secure mail.* -/var/log/maillog cron.* /var/log/cron *.emerg :omusrmsg:* uucp,news.crit /var/log/spooler local7.* /var/log/boot.log
上表前8行主要是用在rsyslog环境运作的设定,后面7行才是信息等级记录设定。 该 7 行的设置项目为:
*.info; mail.none; authpriv.none; cron.none:由于 mail, authpriv, cron 等类别产生的信息较多, 且已经写入底下的数个文件中,因此在 /var/log/messages 里面就不记录这些项目。 除此之外的其他讯息都写入 /var/log/messages 中。
authpriv.*:认证方面的讯息均写入 /var/log/secure 档案;
mail.*:邮件方面的讯息则均写入 /var/log/maillog 档案;
cron.*:例行性工作排程均写入 /var/log/cron 档案;
*.emerg:当产生最严重的错误等级时,将该等级的信息以 wall 的方式广播给所有在系统登录的帐号得知。
uucp,news.crit:当新闻群组方面的信息有严重错误时就写入 /var/log/spooler 档案中;
local7.*:将本地开机时应该显示到屏幕的信息写入到 /var/log/boot.log 文件中;
至于 mail.* 后面的 -/var/log/maillog 为何多了减号? 由于邮件所产生的信息比较多,因此我们希望邮件产生的讯息先存储在速度较快的内存中 (buffer) ,等到数据量够大了才一次性的将所有资料都填入磁盘内,这样将有助于登录文件的访问性能。 只不过由于讯息是暂存在内存内,因此若不正常关机导致登录信息未回填到登录文件中,可能会造成部分资料的遗失。
例题 12.3.2-1: 自订登录文件信息
设计一个名为 /var/log/admin.log 的登录文件,将系统的所有登录信息通通塞入这个档案内。
登录文件服务器的设定
如果单位内有 10 部服务器,若每部服务器的登录信息都需要管理员个别登入每部系统来存取,将会导致大量的人力支持耗费。 此时可以指定单位内某部 Linux 成为登录服务器,假设为 A 服务器,再将其他服务器的登录信息转向到 A 服务器, 则管理员仅须分析 A 服务器,即可了解单位内所有服务器的登录信息了。
Server 端的设定只需要让 rsyslogd 启动 port 514 即可。 不过有两种启动的方式,分别是启动 TCP 与 UDP 两种封包格式。 假设 Server/Client 都在内部网络,因此我们使用速度较快的 UDP 封包来处理:
实际练习:请将你的 Linux 规范成为登录服务器:
先设定 rsyslog.conf ,启动 port 514 在 UDP 封包上:
[root@localhost ~]# vim /etc/rsyslog.conf module(load="imudp") # needs to be done just once <==大概在 19, 20 行,將這兩個設定註解取消 input(type="imudp" port="514")
重新启动服务,并且观察 port 是否正确启动了?
[root@localhost ~]# systemctl restart rsyslog [root@localhost ~]# netstat -tlunp | grep rsyslog udp 0 0 0.0.0.0:514 0.0.0.0:* 3837/rsyslogd udp6 0 0 :::514 :::* 3837/rsyslogd
将防火墙设定中,port 514 解开
[root@localhost ~]# firewall-cmd --info-service=syslog syslog ports: 514/udp protocols: source-ports: ..... [root@localhost ~]# firewall-cmd --permanent --add-service=syslog [root@localhost ~]# systemctl restart firewalld.service [root@localhost ~]# firewall-cmd --list-services ftp http https ssh syslog
实际练习:两两同学成对,查询对方的 IP 后,将自己的讯息复制一份到对方的 rsyslog 当中。
先配置 rsyslog.conf 的内容,加入底下这行:
[root@localhost ~]# vim /etc/rsyslog.d/admin.conf *.* /var/log/admin.log *.* @172.16.60.100:514
重新启动 rsyslog.conf ,再请对方查阅一下自己的 /var/log/messages 是否有收集到对方的登录信息。
[root@localhost ~]# systemctl restart rsyslog
rsyslog 仅是一只服务,因此许多开机过程中产生的信息都发生在启动 rsyslog 之前,因此核心得要额外切出一些服务来记载信息,这稍微困扰些。 现在系统使用 systemd 来管理,systemd 提供了systemd-journald 来协助记载登录文件~因此在开机过程中的所有信息, 包括启动服务与服务若启动失败的情况等等,都可以直接被记录到 systemd-journald 当中。
不过 systemd-journald 由于是使用于内存的登录文件记录方式,因此重新开机过后,开机前的登录文件信息当然就不会被记载了。 为此,CentOS 8 还是建议启动 rsyslogd 来协助分类记录! 也就是说,systemd-journald 用来管理与查询这次开机后的登录信息,而 rsyslogd 可以用来记录以前及现在的所以资料到磁盘档案中,方便未来进行查询!
使用 journalctl 列出登录文件
systemd-journald 服务所产生的任何信息,都可以透过 journalctl 这个指令来呼叫出来:
[root@localhost ~]# journalctl [-nrpf] [--since TIME] [--until TIME] [-u unit] _optional # A. 顯示出最近 20 行的登錄檔內容訊息 [root@localhost ~]# journalctl -n 20 # B. 只找出與 chronyd 有關的登錄資訊 [root@localhost ~]# journalctl -u chronyd # C. 持續偵測登錄資訊,直到按下 [ctrl]+c 為止 [root@localhost ~]# journalctl -f # D. 只列出訊息等級 4, 亦即 warning 等級以上的訊息 [root@localhost ~]# journalctl -p warning
要注意 TIME 可以是英文代表 (yesterday,today..) 或者是详细的年月日 (2020-05-26 00:00:00) 等等。 至于常见的 _optional 则有:
_SYSTEMD_UNIT=unit.service :只输出 unit.service 的信息而已
_COMM=bash :只输出与 bash 有关的信息
_PID=pid :只输出 PID 号码的信息
_UID=uid :只输出 UID 为 uid 的信息
例题 12.3.3-1: 熟悉使用 journalctl 查阅登录信息
不加任何参数与选项,列出所有的日志资料
(1)先用 date 找出日期格式 YYYY-MM-DD 的日期,并以该日期的信息显示 log,以及(2)仅今天及(3)仅昨天的日志资料内容
只找出 crond.service 的数据,同时只列出最新的 10 笔即可
找出 su, login 执行的登录文件,同时只列出最新的 10 笔即可
如果系统能够自动的分析登录文件,之后做成类似报表的数据提供给管理员进行分析,则管理员会更加轻松。 CentOS 提供了 logwatch 这个分析软件来提供管理员进一步分析登录文件,管理员仅须安装此软件,系统即刻将 logwatch 排进行程, 未来管理员直接观察 mail 即可。
例题 12.3.4-1: 安装 logwatch 相关软件,分析登录信息
使用 rpm 检查是否已经安装了 logwatch,若尚未安装,请使用 yum 在线安装
使用 rpm -ql 的方式,查询 logwatch 的所有文件,并找出与 cron 有关的配置文件名
承上,找到上述档案后观察内容,并将执行的方法'立刻'执行一遍
使用 root 的身份输入 mail 查询输出的信息
有的时候,我们需要的软件可能官方网站并没有提供,这个时候就得要自行安装了。 目前自由软件很喜欢使用 github 的方式进行源代码的释出! 底下,我们将尝试在CentOS 8上面安装一套游戏,并测试看看能不能安装成功。 这套游戏请参考:
官网:https://viewizard.com/
安装:https://github.com/viewizard/astromenace#installation
先依据上述的软件安装步骤,安装需要的软件们:
[root@station200 ~]# yum --enablerepo=PowerTools,epel install SDL2-devel libogg-devel libvorbis-devel \ > openal-soft-devel glibc32 freeglut-devel.x86_64 freetype-devel
但是有一个音效软件,目前CentOS 8并不支持! 所以,我们拿 CentOS 7 的 SRPM (仅有源代码与编译流程, 不是编译过的软件) 来在我们的系统上重新编译! 若编译成功,我们就可以直接安装该软件了!
[root@station200 ~]# wget https://dl.fedoraproject.org/pub/epel/7/SRPMS/Packages/f/freealut-1.1.0-21.el7.src.rpm [root@station200 ~]# rpmbuild --rebuild freealut-1.1.0-21.el7.src.rpm [root@station200 ~]# ll rpmbuild/RPMS/x86_64/ -rw-r--r--. 1 root root 48044 5月 26 16:33 freealut-1.1.0-21.el8.x86_64.rpm -rw-r--r--. 1 root root 36052 5月 26 16:33 freealut-debuginfo-1.1.0-21.el8.x86_64.rpm -rw-r--r--. 1 root root 31812 5月 26 16:33 freealut-debugsource-1.1.0-21.el8.x86_64.rpm -rw-r--r--. 1 root root 24248 5月 26 16:33 freealut-devel-1.1.0-21.el8.x86_64.rpm [root@station200 ~]# cd rpmbuild/RPMS/x86_64/ [root@station200 x86_64]# yum install ./freealut-1.1.0-21.el8.x86_64.rpm ./freealut-devel-1.1.0-21.el8.x86_64.rpm
开始使用源代码下载的方式,用 git 自动从远程主机下载代码,并且开始依据对方的帮助,开始进行安装流程:
[root@station200 ~]# cd /usr/local/src [root@station200 src]# git clone https://github.com/viewizard/astromenace.git astromenace [root@station200 src]# cd astromenace/ [root@station200 astromenace]# cmake -DCMAKE_BUILD_TYPE=Release ./ # 要顯示沒問題才行! [root@station200 astromenace]# make ..... VFS file was created /usr/local/src/astromenace/gamedata.vfs [100%] Built target astromenace
出现上面的字样,就是成功编译完毕! 然后,在图形界面上面打开终端机,直接输入'/usr/local/src/astromenace/astromenace'这个指令, 就可以开始玩游戏了。 不过,因为我们是虚拟机,图形界面的效能不好,因此无法很顺畅的游戏!
更多 Linux 游戏,可以参考底下的网站来自行安装游玩!
19 Awesome Open Source Games for Linux:
https://unixmen.com/gaming-on-linux1131-19-awesome-opensource-games-for-linux/
上课的课后练习,非作业:
从源代码的方式在本地系统上进行编译的行为 :
由https://www.unidata.ucar.edu/downloads/netcdf/下载最新的 netcdf-c 程序,然后进行设定与安装,最终将该软件安装到 /usr/local 目录内。
尝试使用 type -a ncdump,看看能不能找到该软件所提供的指令,并使用 ncdump -h 确认软件是否可用即可。
理解安装后,将该软件移除。
尝试由 ELrepo 软件仓储,亦即是: http://elrepo.org/tiki/tiki-index.php这个网站上面,处理一下相关的核心安装:
依据 ELrepo 网站的介绍,安装软件数字签名,同时安装 repository 的配置文件,并将软件仓储设定为不启用。
依据软件仓储的分类,选择 kernel 相关仓储,搜寻 kernel-ml 软件,并且安装他。
查询 /lib/modules 的内容,看看有没有最新的核心? 同时,重新开机进入新的核心,测试核心版本是否正确?
重新启动使用默认的 4.18.xxx 的最新版本,然后移除 kernel-ml 相关软件。
作业 (不提供学生答案,仅提供教师参考答案)
作业硬盘操作帮助:
开启云端虚拟机前,请务必确认你开启的硬盘是'unit12',否则就会做错题目
若要使用图形界面,请务必使用 student 身份登入,若需要切换身份,再启用终端机处理。
若有简答题需要使用中文,请自行以第一堂课的动作自行处理输入法安装。
每部虚拟机均有独特的网卡地址,请勿使用他人硬盘上传,否则计分为 0 分。
每位同学均有自己的 IP 尾数,请先向老师询问您的 IP 尾数,才可以进行作业上传。
最终上传作业结果,请务必使用 root 身份上传。
进入操作硬盘后,先用 root 身份执行 vbird_book_setup_ip, 执行流程请参考:vbird_book_setup_ip
作业当中,某些部份可能为简答题~若为简答题时,请将答案写入 /home/student/ans.txt 当中,并写好正确题号,方便老师订正答案。 请注意,文件名写错将无法上传!
请使用 root 的身份进行如下实做的任务。 直接在系统上面操作,操作成功即可,上传结果的程序会主动找到你的实做结果。 另外,由于底下的题目有部分需要实作后提供答案,故开始实作前,请先回答 ans12.txt 内的问题再继续往下处理
(15%)请回答下列问题,并将答案写在 /root/ans12.txt 文件内:
请查出 /etc/sudoers 这个档案属于哪一个软件 (1)写下查询的指令与 (2)写下查询的结果
承上,上面查到的这个软件中,该软件内有那些档案被修改过? (1)写下查询的指令与 (2)写下查询的结果
(从本题以后,请完成网络设定后再继续实作与回答下列问题) 承上,上面查到的软件中,如果因为有问题,所以需要重新安装,可以使用怎么样的指令直接在线重新安装? 请写下安装的指令
有个文件名为 misc_conv.3.gz ,这个文件属于哪个软件? (1)写下查询的指令与 (2)写下查询的结果
root 曾经在某个时段利用sudo做过【 cat /etc/shadow 】这个指令,请依据登录文件的查询结果, (1)将查询到的登录信息转存到这个档案的这个段落来 (2)root执行的时间点是甚么时候 (日/月/时/分)
(20%)系统的基础设置-网络的设置部分:
使用的适配卡为 ens3 这个适配器,且建立的连接名称也是 ens3
需要开机就自动启动这个连接
网络参数的设定方式为手动设定,不要使用自动取得喔
IP address 为: 192.168.251.XXX/24 (XXX 为上课时,老师给予的号码)
Gateway 为: 192.168.251.254
DNS server IP为:请依据老师课后说明来设定 (若无规定,请以 168.95.1.1 及 8.8.8.8 这两个为准)
主机名称:请设定为 stdXXX.book.vbird (其中 XXX 为上课时,老师给予的号码)
由于我们的系统是经过clone出来的,因此所有的设备恐怕都怪怪的。 所以,请先将系统中的 ens3 这个网络连接删除。
请根据下面的帮助,重新创建 ens3 这个网络连接 :务必记得设定完毕后,一定要启用这个网络连线,否则成绩无法上传喔!
(35%)使用网络安装相关软件
启用AppStream,BaseOS,PowerTools,extras这四个软件仓储,另外,底下的题目完成后,还会有epel及epel-modular共6个软件仓储的启用。
请以贵校的 FTP 或 http 为主,设定好你的 CentOS server 的 YUM 配置文件。 以昆山来说,可使用 http://ftp.ksu.edu.tw/ 来查询所需要的四个软件仓储的网址,这四个分别是 AppStream, BaseOS, extras, PowerTools。
请使用 yum 这个命令的相关功能,找到有关【 epel 】的关键字软件,并且安装该软件
立刻执行一次全系统升级。
请设定每天凌晨 3 点自动背景进行全系统升级。
这部主机需要有个科技用的软件 netcdf-fortran,请安装这套软件
这部主机需要作为未来开发软件之用,因此需要安装一个开发用的软件群组,请安装他。
(15%)登录文件处理
请透过相关动作,让你的全部登录信息 (info 以上等级) 写入 /var/log/full.log 文件内
请让所有的登录信息在进行 log rotate 时,必须要有压缩
请安装 logwatch ,以便未来登录文件的查询之用。
(15%)安装源代码
依据 12.5 上课后练习的 A 点说明,请在你的系统上面安装了 netcdf-c 软件,最终可以在 /usr/local/bin 里面发现 ncdump 这个执行档即可。
作业结果传输:请以 root 的身份执行 vbird_book_check_unit 指令上传操作结果。 正常执行完毕的结果应会出现【XXXXXX_aa:bb:cc:dd:ee:ff_unitNN】字样。 若需要查阅自己上传资料的时间, 请在操作系统上面使用浏览器查询: http://192.168.251.254 检查相对应的课程档案。 相关流程请参考: vbird_book_check_unit
评论专区