相关配置文件配置说明

rsyncd配置选项说明

全局参数 (Global Parameters)
motd file指定一个消息文件,当客户连接时显示该文件内容(Message of the Day)。
pid file指定 rsync 守护进程的 PID 文件路径。
port指定守护进程监听的端口,默认为 873。
address指定监听的 IP 地址。如果服务器有多个 IP,可以绑定特定地址。
socket options定制 TCP 套接字选项,用于调优网络性能。
log file指定日志文件的路径。如果不指定,日志可能发送到 syslog。
syslog facility指定 rsync 使用的 syslog 设备名,默认为 daemon。

模块参数 (Module Parameters)
模块以 [module_name] 开始,直到下一个模块定义为止。
1. 基础路径与权限
path: 必填项。指定该模块对应的本地文件系统目录。
comment: 对该模块的描述说明。
read only: 设置为 yes 时,客户端只能下载不能上传。默认为 yes。
write only: 设置为 yes 时,客户端只能上传不能下载。默认为 no。
list: 设置为 no 时,客户端执行 rsync server:: 时不会显示该模块。默认为 yes。
2. 用户与归属控制
uid: 指定传输文件时在本地系统使用的用户名或 UID。默认为 nobody。
gid: 指定传输文件时在本地系统使用的组名或 GID。默认为 nobody。
use chroot: 如果为 yes,rsync 在传输前会 chroot 到 path 路径。这增加了安全性,但需要 root 权限且不支持符号链接指向路径外。
munge symlinks: 防止符号链接被滥用(将其转换为不可用的形式)。
3. 安全与访问控制
auth users: 指定允许连接该模块的用户列表(逗号分隔)。这些用户不必是系统用户。
secrets file: 指定包含 username:password 键值对的文件,权限必须设为 600。
hosts allow: 允许访问的 IP、网段或主机名。支持通配符。
hosts deny: 拒绝访问的 IP、网段或主机名。
max connections: 模块的最大并发连接数。0 表示无限制。
lock file: 指定支持 max connections 的锁文件路径。
4. 过滤与超时
timeout: 客户端空闲超时时间(秒)。0 为永不超时(建议设为 300-600)。
exclude: 指定不排除的文件或目录(用空格隔开)。
include: 指定不排除的文件或目录。
exclude from: 从指定的文件中读取排除规则。
ignore errors: 即使在 IO 错误发生时也继续执行删除操作。
ignore nonreadable: 忽略守护进程用户没有读取权限的文件。

### 示例配置
# --- 全局配置 ---
uid = root
gid = root
use chroot = yes
max connections = 10
pid file = /var/run/rsyncd.pid
log file = /var/log/rsync.log
port = 873

# --- 模块配置 ---
[backup_data]
    path = /data/backup/
    comment = 核心业务数据备份
    read only = no
    list = yes
    auth users = backup_user
    secrets file = /etc/rsyncd.secrets
    hosts allow = 192.168.1.0/24
    hosts deny = *
    timeout = 600

注意事项:

samba配置文件

配置文件内容说明:

[global] 部分包含了Samba服务器的全局配置,影响到整个Samba服务的行为。

workgroup = SAMBA  
   设置Samba服务器所属的工作组名称。这里设置为"SAMBA",可以根据需要修改为其它工作组名。它与Windows工作组相对应。

security = user  
   设置Samba服务器的安全模式。`user`模式表示用户需要提供有效的用户名和密码才能访问共享资源。常见的安全模式还有`share`和`domain`。

passdb backend = tdbsam  
   指定密码数据库后端,`tdbsam`是默认的后端,用于存储用户的密码信息。

printing = cups  
   配置Samba与CUPS(Common UNIX Printing System)的集成,表示使用CUPS来管理打印服务。

printcap name = cups  
   设置Samba使用的打印配置文件的名称,这里指定为CUPS。

load printers = yes  
   启用打印机共享。设置为`yes`时,Samba会自动检测系统中安装的打印机并共享它们。

cups options = raw  
   指定CUPS打印机的选项。`raw`表示直接将打印数据发送到打印机,而不进行任何格式转换。

[homes] 部分配置了用户的家目录共享。

comment = Home Directories  
   提供共享的描述信息。这里标明该共享是用户的家目录。

valid users = %S, %D%w%S  
   限制访问该共享的用户。`%S`是当前用户的用户名,`%D`是域名,`%w`是工作组。该配置允许用户仅访问他们自己的家目录。

