16、Linux 系统软件包管理与日志服务全解析

Linux 系统软件包管理与日志服务全解析

1. 第三方仓库与自定义仓库创建

在 Linux 系统中,有许多第三方仓库可供使用,但部分仓库可能缺乏维护,还有些存在包冲突的问题。若想了解哪些仓库应避免使用,哪些值得推荐,可访问 CentOS 的相关维基页面: https://wiki.centos.org/AdditionalResources/Repositories

创建自定义 YUM 仓库是在局域网内多系统上安装软件或安全更新的便捷且有效的方法。具体步骤如下:
1. 挂载包含软件包的介质 :以 CentOS 7 DVD 为例,进行挂载操作。
2. 安装 FTP 服务器包 :从挂载的 DVD 中安装 vsftpd 包。
3. 启动 vsftpd 服务 :设置服务在开机时自动启动,并立即启动该服务。
4. 安装 createrepo 包
- 若系统已连接互联网,可使用 YUM 安装,命令如下:

$ yum install createrepo -y
- 若未连接互联网,则使用 RPM 包管理器进行安装。若安装时出现依赖问题,需按顺序安装所需的依赖包。
  1. 存储软件包 :将软件包存放在 ftp 文件夹中,以构建本地仓库。
  2. 恢复 SELinux 标签 :根据 vsftpd 服务器文件,恢复从 DVD 复制的软件包的 SELinux 标签。
  3. 创建 YUM 服务器配置文件 :在 /etc/yum.repos.d/ 目录下创建以 .repo 为扩展名的文件,例如:
$ vim /etc/yum.repos.d/localserver.repo
  1. 启用本地 YUM 服务器仓库并清理缓存
$ yum clean all

清理 YUM 数据库的旧缓存后,使用相应命令重新构建仓库的 YUM 数据库。

除了使用 FTP 服务器,还可使用其他应用(如 Web 服务器或 NFS 服务器)来共享 YUM 服务器的软件包给 YUM 客户端。同时,需在防火墙中打开相应应用的端口,以允许 YUM 客户端从 YUM 服务器下载软件包。

2. 系统日志服务概述

在 Linux 系统中,日志记录对于调试和排查系统应用问题起着关键作用。从 CentOS 7 开始,系统存在两种日志服务:Rsyslog 服务和 Systemd - journald 服务。在配置日志服务之前,需确保系统时间服务已正确配置,因为时间是日志文件的重要组成部分。

2.1 Rsyslog 服务

Rsyslog 服务能集中收集 Linux 系统中不同应用程序的日志消息。它会根据日志的类型和优先级进行收集,并将其持久存储在 /var/log/ 目录下。以下是 Rsyslog 维护的一些重要日志文件及其描述:
| 日志文件路径 | 描述 |
| — | — |
| /var/log/messages | 除认证日志、邮件日志和部分应用调试日志外,大多数标准日志消息都存储在此处。 |
| /var/log/secure | 包含认证错误和其他相关消息的认证日志。 |
| /var/log/maillog | 存储邮件服务器的日志。 |
| /var/log/boot.log | 记录系统启动时的消息。 |
| /var/log/cron | 存储 cron 作业(调度器)的日志。 |
| /var/log/wtmp | 记录登录活动日志。 |
| /var/log/dmesg | 存储内核消息。 |
| /var/log/cups | 存储打印服务的日志。 |
| /var/log/samba | 存储 Samba 服务的日志,该服务直接将日志写入此文件,不由 Rsyslog 管理。 |
| /var/log/httpd | 包含 Apache Web 服务器的日志,Apache 直接将日志写入这些文件,不由 Rsyslog 管理。 |
| /var/log/audit/ | 包含 auditd 服务的日志和 SELinux 日志文件。 |

Rsyslogd 是基于 1980 年启动的 syslog 项目开发的 Linux 应用程序。它使用 syslog 协议记录系统事件,并具备一些扩展功能,如 RELP 协议和缓冲操作支持。在 Linux 中,有时也会用 syslog 来指代 Rsyslog。

2.2 Rsyslogd 配置

