1.总结sudo配置文件格式,总结相关示例。
一、sudo 配置文件概述
sudo 的核心配置文件为 /etc/sudoers,此外还可通过 /etc/sudoers.d/ 目录下的文件扩展配置(文件需以非 . 开头,且权限为 0440)。配置文件遵循特定语法,用于定义用户 / 组对系统命令的执行权限。
二、sudoers 配置文件格式语法
sudoers 文件由以下几类条目组成,语法格式为:
# 注释行(以 # 开头)
用户/组 主机列表 = [选项] 命令列表
或使用 别名(Alias) 简化配置:
# 别名定义格式
User_Alias USER_ALIAS = 用户1, 用户2, %组名
Host_Alias HOST_ALIAS = 主机1, 主机2, ALL
Cmnd_Alias CMND_ALIAS = 命令1, 命令2, /usr/bin/*
Runas_Alias RUNAS_ALIAS = 运行身份1, 运行身份2, root
三、配置文件核心字段解析
- 用户 / 组(User/Group)
- 用户:直接指定用户名(如
user1)。 - 组:以
%前缀标识(如%admin)。 - 特殊值:
ALL:匹配所有用户 / 组。%wheel:Linux 中常见的管理员组(如 CentOS/RockyLinux)。
- 用户:直接指定用户名(如
- 主机列表(Host List)
- 允许执行 sudo 命令的主机名或 IP(如
localhost、192.168.1.100)。 - 特殊值:
ALL:所有主机。!:取反(如!192.168.1.100表示除该 IP 外的所有主机)。
- 允许执行 sudo 命令的主机名或 IP(如
- 选项(Options)
- 控制 sudo 行为的参数,用括号包裹,多个选项用逗号分隔。
- 常用选项:
NOPASSWD:执行命令时无需输入密码。PASSWD:需要输入密码(默认行为)。NOLOGIN:不记录登录日志。EDITOR:指定编辑器(如EDITOR=/usr/bin/vim)。
- 命令列表(Command List)
- 允许执行的命令路径,支持通配符(如
*、?)。 - 特殊值:
ALL:所有命令(需谨慎使用)。!:取反(如! /usr/bin/su表示禁止执行su命令)。
- 允许执行的命令路径,支持通配符(如
四、sudoers 配置示例
1. 基础权限配置
# 允许 user1 以 root 身份在任意主机执行所有命令(需输入密码)
user1 ALL=(ALL) ALL
# 允许 admin 组用户在任意主机执行所有命令(需输入密码)
%admin ALL=(ALL) ALL
# 允许 user2 在 localhost 上以 root 身份执行 apt-get 命令(需输入密码)
user2 localhost=(root) /usr/bin/apt-get
# 允许 user3 在任意主机以 root 身份执行 systemctl 命令(无需密码)
user3 ALL=(root) NOPASSWD: /usr/bin/systemctl
2. 别名简化配置
# 定义用户别名
User_Alias WEB_ADMINS = webuser1, webuser2, %web_group
# 定义命令别名
Cmnd_Alias WEB_COMMANDS = /usr/sbin/apachectl, /usr/bin/systemctl restart nginx
# 配置 WEB_ADMINS 组在任意主机以 root 身份执行 WEB_COMMANDS(无需密码)
WEB_ADMINS ALL=(root) NOPASSWD: WEB_COMMANDS
3. 限制与安全配置
# 允许 user4 在任意主机以 root 身份执行 vim,但禁止修改 sudoers 文件
user4 ALL=(root) /usr/bin/vim, !/etc/sudoers
# 允许 user5 在指定主机以 www-data 身份执行 php-fpm 命令
user5 192.168.1.0/24=(www-data) /usr/sbin/php-fpm reload
# 配置 user6 执行 sudo 时必须使用指定编辑器(避免恶意程序)
user6 ALL=(root) EDITOR=/usr/bin/nano /usr/bin/vim, /usr/bin/vi
4. 环境变量与安全选项
# 允许 user7 执行 sudo 时保留环境变量(默认会过滤)
user7 ALL=(root) env_keep="PATH LD_LIBRARY_PATH" /usr/bin/make
# 禁止 user8 以 root 身份执行 su 命令(防止权限逃逸)
user8 ALL=(root) ALL, !/usr/bin/su
五、sudoers 配置最佳实践
-
使用 visudo 编辑:
- 避免直接修改
sudoers文件,通过visudo命令编辑(自动检查语法,防止配置错误导致无法登录)。
sudo visudo - 避免直接修改
-
权限控制:
sudoers文件权限必须为0440,属主为root,属组为root或wheel:
chmod 0440 /etc/sudoers chown root:root /etc/sudoers -
拆分配置:
- 在
/etc/sudoers.d/目录下创建独立配置文件(如web-admins),便于管理和版本控制。
- 在
六、sudo 命令执行逻辑
- 用户执行sudo 命令时,sudo 会按顺序读取:
/etc/sudoers→/etc/sudoers.d/目录下的所有文件。
- 匹配第一条符合条件的规则,按规则定义的权限和选项执行命令。
- 若未匹配任何规则,默认拒绝执行并提示
用户不在 sudoers 文件中。
2.搭建时间同步服务器,详细总结配置和搭建过程
2.1时间简述
无论是机器世界还是人类社会,都离不开时间的计数,尤其以互联网应用对于时间的依赖尤为苛刻,基于此引出以下概念:
- 计算机本地上的两种时间(按照软硬件划分):
- 硬件时间(BIOS内置硬件时间)
- 操作系统时间(软件时间)
- 时区、UTC、CST:
- 时区:时区(Time Zone)是为了统一地球上不同地区的时间管理而划分的区域制度。
- UTC:全世界公认的 “标准时间”,所有时区的时间都以 UTC 为参照计算,简单说就是格林尼治时间(GMT,格林尼治标准时间)。
- CST:中国标准时间(UTC+8),时区为:Asia/Shanghai
2.1.1本地时间修改
时间修改相关命令:
# hwclock命令用于查看硬件时间、同步系统和硬件时间,系统开机之后是没有时间的,会从硬件主板上拿到硬件时间当做系统上的时间来运行。
[root@ntpsrv ~]#hwclock --help
-s, --hctosys set the system time from the RTC # 硬件时间同步到软件时间,可以理解为读硬件
-w, --systohc set the RTC from the system time # 软件时间同步到硬件时间,可以理解为写硬件。
[root@ntpsrv ~]#hwclock
2025-07-07 20:32:08.344106+08:00
# date命令很常用,可以显示当前系统时间、修改当前系统时间、生成日期时间组合信息
# 显示时间示例:
[root@ntpsrv ~]#date
2025年 07月 07日 星期一 20:35:14 CST
[root@ntpsrv ~]#date +%F
2025-07-07 # 显示当前日期
[root@ntpsrv ~]#date +%T
20:37:19 # 显示当前时间
[root@ntpsrv ~]#date +"%F %T"
2025-07-07 20:37:42 # 显示当前日期和时间
[root@ntpsrv ~]#touch "$(date +"%F-%H.%M.%S")".file
[root@ntpsrv ~]#ll
总用量 4
-rw-r--r-- 1 root root 0 7月 7 20:46 2025-07-07-20.46.07.file # 创建当前日期的文件
# 修改时间示例:
[root@ntpsrv ~]#date -s "20241008 15:36"
2024年 10月 08日 星期二 15:36:00 CST
[root@ntpsrv ~]#date -s "-10 year"
2014年 10月 08日 星期三 15:36:16 CST
# timedatectl 新版系统用于管理时间、时区等的软件,ubuntu/rocky均以内置,无需安装。
[root@ntpsrv ~]#timedatectl
Local time: 三 2014-10-08 15:36:50 CST # 中国区时间
Universal time: 三 2014-10-08 07:36:50 UTC # UTC时间
RTC time: 一 2025-07-07 12:55:14 # 硬件时间
Time zone: Asia/Shanghai (CST, +0800) # 当前时区
System clock synchronized: no # 是否同步时间
NTP service: active # NTP是否运行
RTC in local TZ: no # 硬件时间是否跟当前时区一致
[root@ntpsrv ~]#timedatectl --help # 常见选项
show Show properties of systemd-timedated
set-time TIME Set system time # 设置时间
set-timezone ZONE Set system time zone # 设置时区
set-local-rtc BOOL Control whether RTC is in local time # 设置RTC时区,1/0
set-ntp BOOL Enable or disable network time synchronization # 设置NTP开启1/0
2.1.2互联网时间/NTP
NTP 时间指的是通过 NTP(Network Time Protocol,网络时间协议) 同步后的网络设备时间,其核心是通过网络协议让多台计算机 / 设备的本地时钟与标准时间(通常是 UTC)保持一致,解决网络中设备时间不同步的问题。例如:随着时光流逝、元器件的老化等各种不可抗的因素,不同设备的本地时钟(如计算机、服务器、路由器等)会因硬件时钟精度差异(如晶振误差)逐渐产生偏差(“走时不准”)。
就会利用NTP让这些设备从权威时间源获取准确时间,实现全网时间同步。
- 常见NTP软件:
- ntpdate:老牌NTP软件,精度差,仅客户端,不推荐
- chrony:当下的主流、顶尖,可做客户端/服务器,推荐使用
- systemd-timesyncd:适合精度不高的情况下使用,比方个人电脑
# ntpdate 老牌NTP软件,现在已被chrony替代,优点:资历老、时间长,缺点:单次同步NTP服务器时间,精准度差,周期同步时间需要搭配计划任务。
# 安装示例
apt install ntpdate -y # Ubuntu系统
dnf install epel-release -y # redhat系列需要安装epel源
dnf install ntpdate -y
# 同步示例
ntpdate -s ntp.aliyun.com # 缓慢调整时间
# 同步时间相关脚本
#!/bin/bash
# 文件路径:/usr/local/sbin/ntpdate_sync.sh
ntpdate -s ntp.aliyun.com 2>&1 >> /var/log/ntpdate.log
# 利用脚本定时任务
0 * * * * /usr/local/sbin/ntpdate_sync.sh
# chronyd(现代替代方案)比 ntpd 更轻量,启动更快,对网络波动的适应性更强,是当前多数 Linux 发行版(如 CentOS 8+、Rocky Linux、Ubuntu 20.04+)的默认时间同步工具;同时支持客户端和服务器模式,配置简单。
# 安装示例
# Ubuntu/Debian
sudo apt install chrony -y
# CentOS/Rocky Linux
sudo dnf install chrony -y
# 注释或删除原有的pool行,添加以下内容
server ntp.aliyun.com iburst # 阿里云NTP服务器
server time1.aliyun.com iburst # 备用服务器
# 允许局域网客户端访问(根据实际网段修改),作为客户端时候可以不加这个
allow 192.168.1.0/24
allow 10.0.0.0/8
# 启用NTP服务器模式(可选,默认已启用)
local stratum 10 # 本地时钟层级(无外部源时使用)
sudo systemctl restart chronyd
sudo systemctl enable chronyd # 设置开机自启
# 查看同步状态,*表示OK
chronyc sources -v
# 这里有一个小知识,ntpdate可以利用chrony搭建的ntp服务器同步时间
# systemd-timesyncd Ubuntu 18.04 及以上版本默认使用 systemd-timesyncd 作为轻量级 NTP 客户端,无需安装 chrony 或 ntp,因此 timedatectl 会显示 NTP service: active。
[root@ntpsrv ~]#systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2025-07-07 07:39:48 UTC; 2h ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 567 (systemd-timesyn)
Status: "Synchronized to time server 1.2.3.4:123 (ntp.ubuntu.com)."
Tasks: 1 (limit: 4656)
Memory: 896.0K
CPU: 24ms
CGroup: /system.slice/systemd-timesyncd.service
└─567 /lib/systemd/systemd-timesyncd
[root@ntpsrv ~]#timedatectl timesync-status
Server: 1.2.3.4:123 (ntp.ubuntu.com)
Poll interval: 34min 8s (min: 32s; max: 34min 8s)
Packet count: 17
Min delay: 0.023ms
Avg delay: 0.031ms
Max delay: 0.047ms
Offset: +0.012ms
[root@ntpsrv ~]#cat /etc/systemd/timesyncd.conf # 配置文件
[Time]
# NTP=ntp.ubuntu.com pool.ntp.org # 主服务器
# FallbackNTP=time.cloudflare.com # 备用服务器,可以有多个
2.2chrony服务器演示
2.2.1前期规划
- 服务端:
- OS:rocky9.4
- IP:10.0.0.9
- 客户端:
- OS:rocky9.4
- IP:10.0.0.19
2.2.2 具体配置
服务器端:
# 安装chrony软件
[root@ntpsrv ~]#rpm -qi chrony || yum install -y chrony
Name : chrony
Version : 4.5
Release : 1.el9
Architecture: x86_64
Install Date: 2025年07月07日 星期一 13时51分35秒
Group : Unspecified
Size : 668659
License : GPLv2
Signature : RSA/SHA256, 2024年04月21日 星期日 01时43分53秒, Key ID 702d426d350d275d
Source RPM : chrony-4.5-1.el9.src.rpm
Build Date : 2024年04月21日 星期日 01时31分15秒
Build Host : pb-0330d196-d319-450c-b882-226a7b5efc95-b-x86-64
Packager : Rocky Linux Build System (Peridot) <releng@rockylinux.org>
Vendor : Rocky Enterprise Software Foundation
URL : https://chrony-project.org
Summary : An NTP client/server
Description :
chrony is a versatile implementation of the Network Time Protocol (NTP).
It can synchronise the system clock with NTP servers, reference clocks
(e.g. GPS receiver), and manual input using wristwatch and keyboard. It
can also operate as an NTPv4 (RFC 5905) server and peer to provide a time
service to other computers in the network.
# 编辑配置文件,以阿里云NTP为同步基础,并允许其他客户端利用此机器同步时间
[root@ntpsrv ~]#vi /etc/chrony.conf
# 仅增加或修改以下配置即可
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
allow 10.0.0.0/24
local stratum 10
# 重启服务
[root@ntpsrv ~]#systemctl restart chronyd
[root@ntpsrv ~]#systemctl status chronyd
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; preset: enabled)
Active: active (running) since Wed 2014-10-08 16:43:31 CST; 10 years 8 months ago
Docs: man:chronyd(8)
man:chrony.conf(5)
Process: 1537 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 1541 (chronyd)
Tasks: 1 (limit: 22952)
Memory: 1.0M
CPU: 25ms
CGroup: /system.slice/chronyd.service
└─1541 /usr/sbin/chronyd -F 2
# 查看同步状态,有*显示为成功
[root@ntpsrv ~]#chronyc sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ 203.107.6.88 2 6 177 8 +1231us[+1231us] +/- 20ms
^* 118.31.3.89 2 6 177 9 -1953us[-1337us] +/- 31ms
# 修改一个错误时间,等待时间修正
[root@ntpsrv ~]#date -s "20010101 15:36"
2001年 01月 01日 星期一 15:36:00 CST
[root@ntpsrv ~]#timedatectl
Local time: 一 2001-01-01 15:36:03 CST
Universal time: 一 2001-01-01 07:36:03 UTC
RTC time: 一 2025-07-07 14:01:51
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
NTP service: active
RTC in local TZ: no
# 检查时间漂移
[root@ntpsrv ~]#chronyc tracking
Reference ID : CB6B0658 (203.107.6.88)
Stratum : 3
Ref time (UTC) : Mon Jul 07 14:04:42 2025
System time : 773562304.000000000 seconds slow of NTP time # 偏差超过1000秒时需强制同步
Last offset : -773562304.000000000 seconds
RMS offset : 244621888.000000000 seconds
Frequency : 5.265 ppm slow
Residual freq : +27.178 ppm
Skew : 3.179 ppm
Root delay : 0.032277849 seconds
Root dispersion : 0.003727876 seconds
Update interval : 0.0 seconds
Leap status : Normal
# 强制手动同步时间
[root@ntpsrv ~]#chronyc -a makestep
200 OK
[root@ntpsrv ~]#timedatectl
Local time: 一 2025-07-07 22:07:37 CST
Universal time: 一 2025-07-07 14:07:37 UTC
RTC time: 一 2025-07-07 14:07:37
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
NTP service: active
RTC in local TZ: no
# 时间同步正常
[root@ntpsrv ~]#chronyc sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 203.107.6.88 2 6 377 22 -1142us[-2222us] +/- 18ms
^+ 116.62.13.223 2 6 77 22 +212us[ +212us] +/- 30ms
客户端:
# 方法1:
# 安装chrony软件,修改配置文件,NTP指向10.0.0.9
[root@client ~]#vi /etc/chrony.conf
[root@client ~]#cat /etc/chrony.conf
server 10.0.0.9 iburst
[root@client ~]#date -s "-10 year"
2015年 07月 07日 星期二 22:11:04 CST
[root@client ~]#systemctl restart chronyd
[root@client ~]#chronyc sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* loaclhost 3 6 17 23 -13us[ -34us] +/- 18ms
[root@client ~]#date
2025年 07月 07日 星期一 22:11:55 CST
# 方法2:
# 如果系统上还有ntpdate服务,可以直接同步时间
ntpdate -s 10.0.0.9
3.总结常见的日志服务管理的常见日志服务
一、本地系统日志服务
1. syslog(传统系统日志)
- 特点:
最早的 UNIX/Linux 日志标准,基于文本格式,通过 UDP/TCP 协议传输,支持多设备日志收集。 - 架构:
- 客户端:
syslogd进程(如 BSD syslogd)。 - 服务器:可接收其他主机的日志。
- 客户端:
- 配置文件:
/etc/syslog.conf(传统)或/etc/rsyslog.conf(若使用 rsyslog)。
- 日志级别:
从低到高:debug、info、notice、warning、err、crit、alert、emerg。 - 适用场景:
兼容旧系统,简单日志记录,需手动文本解析。
2. rsyslog(增强型 syslog)
- 特点:
syslog 的高性能替代品,支持 TCP 传输、日志过滤、模板化输出及 JSON 格式,可处理百万级日志 / 秒。 - 架构:
单进程实现,支持客户端 / 服务器模式,可对接数据库或消息队列(如 Kafka)。 - 配置文件:
/etc/rsyslog.conf(主配置)、/etc/rsyslog.d/目录下的自定义配置。 - 核心功能:
- 日志压缩传输(
imtcp/imudp模块)。 - 正则表达式过滤(
if...then语法)。 - 持久化存储(避免服务重启丢失日志)。
- 日志压缩传输(
- 适用场景:
中小型企业本地日志收集,需高效处理和结构化输出的场景。
3. journald(systemd 日志)
- 特点:
systemd 内置日志服务,使用二进制格式存储(journalctl查看),集成系统事件追踪,支持实时查询和过滤。 - 架构:
与 systemd 深度整合,日志存储在/var/log/journal/(默认),支持压缩和索引。 - 配置文件:
/etc/systemd/journald.conf(主配置),可设置日志保留时间、存储大小等。 - 核心功能:
- 按进程、用户、单元(unit)过滤日志。
- 支持日志回滚(
journalctl -b -1查看上一次启动日志)。 - 与 systemd 服务状态关联(如查看服务启动失败日志)。
- 适用场景:
Linux 系统(如 CentOS 7+/Ubuntu 16.04+)的本地日志管理,需快速定位系统或服务问题。
二、集中式日志服务
1. ELK Stack(Elasticsearch+Logstash+Kibana)
- 特点:
开源日志分析平台,Elasticsearch 存储和检索日志,Logstash 收集 / 处理日志,Kibana 可视化展示。 - 架构:
- Logstash:支持多源输入(文件、syslog、API),可过滤、转换日志(如 JSON 格式化)。
- Elasticsearch:分布式搜索引擎,支持 PB 级日志存储和实时查询。
- Kibana:Web 界面,提供仪表盘、图表和日志搜索功能。
- 变种:
- EFK Stack:Fluentd 替代 Logstash,更轻量高效。
- ELK+Beats:Beats(如 Filebeat)作为轻量级日志采集器。
- 适用场景:
大型企业多服务器日志集中管理,需实时分析、告警和可视化。
2. Graylog
- 特点:
开源集中式日志管理系统,基于 Elasticsearch 存储,支持日志收集、分析和告警,界面简洁。 - 架构:
- Graylog Server:处理日志接收、处理和存储。
- Elasticsearch:存储和检索日志。
- MongoDB:存储配置和元数据。
- 核心功能:
- 日志聚合(按时间段、关键词统计)。
- 自定义告警规则(如日志中出现 “error” 时触发通知)。
- 适用场景:
对可视化和告警需求较高的企业,或需要替代 ELK 的轻量级方案。
3. Splunk
- 特点:
商业集中式日志管理工具,功能强大,支持实时日志分析、机器学习告警和合规审计。 - 架构:
- Forwarder:轻量级采集器,支持多平台。
- Indexer:处理和存储日志,支持集群部署。
- Search Head:提供搜索和可视化界面。
- 核心功能:
- 专利的日志解析语言(SPL),支持复杂查询。
- 合规性报表(如 PCI-DSS、HIPAA)。
- 适用场景:
对安全性、合规性要求高的企业(如金融、医疗),或预算充足的大型组织。
三、日志轮转与管理工具
1. logrotate(日志轮转)
- 特点:
系统默认日志轮转工具,按时间、大小或规则压缩、归档旧日志,避免磁盘占用过高。 - 配置文件:
- 全局配置:
/etc/logrotate.conf。 - 自定义配置:
/etc/logrotate.d/目录下的文件(如/etc/logrotate.d/httpd)。
- 全局配置:
- 核心参数:
daily/weekly/monthly:轮转周期。rotate 5:保留 5 个历史日志。compress:轮转时压缩日志。
- 适用场景:
所有 Linux 系统的本地日志文件管理,避免日志膨胀。
2. syslog-ng(增强型 syslog)
- 特点:
类似 rsyslog 的高性能日志系统,支持多线程、复杂过滤和多目标输出(如数据库、云存储)。 - 配置文件:
/etc/syslog-ng/syslog-ng.conf,支持模块化配置。 - 核心功能:
- 日志内容过滤(如按 IP、用户过滤)。
- 支持 IPv6 和 TLS 加密传输。
- 适用场景:
需高可靠性和复杂路由策略的企业日志系统。
四、安全与审计日志服务
1. auditd(系统审计)
- 特点:
Linux 内核审计系统,记录用户行为、文件访问、系统调用等,用于合规性审计和安全追踪。 - 架构:
auditd守护进程收集审计事件,存储于/var/log/audit/audit.log。ausearch、aureport等工具查询审计日志。
- 配置文件:
/etc/audit/auditd.conf(服务配置)、/etc/audit/rules.d/(审计规则)。 - 适用场景:
金融、政府等对合规性要求高的行业,需追踪敏感操作。
2. Windows Event Log(Windows 日志)
- 特点:
Windows 系统的日志服务,分为应用程序、安全、系统等日志,通过 Event Viewer 查看。 - 集中管理:
- 可通过 Windows Event Forwarding(WEF)或第三方工具(如 Splunk)收集到 Linux 服务器。
- 适用场景:
Windows 服务器日志管理,混合 IT 环境的日志整合。
五、容器与云原生日志服务
1. Fluentd/Fluent Bit
- 特点:
轻量级容器日志收集器,支持 Docker、Kubernetes,可将日志发送至 ELK、Graylog 等平台。 - 核心优势:
- 资源占用低(Fluent Bit 基于 C 语言,适合边缘计算)。
- 插件丰富(支持 JSON、Prometheus 格式输出)。
- 适用场景:
容器化应用(如 K8s 集群)的日志收集,需低资源消耗的场景。
2. Loki(轻量级日志)
- 特点:
Grafana 开源日志系统,与 Prometheus 集成,不索引日志内容,仅索引元数据,存储成本低。 - 架构:
- 支持多租户,适合微服务架构。
- 与 Grafana 联动,在 Dashboard 中查看日志。
- 适用场景:
对存储成本敏感的云原生环境,或仅需按标签过滤日志的场景。
六、日志服务选型建议
- 小型系统 / 单机:
- 本地:
journald(Linux)+logrotate。 - 轻量集中管理:
rsyslog服务器 + 客户端。
- 本地:
- 企业级集中管理:
- 开源:ELK Stack(Filebeat+Logstash+Elasticsearch+Kibana)。
- 商业:Splunk(功能全面但成本高)。
- 容器环境:
- Fluent Bit + Loki(轻量)或 Fluentd + Elasticsearch(全功能)。
- 安全审计:
- Linux:
auditd+ 集中式日志平台(存储审计日志)。 - Windows:Event Log + 日志收集工具(如 Splunk)。
- Linux:
4.总结日志分类, 优先级别。图文并茂解释应用如何将日志发到rsyslog,并写到目标。
4.1日志分类和优先级
从功能或程序上对日志进行分类,rsyslog将相同类型的日志放在一个文件便于管理。
# syslog 内置分类
LOG_AUTH #auth 安全和认证相关的日志
LOG_AUTHPRIV #authpriv 安全和认证相关的日志,私有
LOG_CRON #cron 系统定时任务 crontab 与 at 产生的相关日志
LOG_DAEMON #daemon 各守护进程产生的日志
LOG_FTP #ftp ftp守护进程产生的日志
LOG_KERN #kern 内核产生的日志
LOG_LOCALO -- LOG_LOCAL7 #local0-local7 自定义分类
LOG_LPR #lpr 打印服务日志
LOG_MAIL #mail 邮件服务日志
LOG_NEWS #news 网络新闻服务产生的日志
LOG_SYSLOG #syslog syslogd 服务自己的日志
LOG_USER #user 用户等级
LOG_UUCP #uucp uucp子系统的日志信息
* #通配符,代表所有分类
ps:具体来说,每个 LOG_LOCAL 设施(从 LOG_LOCAL0 到 LOG_LOCAL7)都可以被视为一个自定义的日
志通道,用于收集和记录来自自定应用程序或服务的日志信息。
示例:
# 编辑主机端rsyslog配置文件,3台主机都需要配置
[root@client1 ~]#vi /etc/rsyslog.conf
local6.* @@10.0.0.34:514 # 转发local6日志到远程主机
# 或者直接追加
echo "local6.* @@10.0.0.34:514" >> /etc/rsyslog.conf
# 编辑ssh配置文件,添加一行配置
[root@client1 ~]#vi /etc/ssh/sshd_config
SyslogFacility LOCAL6
# 或者直接追加
echo "SyslogFacility LOCAL6" >> /etc/ssh/sshd_config
日志记录的优先级(级别),从高到低,比如设定了waring级别,就会记录waring级别及以上的日志
# rsyslog 内置优先级分类(从高到低),设置优先级时仅记录设定优先级及更高优先级的日志
LOG_EMERG #emerg/panic 紧急,致命错误
LOG_ALERT #alert 警告,当前状态必须立即进行纠正
LOG_CRIT #crit 关键状态的警告,例如硬件故障
LOG_ERR #err/error 其它错误
LOG_WARNING #warning/warn 警告级别的信息
LOG_NOTICE #notice 通知级别的信息
LOG_INFO #info 通告级别的信息
LOG_DEBUG #debug 调试程序时的信息
none #不需要任何日志
#panic,error,warn在新版中被弃用,不建议使用
4.2应用转发日志到syslog文件

- 应用程序通过系统日志接口(如 syslog 函数、日志库)生成日志;
- 日志通过本地接口(如 Unix 套接字
/dev/log)或网络(TCP/UDP)发送到 rsyslog; - rsyslog 根据配置文件中的规则(过滤、格式化)处理日志;
- 最终将处理后的日志写入指定的目标文件。
# 主配置文件中最后一行表示可以有子配置文件
$IncludeConfig /etc/rsyslog.d/*.conf
系统中常见日志文件:
/var/log/messages:红帽系(RHEL/CentOS)主日志,记录核心系统事件、服务状态及非调试消息,是排查系统问题的首要参考。/var/log/syslog:Debian 系(Ubuntu/Debian)主日志,记录系统及应用常规事件,内容较全面,替代红帽系的messages。/var/log/kern.log:记录内核及硬件事件(如驱动加载、I/O 错误),是排查内核与硬件问题的核心日志。/var/log/auth.log(Debian)//var/log/secure(红帽):记录用户登录 / 注销、认证失败、权限变更等安全事件,是安全审计的关键日志。/var/log/boot.log:记录系统启动过程中服务启动结果(成功 / 失败)及启动阶段的关键事件。/var/log/cron:记录 crontab 定时任务的执行时间、用户及结果,用于排查定时任务问题。/var/log/maillog(红帽)//var/log/mail.log(Debian):记录邮件服务(Postfix/Sendmail 等)的发送 / 接收过程及错误,用于邮件问题排查。/var/log/wtmp//var/log/btmp:二进制文件,wtmp记用户成功登录 / 注销历史(用last查看),btmp记失败登录尝试(用lastb查看)。/var/log/lastlog:记录每个用户最后一次登录的时间和 IP,用lastlog命令查看。- Web 服务器日志(如
/var/log/apache2///var/log/nginx/下的access.log/error.log):Web 服务器日志,access.log记 HTTP 请求详情,error.log记运行错误。 - 数据库日志(如
/var/log/mysql/error.log):记录数据库(MySQL/MariaDB 等)的启动错误、连接失败及查询异常。
5.完成功能,将3个主机(要求主机名为ip)的ssh日志,通过rsyslog服务将ssh日志写入到集中的主机上的rsyslog服务,写入到/var/log/all-ssh.log文件
5.1日志服务器端配置
# rsyslog默认都已安装,开启端口监听
[root@logsrv ~]#vi /etc/rsyslog.conf
# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")
# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")
# 设置日志格式及转存路径
[root@logsrv ~]#cat /etc/rsyslog.d/ssh_log.conf
# /etc/rsyslog.d/ssh_log.conf
$template AllSSHFormat, "%TIMESTAMP% %fromhost-ip% (%HOSTNAME%) %syslogtag% %msg%\n"
# 按 IP 分类存储(排除本地)
if $fromhost-ip != '127.0.0.1' then /var/log/all-ssh.log;AllSSHFormat
& ~
# 重启服务
[root@logsrv ~]#systemctl restart rsyslog
5.2主机端配置转发
# 编辑主机端rsyslog配置文件,3台主机都需要配置
[root@client1 ~]#vi /etc/rsyslog.conf
local6.* @@10.0.0.34:514 # 转发local6日志到远程主机
# 或者直接追加
echo "local6.* @@10.0.0.34:514" >> /etc/rsyslog.conf
# 编辑ssh配置文件,添加一行配置
[root@client1 ~]#vi /etc/ssh/sshd_config
SyslogFacility LOCAL6
# 或者直接追加
echo "SyslogFacility LOCAL6" >> /etc/ssh/sshd_config
# 重启相关服务
[root@client1 ~]#systemctl restart ssh rsyslog
5.3ssh测试
# ssh测试主机连接,查看服务器端是否有日志生成
PS C:\Users\Administrator> ssh root@10.0.0.24
[root@logsrv ~]#tail /var/log/all-ssh.log
Jul 8 13:19:06 10.0.0.4 (client1) sshd[34358]: Disconnected from user root 10.0.0.1 port 57175
Jul 8 13:19:13 10.0.0.4 (client1) sshd[34441]: Accepted password for root from 10.0.0.1 port 57468 ssh2
Jul 8 13:19:15 10.0.0.4 (client1) sshd[34441]: Received disconnect from 10.0.0.1 port 57468:11: disconnected by user
Jul 8 13:19:15 10.0.0.4 (client1) sshd[34441]: Disconnected from user root 10.0.0.1 port 57468
Jul 8 13:19:19 10.0.0.14 (client2) sshd[1579]: Accepted password for root from 10.0.0.1 port 57470 ssh2
Jul 8 13:19:21 10.0.0.14 (client2) sshd[1579]: Received disconnect from 10.0.0.1 port 57470:11: disconnected by user
Jul 8 13:19:21 10.0.0.14 (client2) sshd[1579]: Disconnected from user root 10.0.0.1 port 57470
Jul 8 13:19:27 10.0.0.24 (client3) sshd[1640]: Accepted password for root from 10.0.0.1 port 57481 ssh2
Jul 8 13:19:28 10.0.0.24 (client3) sshd[1640]: Received disconnect from 10.0.0.1 port 57481:11: disconnected by user
Jul 8 13:19:28 10.0.0.24 (client3) sshd[1640]: Disconnected from user root 10.0.0.1 port 57481
6.总结/var/log/目录下常用日志文件作用。
一、系统核心日志
/var/log/messages- 作用:系统主要日志文件,记录系统启动和运行时的通用消息,包括服务启动 / 停止、硬件检测、系统错误等。
- 包含内容:内核消息、服务状态变更、一般性警告或错误。
/var/log/dmesg- 作用:记录内核启动时的日志信息,包括硬件检测、驱动加载等底层信息。
- 查看方式:可通过
dmesg命令直接查看,或查看该文件的历史记录。
/var/log/boot.log- 作用:记录系统启动过程中服务的启动信息,用于排查启动阶段的问题。
二、安全与认证日志
/var/log/secure- 作用:记录安全相关事件,如用户登录 / 登出、认证失败、sudo 操作、SSH 连接尝试等。
- 包含内容:Failed login attempts、sudo 权限使用、SSH 暴力破解尝试等。
/var/log/auth.log(Debian/Ubuntu)- 作用:类似
secure,记录认证和授权相关日志,如用户登录、密码验证等。
- 作用:类似
/var/log/wtmp- 作用:二进制文件,记录所有用户的登录和登出历史(可通过
last命令查看)。
- 作用:二进制文件,记录所有用户的登录和登出历史(可通过
/var/log/lastlog- 作用:记录每个用户最后一次登录的时间和 IP 地址(可通过
lastlog命令查看)。
- 作用:记录每个用户最后一次登录的时间和 IP 地址(可通过
三、服务与应用日志
/var/log/httpd/或/var/log/apache2/- 作用:Apache Web 服务器的日志目录,包含:
access_log:记录 HTTP 访问请求(客户端 IP、请求资源、状态码等)。error_log:记录服务器错误、异常或警告信息。
- 作用:Apache Web 服务器的日志目录,包含:
/var/log/nginx/- 作用:Nginx Web 服务器的日志目录,结构类似 Apache,包含访问日志和错误日志。
/var/log/mysql/或/var/log/mariadb/- 作用:MySQL/MariaDB 数据库的日志,包含错误日志(
error.log)、慢查询日志(slow.log)等。
- 作用:MySQL/MariaDB 数据库的日志,包含错误日志(
/var/log/cron- 作用:记录定时任务(crontab)的执行情况,包括任务启动、完成或错误信息。
/var/log/mail.log或/var/log/maillog- 作用:记录邮件服务(如 Postfix、Sendmail)的发送和接收日志。
/var/log/dpkg.log(Debian/Ubuntu)- 作用:记录软件包(deb)的安装、卸载和配置变更历史。
/var/log/yum.log(CentOS/RHEL)- 作用:记录 Yum 包管理器的操作日志(安装、更新、删除软件包)。
四、系统运行日志
/var/log/syslog(Debian/Ubuntu)- 作用:系统通用日志,包含内核之外的应用程序日志,类似
messages但更侧重于用户空间服务。
- 作用:系统通用日志,包含内核之外的应用程序日志,类似
/var/log/kern.log(Debian/Ubuntu)- 作用:专门记录内核相关的消息和错误。
/var/log/daemon.log(Debian/Ubuntu)- 作用:记录后台服务(daemon)的运行日志,如网络服务、硬件驱动等。
五、用户与会话日志
/var/log/utmp- 作用:二进制文件,记录当前登录的用户会话信息(可通过
who或w命令查看)。
- 作用:二进制文件,记录当前登录的用户会话信息(可通过
/var/log/xsession-errors- 作用:记录 X Window 系统(图形界面)的启动和运行错误。
六、日志管理相关
/var/log/logrotate.log- 作用:记录日志轮转工具(logrotate)的操作历史,如日志切割、压缩等。
/var/log/journal/(systemd 系统)- 作用:存储 systemd 日志(通过
journalctl命令查看),包含更详细的系统和服务日志,支持结构化查询。
- 作用:存储 systemd 日志(通过
七、其他常见日志
/var/log/sssd.log:记录 SSSD(系统安全服务守护进程)的认证和授权日志。/var/log/audit/:存储审计日志(由 Linux 审计系统生成,记录系统活动和安全事件)。/var/log/ntp.log:记录 NTP(网络时间协议)服务的同步日志。/var/log/samba/:记录 Samba(文件共享服务)的访问和错误日志。
日志查看与管理
- 文本日志:直接通过
cat、less、grep等命令查看。 - 二进制日志:通过
last、who、lastlog等工具解析。 - systemd 日志:使用
journalctl命令查询(如journalctl -u httpd查看 Apache 日志)。 - 日志轮转:通过
/etc/logrotate.conf和/etc/logrotate.d/目录下的配置文件管理日志大小和留存时间。
7.使用inotify + rsync和sersync实现文件的同步,并且总结两种方式的优缺点
7.1inotify+rsync演示
- 文件服务器(同步备份):
- OS:Ubuntu 24.04.2 LTS
- IP:10.0.0.4
- rsync服务端授权文件及路径:/etc/rsyncd.secrets(rsyncuser:123456)
- 同步目录:/data/rsync
- web服务器(被备份):
- OS:Ubuntu 24.04.2 LTS
- IP:10.0.0.14
- rsync客户端授权文件及路径:/data/scripts/www_rsync.pwd (123456)
- rsync客户端log文件路径:/data/scripts/www_rsync.log
- 备份目录:/data/www
文件服务器端配置:
# 安装rsync,设置为rsync服务端
[root@filesrv ~]#apt update;apt install -y rsync
[root@filesrv ~]#systemctl enable --now rsync
Synchronizing state of rsync.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable rsync
Created symlink /etc/systemd/system/multi-user.target.wants/rsync.service → /usr/lib/systemd/system/rsync.service.
# 服务并未启动
[root@filesrv ~]#systemctl status rsync
○ rsync.service - fast remote file copy program daemon
Loaded: loaded (/usr/lib/systemd/system/rsync.service; enabled; preset: enabled)
Active: inactive (dead)
Condition: start condition unmet at Mon 2025-07-07 16:37:55 UTC; 14s ago
└─ ConditionPathExists=/etc/rsyncd.conf was not met
Docs: man:rsync(1)
man:rsyncd.conf(5)
Jul 07 16:37:55 ubuntu24040201 systemd[1]: rsync.service - fast remote file copy program daemon was skipped because of an unmet condition check (Condi>
lines 1-9/9 (END)
# 缺少配置文件,创建配置文件
[root@filesrv ~]#touch /etc/rsyncd.conf
# 再次启动服务
[root@filesrv ~]#systemctl start rsync
[root@filesrv ~]#systemctl status rsync
● rsync.service - fast remote file copy program daemon
Loaded: loaded (/usr/lib/systemd/system/rsync.service; enabled; preset: enabled)
Active: active (running) since Mon 2025-07-07 16:38:44 UTC; 2s ago
Docs: man:rsync(1)
man:rsyncd.conf(5)
Main PID: 2062 (rsync)
Tasks: 1 (limit: 4554)
Memory: 1.3M (peak: 1.6M)
CPU: 6ms
CGroup: /system.slice/rsync.service
└─2062 /usr/bin/rsync --daemon --no-detach
Jul 07 16:38:44 ubuntu24040201 systemd[1]: Started rsync.service - fast remote file copy program daemon.
Jul 07 16:38:44 ubuntu24040201 rsyncd[2062
# 编辑配置文件
[root@filesrv ~]#vi /etc/rsyncd.conf
[root@filesrv ~]#cat /etc/rsyncd.conf
# 全局配置
uid = root
gid = root
use chroot = no
max connections = 10
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
# 模块定义
[dir1]
path = /data/rsync
read only = no
list = yes
auth users = rsyncuser
secrets file = /etc/rsyncd.secrets
hosts allow = 10.0.0.0/24
hosts deny = *
timeout = 300
# rsync服务端创建目录
[root@filesrv ~]#mkdir /data/rsync -p
[root@filesrv ~]#echo "rsyncuser:123456" > /etc/rsyncd.secrets
[root@filesrv ~]#chmod 600 /etc/rsyncd.secrets
[root@filesrv ~]#systemctl restart rsync
[root@filesrv ~]#systemctl status rsync
● rsync.service - fast remote file copy program daemon
Loaded: loaded (/usr/lib/systemd/system/rsync.service; enabled; preset: enabled)
Active: active (running) since Mon 2025-07-07 16:46:05 UTC; 7s ago
Docs: man:rsync(1)
man:rsyncd.conf(5)
Main PID: 2108 (rsync)
Tasks: 1 (limit: 4554)
Memory: 836.0K (peak: 932.0K)
CPU: 6ms
CGroup: /system.slice/rsync.service
└─2108 /usr/bin/rsync --daemon --no-detach
Jul 07 16:46:05 ubuntu24040201 systemd[1]: Started rsync.service - fast remote file copy program daemon.
web服务器端配置
# web服务器,作为rsync客户端也要安装rsync软件
[root@websrv ~]#apt update;apt install -y rsync
[root@websrv ~]#mkdir -p /data/scripts/
[root@websrv ~]#mkdir -p /data/www
[root@websrv ~]#cd /data/scripts/
# 创建同步脚本
[root@websrv ~]#cat /data/scripts/rsync.sh
# 定制环境变量
USER="rsyncuser"
PASS_FILE="/data/scripts/www_rsync.pwd"
REMOTE_HOST="10.0.0.4"
SRC="/data/www"
REMOTE_DIR="dir1"
DEST="${USER}@${REMOTE_HOST}::${REMOTE_DIR}"
LOG_FILE="/data/scripts/www_rsync.log" # 注意:scrips 可能是 scripts 的拼写错误
# 准备工作环境
ubuntu_install_inotify() {
if [ ! -f /usr/bin/rsync ]; then
apt install inotify-tools -y
apt install rsync -y
fi
}
centos_install_inotify() {
if [ ! -f /usr/bin/rsync ]; then
yum install inotify-tools -y
yum install rsync -y
fi
}
install_inotify() {
os_type=$(grep ubuntu /etc/issue >/dev/null && echo "ubuntu" || echo "centos")
if [ "${os_type}" == "ubuntu" ]; then
ubuntu_install_inotify
else
centos_install_inotify
fi
}
# 不间断监控指定目录中的特定事件,当目录中有事件发生变化时,调用 rsync 命令进行同步
rsync_file() {
inotifywait -mrq --exclude=".*\.swp" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} | while read DATE TIME DIR FILE; do
FILEPATH=${DIR}${FILE}
rsync -az --delete --password-file=${PASS_FILE} $SRC $DEST && echo "At ${TIME} on ${DATE}, file ${FILEPATH} was backup via rsync" >> ${LOG_FILE}
done
}
# 主函数
main() {
install_inotify
rsync_file
}
# 执行主函数
main
# 创建密码文件,更改文件权限
[root@websrv /data/scripts]#cat www_rsync.pwd
123456
[root@websrv /data/scripts]#chmod 600 www_rsync.pwd
[root@websrv /data/scripts]#apt install tree -y &> /dev/null
# 查看目录结构
[root@websrv /data/scripts]#tree /data/
/data/
├── scripts
│ ├── rsync.sh
│ └── www_rsync.pwd
└── www
3 directories, 2 files
# 拷贝测试文件
[root@websrv /data/scripts]#cp /etc/fstab /etc/issue /data/www
# 测试和rsync服务器的连接
[root@websrv ~]#rsync --list-only --password-file=/data/scripts/www_rsync.pwd rsyncuser@10.0.0.4::dir1
# 后台运行脚本
[root@websrv ~]#bash /data/scripts/rsync.sh &
[1] 34639
测试文件更改是否会同步备份文件到文件服务器
# 测试文件同步功能
# 客户端上发起文件修改
[root@websrv ~]#cat /etc/fstab >> /data/www/os-release
# 文件服务器观察文件变化
[root@filesrv /data/rsync/www]#ll
total 24
drwxr-xr-x 2 root root 4096 Jul 7 16:55 ./
drwxr-xr-x 3 root root 4096 Jul 7 17:16 ../
-rw-r--r-- 1 root root 5 Jul 7 17:13 1.txt
-rw-r--r-- 1 root root 652 Jul 7 16:53 fstab
-rw-r--r-- 1 root root 26 Jul 7 16:53 issue
-rw-r--r-- 1 root root 800 Jul 7 17:16 os-release
[root@filesrv /data/rsync/www]#ll
total 24
drwxr-xr-x 2 root root 4096 Jul 7 16:55 ./
drwxr-xr-x 3 root root 4096 Jul 7 17:16 ../
-rw-r--r-- 1 root root 5 Jul 7 17:13 1.txt
-rw-r--r-- 1 root root 652 Jul 7 16:53 fstab
-rw-r--r-- 1 root root 26 Jul 7 16:53 issue
-rw-r--r-- 1 root root 2104 Jul 7 17:23 os-release
7.2sersync演示
- 文件服务器(同步备份):
- OS:Ubuntu 24.04.2 LTS
- IP:10.0.0.4
- rsync服务端授权文件及路径:/etc/rsyncd.secrets(rsyncuser:123456)
- 同步目录:/data/rsync
- web服务器(被备份):
- OS:Ubuntu 24.04.2 LTS
- IP:10.0.0.14
- rsync客户端授权文件及路径:/etc/rsyncd.pwd(123456)
- 备份目录:/data/www
文件服务器端配置:
# 安装rsync,设置为rsync服务端
[root@filesrv ~]#apt update;apt install -y rsync
[root@filesrv ~]#systemctl enable --now rsync
Synchronizing state of rsync.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable rsync
Created symlink /etc/systemd/system/multi-user.target.wants/rsync.service → /usr/lib/systemd/system/rsync.service.
# 服务并未启动
[root@filesrv ~]#systemctl status rsync
○ rsync.service - fast remote file copy program daemon
Loaded: loaded (/usr/lib/systemd/system/rsync.service; enabled; preset: enabled)
Active: inactive (dead)
Condition: start condition unmet at Mon 2025-07-07 16:37:55 UTC; 14s ago
└─ ConditionPathExists=/etc/rsyncd.conf was not met
Docs: man:rsync(1)
man:rsyncd.conf(5)
Jul 07 16:37:55 ubuntu24040201 systemd[1]: rsync.service - fast remote file copy program daemon was skipped because of an unmet condition check (Condi>
lines 1-9/9 (END)
# 缺少配置文件,创建配置文件
[root@filesrv ~]#touch /etc/rsyncd.conf
# 再次启动服务
[root@filesrv ~]#systemctl start rsync
[root@filesrv ~]#systemctl status rsync
● rsync.service - fast remote file copy program daemon
Loaded: loaded (/usr/lib/systemd/system/rsync.service; enabled; preset: enabled)
Active: active (running) since Mon 2025-07-07 16:38:44 UTC; 2s ago
Docs: man:rsync(1)
man:rsyncd.conf(5)
Main PID: 2062 (rsync)
Tasks: 1 (limit: 4554)
Memory: 1.3M (peak: 1.6M)
CPU: 6ms
CGroup: /system.slice/rsync.service
└─2062 /usr/bin/rsync --daemon --no-detach
Jul 07 16:38:44 ubuntu24040201 systemd[1]: Started rsync.service - fast remote file copy program daemon.
Jul 07 16:38:44 ubuntu24040201 rsyncd[2062
# 编辑配置文件
[root@filesrv ~]#vi /etc/rsyncd.conf
[root@filesrv ~]#cat /etc/rsyncd.conf
# 全局配置
uid = root
gid = root
use chroot = no
max connections = 10
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
# 模块定义
[dir1]
path = /data/rsync
read only = no
list = yes
auth users = rsyncuser
secrets file = /etc/rsyncd.secrets
hosts allow = 10.0.0.0/24
hosts deny = *
timeout = 300
# rsync服务端创建目录
[root@filesrv ~]#mkdir /data/rsync -p
[root@filesrv ~]#echo "rsyncuser:123456" > /etc/rsyncd.secrets
[root@filesrv ~]#chmod 600 /etc/rsyncd.secrets
[root@filesrv ~]#systemctl restart rsync
[root@filesrv ~]#systemctl status rsync
● rsync.service - fast remote file copy program daemon
Loaded: loaded (/usr/lib/systemd/system/rsync.service; enabled; preset: enabled)
Active: active (running) since Mon 2025-07-07 16:46:05 UTC; 7s ago
Docs: man:rsync(1)
man:rsyncd.conf(5)
Main PID: 2108 (rsync)
Tasks: 1 (limit: 4554)
Memory: 836.0K (peak: 932.0K)
CPU: 6ms
CGroup: /system.slice/rsync.service
└─2108 /usr/bin/rsync --daemon --no-detach
Jul 07 16:46:05 ubuntu24040201 systemd[1]: Started rsync.service - fast remote file copy program daemon.
web服务器:
# web服务器,作为rsync客户端也要安装rsync软件
[root@websrv ~]#apt update;apt install -y rsync
# 创建需要备份的目录
[root@websrv ~]#mkdir -p /data/www
# 下载sersync源码,并解压移动至/usr/local/sersync
[root@websrv ~]#mkdir /data/softs
[root@websrv /data/softs]#tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@websrv /data/softs]#mv GNU-Linux-x86/ /usr/local/sersync
[root@websrv /usr/local/sersync]#ll
total 1780
drwxr-xr-x 2 root root 4096 Oct 26 2011 ./
drwxr-xr-x 11 root root 4096 Jul 8 11:24 ../
-rwxr-xr-x 1 root root 2214 Oct 26 2011 confxml.xml*
-rwxr-xr-x 1 root root 1810128 Oct 26 2011 sersync2*
# 备份配置文件
[root@websrv /usr/local/sersync]#cp confxml.xml{,.bak}
# 编辑配置文件
[root@websrv /usr/local/sersync]#cat confxml.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<filter start="false"> # 关闭
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="true"/> # 开启
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="true"/> # 开启
<modify start="true"/> # 开启
</inotify>
<sersync>
<localpath watch="/data/www"> # 本地客户端需要备份的目录
<remote ip="10.0.0.4" name="dir1"/> # rsync服务器的地址和模块名,这里就是filesrv的目录
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="rsyncuser" passwordfile="/etc/rsyncd.pwd"/> # 开启认证并指定账号和密码文件
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>
<plugin name="command">
<param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin>
<plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
</head>
# 先利用rsync测试和rsync服务器的连通是否正常
[root@websrv ~]#rsync --list-only --password-file=/etc/rsyncd.pwd rsyncuser@10.0.0.4::dir1
drwxr-xr-x 4,096 2025/07/08 11:20:53 .
# 运行sersync2,后台运行、指定配置文件
[root@websrv /usr/local/sersync]#./sersync2 -dro ./confxml.xml
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
option: -d run as a daemon
option: -r rsync all the local files to the remote servers before the sersync work
option: -o config xml name: ./confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
will ignore the inotify createFile event
daemon start,sersync run behind the console
use rsync password-file :
user is rsyncuser
passwordfile is /etc/rsyncd.pwd
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12 = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads)
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /data/www && rsync -artuz -R --delete ./ rsyncuser@10.0.0.4::dir1 --password-file=/etc/rsyncd.pwd >/dev/null 2>&1
run the sersync:
watch path is: /data/www # 显示监听的目录
# 查看进程显示
[root@websrv ~]#ps aux |grep confxml
root 2294 0.0 0.0 92340 1280 ? Ssl 11:36 0:00 ./sersync2 -dro ./confxml.xml
root 2311 0.0 0.0 6544 2304 pts/1 S+ 11:36 0:00 grep --color=auto confxml
测试文件更改是否会同步备份文件到文件服务器
# 客户端拷贝文件到www目录后观察服务器端文件变化、追加内容后再观察变化
[root@websrv ~]#cp /etc/fstab /etc/issue /data/www/
[root@websrv ~]#cat /etc/fstab >> /data/www/fstab
# 服务器端变化
[root@filesrv ~]#ll /data/rsync/
total 16
drwxr-xr-x 2 root root 4096 Jul 8 11:37 ./
drwxr-xr-x 3 root root 4096 Jul 8 11:20 ../
-rw-r--r-- 1 root root 652 Jul 8 11:37 fstab
-rw-r--r-- 1 root root 26 Jul 8 11:37 issue
[root@filesrv ~]#ll /data/rsync/
total 16
drwxr-xr-x 2 root root 4096 Jul 8 11:37 ./
drwxr-xr-x 3 root root 4096 Jul 8 11:20 ../
-rw-r--r-- 1 root root 1304 Jul 8 11:37 fstab
-rw-r--r-- 1 root root 26 Jul 8 11:37 issue
1.inotify+rsync方案:
通过 inotify 监控文件系统事件(如增删改),触发 rsync 进行增量同步。rsync 通过比对源目录和目标目录的差异,仅传输变化部分。
- 优点
- 实时性高:inotify 直接监控文件变化,触发同步无延迟。
- 资源占用低:仅传输差异数据,适合小规模数据同步。
- 灵活性强:可自定义脚本逻辑,适配复杂场景(如多级目录过滤)。
- 缺点
- 并发处理弱:当文件变化超过 200 个(如批量上传)时,同步延迟显著增加。
- 事件过滤不足:无法区分临时文件(如 vim 的 .swp)或重复操作,导致冗余同步。
- 单线程限制:默认单线程调用 rsync,大文件同步效率低。
2.sersync方案:
基于 inotify 实现,但增加了事件过滤、多线程同步和失败重试机制。通过 XML 配置文件定义同步策略,支持定时全量同步。
- 优点:
- 高效过滤机制:自动过滤临时文件和重复事件(如目录删除时的多余事件),减少冗余同步。
- 多线程加速:支持多进程并发同步大文件,提升效率。
- 容错能力强:内置失败队列,失败文件会定时重试;支持定时全量同步(默认 10 小时)。
- 配置简单:提供静态编译的二进制文件和默认配置,部署便捷。
- 缺点:
- 重试机制局限:失败队列仅重试一次,若仍失败则清空队列,可能导致数据不一致。
- 资源占用较高:多线程和定时同步功能可能增加 CPU 和内存消耗。
- 大文件处理缺陷:对超大文件(如 TB 级)的同步效率仍依赖网络带宽和 rsync 性能。


被折叠的 条评论
为什么被折叠?