browseable = No 
   设置为`No`表示此共享不出现在网络浏览器中,不允许被列出。

read only = No  
   设置为`No`表示该共享可读写。

inherit acls = Yes  
   启用ACL(访问控制列表)继承,这意味着共享目录将继承父目录的ACL设置。

[printers] 部分配置了打印机共享。

comment = All Printers  
   提供共享的描述信息。这里标明该共享包含所有的打印机。

path = /var/tmp  
   指定打印文件的存储路径。`/var/tmp`是一个常见的临时目录,用于存储打印作业的文件。

printable = Yes  
   表示该共享是一个打印共享(即它代表一个打印机)。

create mask = 0600 
   设置新创建文件的权限掩码,这里设置为0600,意味着新文件只能由文件所有者读写。

browseable = No  
   设置为`No`表示此共享不会在网络浏览器中列出。

[print$] 部分配置了打印机驱动程序共享。

comment = Printer Drivers  
   提供共享的描述信息。这里标明该共享用于存储打印机驱动程序。

path = /var/lib/samba/drivers  
   指定存储打印机驱动程序的路径。`/var/lib/samba/drivers`是Samba存放打印机驱动程序的默认目录。

write list = @printadmin root  
   允许`@printadmin`组和`root`用户具有写权限,从而管理和上传打印机驱动程序。

force group = @printadmin  
   强制设置共享中文件的所属组为`@printadmin`组。

create mask = 0664  
   设置新创建文件的权限掩码,允许文件的所有者和所属组具有读写权限,而其他用户只有读权限。

directory mask = 0775  
   设置目录的权限掩码,允许目录的所有者和所属组具有读、写、执行权限,其他用户只有读、执行权限。

注意事项:

chrony.conf配置文件

默认内容如下:
# 配置 chronyd 使用 pool.ntp.org 提供的公共时间源进行同步
# pool:使用多个时间源进行负载均衡。
# iburst:当服务器不可达时,发送 4 个快速请求包以加速连接。
pool 2.centos.pool.ntp.org iburst

# 从 DHCP 服务中动态获取 NTP 服务器地址,如果是静态网络可忽略
sourcedir /run/chrony-dhcp

# 记录系统时钟的频率偏差(增/减速),以便重启后快速调整。
driftfile /var/lib/chrony/drift

# 允许 chronyd 在系统启动的前 3 次同步中直接调整时间(如果时间偏差超过 1 秒)。
makestep 1.0 3

# 启用系统时钟与硬件时钟 (RTC) 的自动同步。
rtcsync

# 启用支持硬件时间戳的网络接口。注释掉,通常用于高精度时间同步场景(如金融行业)。
#hwtimestamp *

# 设置最少需要的时间源数量。
# 默认状态:注释掉,chronyd 自动选择。
#minsources 2

# 允许指定 IP 段的设备访问本机时间服务。默认不支持
#allow 192.168.0.0/16
#allow ...
#allow ...

# 允许本机在没有时间源时,充当时间服务器(Stratum 10)。一般注释掉
#local stratum 10

# 启用 NTP 数据包的认证功能。 注释掉,如使用,需生成密钥文件 /etc/chrony.keys。
#authselectmode require
keyfile /etc/chrony.keys

# 用于指定存储 NTS(Network Time Security)密钥和 cookie 的目录。
ntsdumpdir /var/lib/chrony

# 通过调整时间速度而非直接跳秒的方式插入/删除闰秒。
#leapsecmode slew

# 从系统时区数据库中获取闰秒和 TAI-UTC 偏移信息。
leapsectz right/UTC

# 指定 Chrony 的日志存储路径。
logdir /var/log/chrony
# 启用更多日志 如果需要记录时间同步详细信息,可取消注释以下选项
#log measurements statistics tracking

注意事项:

rsyslog配置文件

1. 全局指令 (GLOBAL DIRECTIVES)

global(workDirectory="/var/lib/rsyslog")

作用: 临时文件和运行数据(如队列、状态记录)都存这里,类似“工作文件夹”。

module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")

作用: 保存日志时,用最经典的格式(旧版样式),方便兼容老工具。

2. 模块 (MODULES)
# 使用不同的模块来提供各种功能。以下是一些常见模块的配置:
rsyslog 

# 默认关闭本地套接字(比如logger命令的日志),改用下面的imjournal模块
imuxsock 模块
module(load="imuxsock" SysSock.Use="off")