Rsyslogd 服务使用三个主要组件来处理系统中各种应用程序的日志消息:
- Facility :表示产生日志消息的进程类型。
- Priority 或 severity :表示消息的严重程度。
- Destination/location :描述日志消息的发送或记录位置。

Rsyslogd 服务的配置文件存储在两个位置:
- 主配置文件 /etc/rsyslog.conf
- /etc/rsyslog.d/ 目录下以 .conf 为扩展名的文件。

主配置文件 /etc/rsyslog.conf 分为三个大写显示的部分:
- #### MODULES #### :用于配置 rsyslogd 的高级功能。
- #### GLOBAL DIRECTIVES #### :用于指定全局可配置的参数。
- #### RULES #### :这是最重要的部分,包含指定要记录的内容和记录位置的规则。

可通过以下命令查看 rsyslog 的文档:

# man 5 rsyslog.conf
2.3 Rsyslogd 设施和优先级

设施代表产生日志消息的固定内部系统进程列表。以下是 CentOS 7 中常见的设施关键字及其描述:
| 设施 | 描述 |
| — | — |
| auth 或 authpriv | 表示与认证相关的子系统消息,如登录。 |
| cron | 表示 crond 服务和任何调度应用程序的消息。 |
| daemon | 用于表示各种守护进程子系统的通用名称。 |
| kern | 表示内核消息。 |
| lpr | 表示传统打印服务消息。 |
| mail | 表示所有邮件程序的消息。 |
| mark | 用于内部使用,不用于任何应用程序。 |
| news | 表示由 NNTP 生成的消息。 |
| security | 与 authpriv 相同,已不再使用。 |
| syslog | 表示 syslog 守护进程的消息。 |
| user | 表示用户空间生成的消息。 |
| uucp | 表示由 UUCP 子系统生成的消息。 |
| local0 - local7 | 表示系统为用户提供的自定义未使用设施,用于发送用户定义服务生成的消息。 |
| * | 匹配所有设施。 |

优先级表示为任何服务记录的消息的严重程度。不同的优先级级别可用于确定可记录的事件类型,例如 debug、info、emerg、alert 等。以下是优先级级别及其描述和分配的优先级编号:
| 分配编号 | 优先级 | 严重程度描述 |
| — | — | — |
| 0 | emerg | 系统不可用时生成消息。 |
| 1 | alert | 必须立即采取行动,可用服务即将停止。 |
| 2 | crit | 发生关键情况时生成消息。 |
| 3 | err | 非关键错误情况。 |
| 4 | warning | 警告情况。 |
| 5 | notice | 为需要关注以防止未来问题的事件提供信息性消息。 |
| 6 | info | 为正常服务操作生成信息性消息。 |
| 7 | debug | 为服务操作生成调试级别的消息。 |

若在优先级字段中指定通配符 * ,则表示所有类型的严重程度(消息)。若在严重程度字段中未填写内容,则意味着相应设施的任何消息都不会添加到指定的日志文件中,这可避免同一消息在不同日志文件中重复记录。

2.4 Rsyslogd 规则

/etc/rsyslog.conf 文件的 ####RULES#### 部分包含定义日志消息记录的指令,其语法如下:

facility.priority                        destination

以下是一些示例,说明如何在 /etc/rsyslog.conf 文件中使用指令记录消息:
- 若要记录内核的所有信息消息,可指定不同的日志文件:

$ vi /etc/rsyslog.conf
kern.info /var/log/kernel
  • /var/log/ 目录下创建一个 debug.log 文件,用于收集所有服务的调试优先级消息:
$ vi /etc/rsyslog.conf
*.debug /var/log/debug.log

/etc/rsyslog.conf 文件进行必要更改后,需重启 rsyslog 服务以使更改生效:

$ systemctl restart rsyslog

更改后,调试消息将不再出现在 /var/log/messages 文件中。

3. 日志文件轮转

日志轮转可防止 /var/log 目录被填满。轮转时,旧的日志文件会以 filename - datestamp 的形式重命名,其中日期戳表示轮转(存档)的日期。例如:
| 现有日志 | 存档日志 |
| — | — |
| /var/log/messages | /var/log/messages - 20180530 (于 2018 年 5 月 30 日轮转) |