# 直接从系统日志(systemd的journal)读取日志。
imjournal 模块
module(load="imjournal" UsePid="system" FileCreateMode="0644" StateFile="imjournal.state")
# StateFile="imjournal.state":记录读到哪了,下次接着读
# FileCreateMode="0644":生成的文件权限是所有人可读

#注释掉的模块
# 读内核日志(现在用systemd代替了)。
#module(load="imklog") # reads kernel messages (the same are read from journald)
# 定时打--MARK--日志标记(没开)
#module(load="immark") # provides --MARK-- message capability

# 包含额外配置文件
# 可以往/etc/rsyslog.d/目录加其他配置文件,灵活扩展规则
include(file="/etc/rsyslog.d/*.conf" mode="optional")

rsyslog

######################## 接收远程日志 (Syslog Reception)模块 [默认没开]   当服务端才打开注释
# UDP 514端口 接收:速度快但可能丢消息(像广播,不保证对方收到)
#module(load="imudp") # needs to be done just once
#input(type="imudp" port="514")

# TCP 514端口 接收:更可靠,但占用资源多(类似打电话确认收到)。
#module(load="imtcp") # needs to be done just once
#input(type="imtcp" port="514")

3. 日志规则 (RULES)
# 日志规则部分定义了不同日志级别和类别的日志存储位置。

# 内核日志到控制台
# 作用: 将所有内核消息(`kern.*`)输出到控制台。由于太多信息会使屏幕杂乱,因此通常会注释掉。
#kern.* /dev/console

# 系统日志存储
# 所有普通日志(排除邮件、登录、定时任务)存这里
# 记录所有类型的日志级别从info开始,但排了mail,,...以外 ,这此日志都存储于 /var/log/messages
*.info;mail.none;authpriv.none;cron.none /var/log/messages

# 把日志位置通过网络存储到12服务器中 @就是通过udp方式
#*.info;mail.none;authpriv.none;cron.none  @192.168.88.12

# 把日志位置通过网络存储到12服务器中 @@就是通过tcp方式
#*.info;mail.none;authpriv.none;cron.none  @@192.168.88.12

# 忽略不存储
*.info;mail.none;authpriv.none;cron.none  ~

# 安全日志
# 登录、权限相关的日志(如SSH登录失败)存这里,权限严格。
authpriv.* /var/log/secure
# 只记录err级别
#authpriv.=err /var/log/secure
# 除了err级别都记录
#authpriv.!err /var/log/secure
# debug < info < notice < warning < err(分水岭) < cirt <alert < emerg
# . 只要大于err级别的信息都存 err crit alter emerg
# .= 只记录 err级别
# .! 除了err级别都记录
# authpriv.err /var/log/err

# 邮件日志
# 邮件日志,用“异步写入”(先放内存,攒一波再写硬盘,避免卡住)。
mail.* -/var/log/maillog

# cron 日志
# 定时任务(cron)的日志,比如任务何时执行。
cron.* /var/log/cron

# 紧急消息
# 紧急日志(比如系统崩溃)弹窗给所有登录的用户。
*.emerg :omusrmsg:*

# 新闻错误日志
# 将 `uucp` 和 `news` 类别中 `crit`(严重)及以上级别的错误存储到 `/var/log/spooler` 文件。
uucp,news.crit /var/log/spooler

# 启动日志
# 开机启动过程的日志存这里。
local7.* /var/log/boot.log

4. 日志转发 (Forwarding) 示例
# 实现本地有日志且远程备份主机中有相同日志,开启此配置,则远程备份服务器中rsyslog服务中tcp或udp一定打开其中一个注释

# action(type="omfwd"
# queue.filename="fwdRule1"
# queue.maxdiskspace="1g"
# queue.saveonshutdown="on"
# queue.type="LinkedList"
# action.resumeRetryCount="-1"
# Target="remote_host" Port="XXX" Protocol="tcp")

# omfwd模块
# 把日志转发到另一台机器,比如:
    # Target="remote_host" Port="XXX":目标的IP和端口。
    # Protocol="tcp":用TCP发(更可靠)。
    # queue.maxdiskspace="1g":如果网络断了,最多存1G日志在本地等着。
    # action.resumeRetryCount="-1":无限重试,直到发出去为止。

注意事项:

logrotate配置文件

cat /etc/logrotate.conf

# 轮替周期:  指定日志轮替的周期为每周。可以设置为 daily、weekly、monthly 等。
weekly

# 保留日志文件的数量: 保留 4 个日志文件的备份(即保留当前日志和 3 个旧日志)。
rotate 4

# 在日志轮替时,自动创建新的日志文件
create

# 使用日期作为日志轮替文件的后缀
dateext

# 在日志轮替时压缩旧日志。
#compress

# 包含/etc/logrotate.d/目录中所有的子配置文件。也就是说会把这个目录中所有子配置文件读取进来,进行日志轮替。
include /etc/logrotate.d

注意事项:

named.conf配置文件

vi /etc/named.conf

# 以下为配置文件的默认配置信息
options {
        listen-on port 53 { 127.0.0.1; }; // 指定 DNS 服务监听的 IP 地址 IPV4 (内网地址)
        listen-on-v6 port 53 { ::1; }; // 指定 DNS 服务监听的 IP 地址  IPV6 (内网地址)
        directory       "/var/named"; // 设置 BIND 配置和区域文件存储的目录。
        dump-file       "/var/named/data/cache_dump.db"; // 指定 DNS 缓存的转储文件路径,存储服务器缓存的所有 DNS 记录。
        statistics-file "/var/named/data/named_stats.txt"; // 指定存储 BIND 统计信息的文件路径。
        memstatistics-file "/var/named/data/named_mem_stats.txt"; // 存储内存统计信息的文件路径。
        secroots-file   "/var/named/data/named.secroots"; // 存储安全根密钥的文件路径,用于 DNSSEC(DNS 安全扩展)。
        recursing-file  "/var/named/data/named.recursing"; // 存储递归查询状态的文件路径。
        allow-query     { localhost; };  // 限制查询源地址,只允许来自内网 IP 地址的查询。 

        recursion yes; // 启用递归查询,允许该 DNS 服务器处理外部域名查询。如果是权威 DNS 服务器,可以禁用此选项。

        dnssec-validation yes; // 启用 DNSSEC(DNS 安全扩展)验证,增加 DNS 查询的安全性。

        managed-keys-directory "/var/named/dynamic"; // 存储动态管理的密钥(如 DNSSEC 密钥)的目录。
        geoip-directory "/usr/share/GeoIP"; // 存储 GeoIP 数据的目录,用于地理位置相关的 DNS 配置。

        pid-file "/run/named/named.pid"; // 存储 BIND 进程 ID 的文件路径。
        session-keyfile "/run/named/session.key"; // 存储会话密钥的文件路径,用于 BIND 的会话加密。

        include "/etc/crypto-policies/back-ends/bind.config"; // 包含与加密策略相关的配置文件,启用系统级别的加密策略。
};

# 日志配置块
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

# 根域区域配置
zone "." IN {
        type hint;
        file "named.ca";
};

注意事项:

正向解析注册文件

# cat /etc/named.conf最下面的它的*.zones它的名称路径,选择打开
vi /etc/named.rfc1912.zones

# 添加以下内容:
zone "itwu.local" IN {
        type master;
        file "/var/named/itwu.local.db";
        allow-update { none; };
};