Logrotate 是负责定期轮转日志文件的实用工具。每晚通过 /etc/cron.daily/logrotate 脚本运行一个 cron 作业来进行日志轮转。日志文件的轮转依据存储在以下两个位置的日志轮转程序配置进行:
- /etc/logrotate.conf
- /etc/logrotate.d/* (该目录下的任何文件)

大多数日志文件每周轮转一次,但 logrotate 命令可根据特定条件(如达到一定大小)更快或更慢地轮转某些日志。轮转日志后,日志监视程序会丢弃旧的日志文件存档,以节省磁盘空间(通常为 4 周或经过一定次数的轮转后)。轮转时会创建一个新的日志文件,并通知相关服务。安装新应用程序时,应用程序会将其日志文件配置添加到 /etc/logrotate.d/ 目录中,以纳入 logrotate 管理。

以下是创建自定义日志文件的示例:

# vi /etc/logrotate.d/<application_name>
/var/log/path_to_log_file {
    rotate 3
    size 2M
    monthly
    postrotate
        /bin/systemctl reload httpd
    endscript
}

日志轮转文件中一些重要命令的含义如下:
- rotate 3 :保留文件的最后三个版本,并删除最旧的版本。
- size 2M :当日志文件达到 2 MB 大小时进行轮转。
- monthly :这是 size 的另一种替代方式,若文件大小未达到 2 MB,则每月进行轮转。

4. 系统日志分析

rsyslogd 服务生成的系统日志存储在 /var/log/ 目录下的各种文件中。最旧的消息位于日志顶部,新的日志条目以标准格式追加到日志文件底部。

4.1 使用 tail 命令监控实时日志文件流量

在进行故障排除时,需要查看应用程序运行时生成的日志。可使用带有 -f 选项的 tail 命令实现此功能。在一个终端中执行要排查的应用程序,在另一个终端中执行以下命令:

# tail -f </path_of_log_file>

该命令将显示指定文件名底部的 10 行,并保持文件打开状态,以便查看新写入的行。查看完日志后,可按 Ctrl + C 关闭日志文件。

例如,要监控系统上的失败登录尝试,可在一个终端中打开 /var/log/secure 文件,在另一个终端中对同一系统执行 ssh 命令。

4.2 使用 logger 命令

尽管大多数应用程序已配置为自动将日志写入日志文件,但也可使用 logger 命令将消息写入 rsyslogd。 logger 命令会根据指定的设施和优先级将日志消息写入日志文件。默认情况下,它将日志发送到名为 user 的设施,优先级为 notice user.notice )。可在 shell 脚本中使用 logger 命令创建日志,示例如下:
- 若要将信息优先级的日志消息发送到 rsyslog 程序,该消息将存储在 /var/log/boot.log 文件中:

# logger -p local7.info  "Sample log entry using logger command"
  • 可使用 logger 命令将任何日志消息发送到默认日志文件 /var/log/messages
# logger "Log file entry using logger"

若想了解更多关于日志记录的信息,可参考 logger tail rsyslog.conf logrotate 命令的手册页。

5. 使用 systemd - journald

systemd - journald 守护进程为 CentOS 7 中的内核、启动程序和其他服务提供了一种非持久的高级日志管理方法。journald 将这些消息存储在以二进制格式维护的日志中,可使用 journalctl 命令访问。日志的默认行为是在重启后不持久保存,它会将消息转发给 rsyslogd 进行永久的集中存储和处理。

5.1 使用 journalctl 命令查找事件

在 CentOS 7 中,systemd - journal 存储在 /run/log/journal/ 目录中。以 root 用户身份执行 journalctl 命令且不使用任何选项时,将显示完整的系统日志,从最早的日志条目到最新的日志条目:

# journalctl

journalctl 命令使用颜色编码来突出显示消息的严重程度,如下表所示:
| 优先级 | 日志中使用的文本突出显示描述 |
| — | — |
| Error, crit, alert 或 emerg | 文本为红色 |
| Notice 或 warning | 文本为粗体 |
| Info 或 debug | 常规文本 |

可使用不同的选项与 journalctl 命令结合,将日志搜索范围限制为所需的输出:
- journalctl -n :默认情况下,使用 -n 选项将显示最后 10 条日志条目,也可指定要显示的日志条目数量。
- journalctl -p :可使用 -p 选项指定日志条目的优先级来过滤日志输出,可指定优先级级别名称或编号,以显示指定或更高级别优先级的日志条目。
- journalctl -f -f 选项与 tail 命令的 -f 选项类似,它显示日志的最后 10 行,并保持打开状态,以便在新条目写入时显示,直到按 Ctrl + C 停止。

还可使用 journalctl 命令结合 --since --until 选项指定时间范围,显示该时间段内的日志消息。例如,显示 18:05:00 到 18:10:00 之间记录的所有日志:

# journalctl --since 18:05:00 --until 18:10:00

可使用以下命令仅显示今天的日志条目:

# journalctl --since today

使用以下命令可通过启用日志的详细输出来显示附加到日志条目的额外字段:

# journalctl -o verbose

以下是 journalctl 命令中一些用于过滤查询的重要字段及其描述:
| 字段名称 | 描述 |
| — | — |
| _COMM | 根据命令名称过滤日志。 |
| _EXE | 根据进程的可执行文件路径过滤查询。 |
| _PID | 根据进程的 PID 过滤日志。 |
| _UID | 根据运行进程的用户的 UID 过滤日志。 |
| _SYSTEMD_UNIT | 根据启动进程的 systemd 单元过滤日志。 |

例如,若要列出源自 PID 为 1 的 systemd 进程的日志消息,可使用以下命令:

# journalctl _PID=1

还可使用 journalctl 命令列出由 sshd 服务发送的所有日志消息:

# journalctl _SYSTEMD_UNIT=sshd.service

使用以下命令可查看自上次启动以来的日志消息:

# journalctl -b
6. 系统服务控制与安全增强
6.1 系统服务控制概述

在 Linux 系统中,系统服务的控制是保障系统稳定运行和高效管理的重要环节。CentOS 7 中主要使用 systemd systemctl 这两个实用工具来控制应用程序和系统服务。 systemd 是一个系统和服务管理器,它提供了强大的功能,如并行启动服务、按需启动服务等,而 systemctl 则是用于与 systemd 进行交互的命令行工具。

6.2 使用 systemctl 控制服务

systemctl 命令可以执行多种操作,以下是一些常见的操作及其对应的命令示例:
- 启动服务

# systemctl start <service_name>

例如,启动 httpd 服务:

# systemctl start httpd
  • 停止服务
# systemctl stop <service_name>

例如,停止 httpd 服务:

# systemctl stop httpd
  • 重启服务
# systemctl restart <service_name>

例如,重启 httpd 服务:

# systemctl restart httpd
  • 查看服务状态
# systemctl status <service_name>

例如,查看 httpd 服务的状态:

# systemctl status httpd
  • 设置服务开机自启
# systemctl enable <service_name>

例如,设置 httpd 服务开机自启:

# systemctl enable httpd
  • 禁止服务开机自启
# systemctl disable <service_name>

例如,禁止 httpd 服务开机自启:

# systemctl disable httpd
6.3 SELinux 概述

SELinux(Security-Enhanced Linux)是一种基于 Linux 内核的强制访问控制(MAC)系统,它为系统提供了额外的安全层,用于增强系统的安全性。SELinux 通过对进程和文件进行细粒度的访问控制,限制了进程的权限,从而防止恶意软件和黑客利用系统漏洞进行攻击。

6.4 SELinux 工作模式

SELinux 有三种工作模式:
| 模式 | 描述 |
| — | — |
| enforcing | 强制模式,SELinux 会强制执行安全策略,违反策略的操作将被阻止。 |
| permissive | 宽容模式,SELinux 不会阻止违反策略的操作,但会记录违规信息。 |
| disabled | 禁用模式,SELinux 不工作,系统不进行额外的安全检查。 |

可使用以下命令查看当前 SELinux 的工作模式:

# getenforce

若要临时更改 SELinux 的工作模式,可使用以下命令:
- 切换到强制模式:

# setenforce 1
  • 切换到宽容模式:
# setenforce 0

若要永久更改 SELinux 的工作模式,需要编辑 /etc/selinux/config 文件,将 SELINUX 参数设置为所需的模式,例如:

SELINUX=enforcing
6.5 SELinux 上下文

SELinux 为每个文件和进程分配了一个上下文标签,用于定义其访问权限。上下文标签由三个部分组成:用户、角色和类型,格式为 user:role:type 。例如,一个普通文件的上下文标签可能是 unconfined_u:object_r:user_home_t

可使用以下命令查看文件的 SELinux 上下文:

# ls -Z <file_path>

若要更改文件的 SELinux 上下文,可使用 chcon 命令,例如:

# chcon -t httpd_sys_content_t <file_path>
6.6 防火墙概述

在 CentOS 7 中, firewalld 是默认的防火墙管理工具,它提供了动态防火墙管理,支持区域和服务的概念。防火墙的主要作用是控制网络流量的进出,保护系统免受外部攻击。

6.7 firewalld 基本操作

以下是一些常见的 firewalld 操作及其对应的命令示例:
- 启动 firewalld 服务

# systemctl start firewalld
  • 停止 firewalld 服务
# systemctl stop firewalld
  • 设置 firewalld 服务开机自启
# systemctl enable firewalld
  • 禁止 firewalld 服务开机自启
# systemctl disable firewalld
  • 查看 firewalld 服务状态
# systemctl status firewalld
6.8 firewalld 区域和服务管理

firewalld 使用区域(zone)来管理不同的网络环境,每个区域有不同的默认规则。常见的区域有 public private trusted 等。可使用以下命令查看当前默认区域:

# firewall-cmd --get-default-zone

若要更改默认区域,可使用以下命令:

# firewall-cmd --set-default-zone=<zone_name>

firewalld 还支持服务(service)的管理,可使用以下命令查看可用的服务列表:

# firewall-cmd --get-services

若要允许某个服务通过防火墙,可使用以下命令:

# firewall-cmd --permanent --add-service=<service_name>

例如,允许 http 服务通过防火墙:

# firewall-cmd --permanent --add-service=http

若要移除某个服务的允许规则,可使用以下命令:

# firewall-cmd --permanent --remove-service=<service_name>

修改防火墙规则后,需要重新加载防火墙配置使更改生效:

# firewall-cmd --reload
7. 总结

通过对 Linux 系统软件包管理、日志服务、系统服务控制以及安全增强等方面的学习,我们了解到这些知识对于保障系统的稳定运行、高效管理和安全防护至关重要。

在软件包管理方面,我们学会了如何利用第三方仓库和创建自定义仓库来安装和更新软件包,这为系统的功能扩展和软件更新提供了便利。日志服务让我们能够及时发现系统中的问题,通过对日志的分析和监控,能够快速定位和解决故障。系统服务控制工具 systemd systemctl 使我们可以方便地管理系统服务,确保服务的正常运行和开机自启等。而 SELinux 和 firewalld 则为系统提供了强大的安全防护,通过细粒度的访问控制和网络流量管理,有效防止了恶意软件和黑客的攻击。

在实际应用中,我们可以根据系统的需求和安全策略,灵活运用这些知识和工具,构建一个安全、稳定、高效的 Linux 系统环境。同时,不断学习和掌握这些技术的最新发展,也是提升系统管理能力和保障系统安全的关键。

通过本文的介绍,希望读者能够对 Linux 系统的这些重要方面有更深入的理解和掌握,并在实际工作中能够熟练运用这些知识来解决问题。

下面是一个简单的 mermaid 流程图,展示了系统服务控制的基本流程:

graph LR
    A[开始] --> B{选择操作}
    B -->|启动服务| C[systemctl start <service_name>]
    B -->|停止服务| D[systemctl stop <service_name>]
    B -->|重启服务| E[systemctl restart <service_name>]
    B -->|查看状态| F[systemctl status <service_name>]
    B -->|开机自启| G[systemctl enable <service_name>]
    B -->|禁止自启| H[systemctl disable <service_name>]
    C --> I[结束]
    D --> I
    E --> I
    F --> I
    G --> I
    H --> I

这个流程图清晰地展示了使用 systemctl 命令对系统服务进行常见操作的流程,帮助读者更好地理解和记忆这些操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值