# 说明:
zone "itwu.local" IN {
    表示一个 DNS 区域的声明
    internal.local 是此 DNS 区域的名称
    IN 指 Internet 类别,常用默认值

type master;
    指定此区域的类型为 主(master)区域
    主区域是该域名的权威数据源,DNS 数据直接从此服务器的配置文件加载

file "/var/named/itwu.local.db";
    定义该区域的区域数据文件位置
    文件 internal.local.db 包含该区域的记录(如 A、MX、NS 等)

allow-update { none; };
    指定此区域是否允许动态更新
    none 意味着不允许任何动态更新,域名记录只能通过手动修改文件更新

注意事项:

A记录配置

# s(秒)m(分钟)h(小时)d(天)
$TTL 1d
@   IN  SOA ns1.itwu.local. admin.itwu.local. (
         2025110301 ; Serial
         1h         ; Refresh
         30m        ; Retry
         1d        ; Expire
         1d )       ; Minimum TTL
     IN    NS    ns1.itwu.local.
# ns1 必须要解析为dns服务器的ip地址     
ns1    IN    A    192.168.88.10
# 这里才是真正的主机地址解析
www   IN    A     192.168.88.11
img   IN    A     192.168.88.11 

$TTL 默认 TTL (Time To Live)。
所有资源记录的默认缓存时间,单位为秒。
这里设置为 86400(一天)。客户端在缓存数据时会遵循此值。

SOA 记录(权威记录 Start of Authority)
        @: 当前区域的根域(即 internal.local)。
        IN: 表示 Internet 类别。
        SOA: 开始授权记录,定义该区域的关键元信息。
        ns1.internal.local.        主域名服务器的 FQDN(全限定域名)。
    admin.internal.local.        管理员的邮箱地址,@ 替换为 .(即 admin@internal.local)。
    2024011701        序列号,每次修改区域文件时需递增,用于从服务器检测更新。
    3600              刷新时间,从服务器多久检查主服务器是否有更新(秒)。
    1800              重试时间,从服务器在刷新失败后再次尝试的等待时间(秒)。
    1209600           过期时间,从服务器在无法联系主服务器时数据失效的时间(秒)。
    86400             最小 TTL,未覆盖的记录的默认缓存时间(秒)。

NS 记录(Name Server)
        指定该区域的域名服务器地址。
        ns1.internal.local.: 表示 internal.local 的主域名服务器。

A 记录(Address): 定义域名到 IPv4 地址的映射。
        ns1.internal.local. 解析为 192.168.88.11  # 此ip一定要为DNS服务器的ip,仅此一个
        web1.internal.local. 和 web2.internal.local. 都解析为 192.168.88.10

扩展常见的DNS记录类型:
A 记录(Address Record): 将域名映射到 IPv4 地址。
AAAA 记录: 将域名映射到 IPv6 地址。
CNAME 记录(Canonical Name Record): 为域名提供别名。
MX 记录(Mail Exchange Record): 指定邮件服务器的地址。
NS 记录(Name Server Record): 指定域名的权威 DNS 服务器。
SOA 记录(Start of Authority Record): 定义 DNS 区域的起始权威信息。
PTR 记录(Pointer Record): 用于反向 DNS 查找,将 IP 地址映射回域名。
TXT 记录(Text Record): 存储任意文本数据,常用于 SPF、DKIM 等验证机制。

注意事项:

内部反向解析注册文件

vi /etc/named.rfc1912.zones

# 添加以下配置
zone "88.168.192.in-addr.arpa" IN { 
    type master; 
    file "/var/named/192.168.88.rev"; 
    allow-update { none; };
};

说明:
zone "88.168.192.in-addr.arpa" IN {
这是一个 反向区域(reverse zone)的声明。
反向区域用于将 IP 地址(IPv4)转换为域名,这和正向 DNS 查询(将域名转换为 IP 地址)是相反的。
88.168.192.in-addr.arpa:这是 192.168.88.x IP 地址段的反向区域名称。反向查找区域的命名规则是:将 IP 地址的每个八位字节倒序并加上 .in-addr.arpa 后缀。例如,192.168.88.x 的反向区域名称就是 88.168.192.in-addr.arpa。

type master;
指定该区域是 主(master)区域,也就是说,这是该区域的权威 DNS 服务器,并且数据会从本地文件加载

file "192.168.88.rev";
这是该区域的区域数据文件路径。
192.168.88.rev 文件包含了反向解析记录,用于将 IP 地址(如 192.168.88.101)映射到对应的域名

allow-update { none; };
allow-update 指定是否允许动态更新。在这里设置为 none,意味着不允许任何动态更新
这是一种安全配置,防止未经授权的客户端修改 DNS 记录

注意事项:

# 配置文件语法检查
named-checkconf /etc/named.conf

如果报了错误, 一般都是由于配置文件丢失内容导致语法结构不对, 请检查配置文件
/etc/named.conf
/etc/named.rfc1912.zones

# 区域文件语法检查 -- 出现两个ok表示成功
named-checkzone itwu.local /var/named/itwu.local.db
named-checkzone 88.168.192.in-addr.arpa /var/named/192.168.88.rev

systemctl restart named  -- 立即重启服务
systemctl enable named  -- 开启自动启动
systemctl status named  -- 查看状态

注意事项:

sshd_config配置文件说明

#       $OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtucker Exp $
#       文件版本信息,由OpenBSD维护

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
# 这是sshd服务器的系统级配置文件,详细信息请参阅sshd_config(5)手册

# This sshd was compiled with PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
# 此sshd编译时使用的PATH环境变量

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.
# OpenSSH默认sshd_config的策略:尽可能写出选项的默认值但注释掉,取消注释的选项会覆盖默认值

# To modify the system-wide sshd configuration, create a  *.conf  file under
#  /etc/ssh/sshd_config.d/  which will be automatically included below
# 要修改系统级sshd配置,请在 /etc/ssh/sshd_config.d/ 下创建 *.conf 文件,它们会自动被下面指令包含
Include /etc/ssh/sshd_config.d/*.conf   # 包含目录下所有.conf配置文件

# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
# 如果在SELinux系统上更改端口,需通过semanage命令通知SELinux

#Port 22   # SSH监听端口,默认为22
#AddressFamily any   # 地址族,可选 any、inet(IPv4)、inet6(IPv6),默认 any
#ListenAddress 0.0.0.0   # IPv4监听地址,0.0.0.0表示所有接口
#ListenAddress ::   # IPv6监听地址,::表示所有接口

#HostKey /etc/ssh/ssh_host_rsa_key   # RSA主机私钥文件
#HostKey /etc/ssh/ssh_host_ecdsa_key # ECDSA主机私钥文件
#HostKey /etc/ssh/ssh_host_ed25519_key # Ed25519主机私钥文件

# Ciphers and keying
# 加密和密钥交换相关设置
#RekeyLimit default none   # 重新生成密钥的流量限制,默认无限制

# Logging
# 日志相关设置
#SyslogFacility AUTH   # 日志记录设施,默认AUTH
#LogLevel INFO   # 日志级别,默认为INFO

# Authentication:
# 认证相关设置

#LoginGraceTime 2m   # 登录宽限时间(未认证时允许的连接时间),默认2分钟
#PermitRootLogin prohibit-password   # 是否允许root登录,prohibit-password表示禁止密码登录,允许密钥登录
#StrictModes yes   # 严格模式:检查用户主目录和authorized_keys的权限,默认yes
#MaxAuthTries 6   # 最大认证尝试次数,默认6次
#MaxSessions 10   # 最大打开的会话数,默认10个

#PubkeyAuthentication yes   # 是否允许公钥认证,默认yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
# 默认会检查.ssh/authorized_keys和.ssh/authorized_keys2,但此处覆盖为仅检查.ssh/authorized_keys
AuthorizedKeysFile      .ssh/authorized_keys   # 指定公钥认证文件的路径

#AuthorizedPrincipalsFile none   # 指定授权主体文件,用于证书认证,默认none
#AuthorizedKeysCommand none   # 获取授权密钥的外部命令,默认none
#AuthorizedKeysCommandUser nobody   # 执行AuthorizedKeysCommand的用户,默认nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
# 启用基于主机的认证需要/etc/ssh/ssh_known_hosts中有主机密钥
#HostbasedAuthentication no   # 是否允许基于主机的认证,默认no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
# 如果不信任~/.ssh/known_hosts用于基于主机的认证,可改为yes
#IgnoreUserKnownHosts no   # 是否忽略用户的known_hosts文件,默认no
# Don't read the user's ~/.rhosts and ~/.shosts files
# 是否不读取用户的~/.rhosts和~/.shosts文件
#IgnoreRhosts yes   # 忽略rhosts相关文件,默认yes

# To disable tunneled clear text passwords, change to no here!
# 如果要禁用明文密码传输,请将下面改为no
#PasswordAuthentication yes   # 是否允许密码认证,默认yes
#PermitEmptyPasswords no   # 是否允许空密码登录,默认no

# Change to no to disable s/key passwords
# 改为no以禁用S/Key一次性密码
#KbdInteractiveAuthentication yes   # 是否允许键盘交互式认证(如挑战-应答),默认yes

# Kerberos options
# Kerberos认证相关选项
#KerberosAuthentication no   # 是否启用Kerberos认证,默认no
#KerberosOrLocalPasswd yes   # Kerberos认证失败后是否回退到本地密码,默认yes
#KerberosTicketCleanup yes   # 是否在注销时清理Kerberos票据,默认yes
#KerberosGetAFSToken no   # 是否获取AFS令牌,默认no
#KerberosUseKuserok yes   # 是否使用.k5login文件进行用户授权,默认yes

# GSSAPI options
# GSSAPI认证相关选项
#GSSAPIAuthentication no   # 是否启用GSSAPI认证,默认no
#GSSAPICleanupCredentials yes   # 是否在注销时清理GSSAPI凭证,默认yes
#GSSAPIStrictAcceptorCheck yes   # 是否严格检查GSSAPI接受者名称,默认yes
#GSSAPIKeyExchange no   # 是否允许GSSAPI密钥交换,默认no
#GSSAPIEnablek5users no   # 是否启用.k5users文件控制用户映射,默认no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the KbdInteractiveAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via KbdInteractiveAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and KbdInteractiveAuthentication to 'no'.
# WARNING: 'UsePAM no' is not supported in RHEL and may cause several
# problems.
# UsePAM no   # 是否启用PAM(可插拔认证模块),RHEL系统必须为yes,否则会有问题

#AllowAgentForwarding yes   # 是否允许代理转发,默认yes
#AllowTcpForwarding yes   # 是否允许TCP端口转发,默认yes
#GatewayPorts no   # 是否允许远程主机访问转发的端口,默认no(仅本地)
#X11Forwarding no   # 是否允许X11转发,默认no
#X11DisplayOffset 10   # X11转发的显示编号偏移量,默认10
#X11UseLocalhost yes   # 是否将X11转发绑定到本地回环地址,默认yes
#PermitTTY yes   # 是否允许分配伪终端,默认yes
#PrintMotd yes   # 是否在登录时显示/etc/motd信息,默认yes
#PrintLastLog yes   # 是否在登录时显示上次登录信息,默认yes
#TCPKeepAlive yes   # 是否发送TCP keepalive消息,默认yes
#PermitUserEnvironment no   # 是否允许用户通过~/.ssh/environment设置环境变量,默认no
#Compression delayed   # 压缩设置:delayed表示认证后才启用压缩,可选yes/no/delayed
#ClientAliveInterval 0   # 客户端存活检测间隔(秒),0表示不检测
#ClientAliveCountMax 3   # 客户端无响应最大次数,超过则断开连接
#UseDNS no   # 是否使用DNS反向解析客户端主机名,默认no
#PidFile /var/run/sshd.pid   # 存放sshd主进程PID的文件路径
#MaxStartups 10:30:100   # 最大未认证连接数:起始值:增量:最大值,默认10:30:100
#PermitTunnel no   # 是否允许tun/tap设备隧道,默认no
#ChrootDirectory none   # 将用户会话chroot到指定目录,默认none
#VersionAddendum none   # 附加在SSH软件版本字符串后的补充信息,默认none

# no default banner path
# Banner none   # 登录前显示的横幅文件路径,默认none

# override default of no subsystems
Subsystem       sftp    /usr/libexec/openssh/sftp-server   # 定义SFTP子系统及其执行程序

# Example of overriding settings on a per-user basis
# 针对特定用户覆盖配置的示例
#Match User anoncvs   # 匹配用户anoncvs
#       X11Forwarding no   # 对该用户禁用X11转发
#       AllowTcpForwarding no   # 对该用户禁用TCP转发
#       PermitTTY no   # 对该用户禁止分配TTY
#       ForceCommand cvs server   # 强制执行的命令,忽略用户原始命令

注意事项:

systemd实现后台执行

systemd替代nohup

systemd 替代 nohup 是 Linux 生产环境的标准做法。它不仅能自动接管标准输出/错误,还提供日志轮转、崩溃自启、依赖管理、权限隔离等能力。

vi /etc/systemd/system/myapp.service

------------ 内容如下 ------------------

[Unit]
Description=My Application Service
After=network.target

[Service]
Type=simple
User=root                    # 建议改为实际运行用户
Group=root
WorkingDirectory=/data
ExecStart=/bin/echo 1111     # ⚠️ 替换为你的真实命令或脚本绝对路径

# 崩溃自动重启(生产必备)
Restart=on-failure
RestartSec=5
StartLimitBurst=3
StartLimitIntervalSec=60

# 输出到 systemd journal(强烈推荐,自带轮转/索引)
StandardOutput=journal
StandardError=journal
SyslogIdentifier=myapp
#StandardOutput=append:/var/log/myhttp/out.log
#StandardError=append:/var/log/myhttp/err.log

[Install]
WantedBy=multi-user.target

------------------------------- 关键配置项说明 -------------------------------
Type=simple                 默认类型,ExecStart 启动的进程即为主进程
Restart=on-failure          非 0 退出时自动重启  配合 RestartSec 避免重启风暴
RestartSec=5                重启前的等待时间(秒)
StartLimitIntervalSec=60    与 StartLimitBurst 配合,定义“60秒内最多重启3次”的统计周期
StartLimitBurst=3           启动次数阈值 在 StartLimitIntervalSec 定义的时间窗口内,最多允许尝试启动 3 次。超过后 systemd 将放弃自动重启。
StandardOutput=journal      输出合并到 systemd 日志中心 journalctl 直接查
SyslogIdentifier            日志标识符  方便在 journalctl 中精准过滤

注意事项:

# 1. 重载 systemd 配置(每次修改 .service 后必须执行)
systemctl daemon-reload

# 2. 设置开机自启 + 立即启动
systemctl enable --now myapp.service

注意事项:

journalctl -u myapp.service

注意事项:

systemd .service 配置详解

1、[Unit] 段(单元基本信息)

配置项可选值作用说明示例
Description任意字符串服务描述信息Description=My Web Service
DocumentationURL/路径文档地址Documentation=https://example.com
Requires服务名强依赖,依赖失败则本服务失败Requires=network.service
Wants服务名弱依赖,依赖失败不影响本服务Wants=network.service
After服务名指定启动顺序(在其之后启动)After=network.target
Before服务名指定启动顺序(在其之前启动)Before=nginx.service
Conflicts服务名冲突服务(不能同时运行)Conflicts=shutdown.target
ConditionPathExists路径文件存在才启动ConditionPathExists=/etc/my.conf
ConditionUser用户名指定用户才运行ConditionUser=root

2、[Service] 段(核心配置)

服务类型

配置项可选值说明示例
Typesimple默认,主进程即ExecStartType=simple
forking后台fork(传统守护进程)Type=forking
oneshot一次性任务Type=oneshot
dbus等待DBus信号Type=dbus
notify通过sd_notify通知Type=notify
idle延迟执行Type=idle

启动/停止相关

配置项可选值说明示例
ExecStart命令启动命令ExecStart=/usr/bin/python app.py
ExecStartPre命令启动前执行ExecStartPre=/bin/echo start
ExecStartPost命令启动后执行ExecStartPost=/bin/echo done
ExecStop命令停止命令ExecStop=/bin/kill \$MAINPID
ExecReload命令重载命令ExecReload=/bin/kill -HUP \$MAINPID

重启策略

配置项可选值说明示例
Restartno不重启Restart=no
on-success成功才重启
on-failure失败重启(常用)Restart=on-failure
always总是重启
on-abnormal异常重启
on-abortabort时重启
on-watchdogwatchdog触发重启
RestartSec重启间隔RestartSec=5

用户与权限

配置项可选值说明示例
User用户名运行用户User=www-data
Group组名运行组Group=www-data
WorkingDirectory路径工作目录WorkingDirectory=/opt/app
UMask权限掩码文件权限UMask=0022

资源限制

配置项可选值说明示例
LimitNOFILE数字最大打开文件数LimitNOFILE=65535
LimitNPROC数字最大进程数LimitNPROC=1024
MemoryLimit大小内存限制MemoryLimit=500M
CPUQuota百分比CPU限制CPUQuota=50%

环境变量

配置项可选值说明示例
EnvironmentKEY=VALUE设置变量Environment=ENV=prod
EnvironmentFile文件路径从文件读取变量EnvironmentFile=/etc/app.env

日志相关

配置项可选值说明示例
StandardOutputjournal/syslog/null/file标准输出StandardOutput=journal
StandardError同上错误输出StandardError=journal
SyslogIdentifier名称日志标识SyslogIdentifier=myapp
LogLevelMax级别最大日志级别LogLevelMax=info

依赖与超时

配置项可选值说明示例
TimeoutStartSec启动超时TimeoutStartSec=30
TimeoutStopSec停止超时TimeoutStopSec=30
KillModecontrol-group杀死所有进程KillMode=control-group
process只杀主进程

3、[Install] 段(开机启动)

配置项可选值说明示例
WantedBytarget被哪个target拉起WantedBy=multi-user.target
RequiredBytarget强依赖targetRequiredBy=graphical.target
Alias名称别名Alias=myapp.service

4、完整示例(生产级)

[Unit]
Description=Python Web App
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/app

ExecStart=/usr/bin/python3 app.py
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill $MAINPID

Restart=on-failure
RestartSec=5

Environment=ENV=prod
EnvironmentFile=/etc/app.env

LimitNOFILE=65535
MemoryLimit=500M

StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

注意事项: