楼主: 7925_cdabigdata
17 0

[互联网] Linux服务器安全加固 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
0 小时
注册时间
2018-1-9
最后登录
2018-1-9

楼主
7925_cdabigdata 发表于 2025-12-2 22:37:01 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

重命名 root 账户的两种方法

推荐方案:创建新管理员账户并禁用 root 登录

为提升系统安全性,建议避免直接使用 root 账户进行远程登录。可通过以下步骤创建新的管理员用户,并关闭 root 的 SSH 访问权限。

1. 创建新的管理员用户

sudo useradd -m -s /bin/bash admin
sudo passwd admin  # 设置高强度密码
    

2. 授予新用户管理员权限

# Ubuntu/Debian 系统:
sudo usermod -aG sudo admin

# CentOS/RHEL 系统:
# sudo usermod -aG wheel admin
    

3. 验证新账户的 sudo 权限

su - admin
sudo whoami  # 正常应返回 "root"
    

4. 修改 SSH 配置以禁用 root 登录

sudo vi /etc/ssh/sshd_config
    

确保配置文件中包含以下设置:

PermitRootLogin no
AllowUsers admin
    
[此处为图片1]

5. 重启 SSH 服务使更改生效

sudo systemctl restart sshd
    

6. 验证配置是否成功

打开新终端窗口,尝试使用 admin 用户通过 SSH 登录系统,确认可正常登录并执行管理命令。

替代方案:直接重命名 root 账户(谨慎操作)

此方法风险较高,可能影响部分依赖 root 名称的脚本或服务,不推荐在生产环境中使用。

# 执行重命名操作
sudo usermod -l newrootname root
sudo groupmod -n newrootname root
    

实现管理用户权限分离机制

为了遵循最小权限原则,建议将管理职责划分为多个角色,分别赋予特定权限,降低误操作和安全风险。

创建三类管理角色账户

1. 系统管理员账户(用于日常运维任务)

sudo useradd -m -s /bin/bash sysadmin
sudo passwd sysadmin
sudo usermod -aG sudo sysadmin
    

2. 安全管理员账户(负责安全策略配置)

sudo useradd -m -s /bin/bash secadmin
sudo passwd secadmin
# 注意:该账户不加入 sudo 组,仅授予必要命令权限
    

3. 审计管理员账户(专用于日志审查)

sudo useradd -m -s /bin/bash audadmin
sudo passwd audadmin
    

精细化配置各角色的 sudo 权限

通过编辑 sudoers 文件,对不同用户分配受限命令集合。

sudo visudo
    

在文件中添加如下规则:

# 系统管理员:拥有完全权限
sysadmin ALL=(ALL) ALL

# 安全管理员:仅允许执行安全相关命令
secadmin ALL=(ALL) /usr/bin/passwd, /usr/sbin/iptables, /usr/sbin/aide, /usr/bin/rpm

# 审计管理员:仅限查看日志文件
audadmin ALL=(ALL) /usr/bin/tail, /usr/bin/less, /usr/bin/cat, /bin/grep

# 定义日志路径别名
Cmnd_Alias LOG_CMDS = /var/log/*, /var/log/secure*, /var/log/messages*
audadmin ALL=(ALL) LOG_CMDS
    
[此处为图片2]

启用系统级安全审计功能

部署 auditd 服务以记录关键系统事件,增强可追溯性与合规能力。

安装并启动 auditd 服务

1. 根据操作系统安装 auditd

# Ubuntu/Debian:
sudo apt-get install auditd audispd-plugins

# CentOS/RHEL:
sudo yum install audit audit-libs
    

2. 启动并设置开机自启

sudo systemctl start auditd
sudo systemctl enable auditd
    

3. 检查服务运行状态

sudo systemctl status auditd
sudo auditctl -s  # 查看当前审计状态
    

配置核心审计规则

编辑审计规则文件以监控敏感文件和操作行为。

sudo vi /etc/audit/rules.d/audit.rules
    

添加以下规则内容:

# 用户账户变更监控
-w /etc/passwd -p wa -k user_changes
-w /etc/shadow -p wa -k user_changes
-w /etc/group -p wa -k user_changes

# sudo 权限配置文件监控
-w /etc/sudoers -p wa -k sudoers_changes
-w /etc/sudoers.d/ -p wa -k sudoers_changes

# 关键系统配置文件监控
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /etc/hosts.allow -p wa -k hosts_allow
-w /etc/hosts.deny -p wa -k hosts_deny

# 登录失败日志监控
-w /var/log/faillog -p wa -k logins
    

以上规则将在系统重启后自动加载,也可通过 sudo augenrules --load 手动应用。

# 审计关键文件访问
-w /var/log/lastlog -p wa -k logins
-w /var/run/faillock -p wa -k logins

# 监控进程执行行为
-a always,exit -F arch=b64 -S execve -k process_execution

# 重新加载审计规则配置
sudo auditctl -R /etc/audit/rules.d/audit.rules

# 查看当前生效的审计规则列表
sudo auditctl -l

[此处为图片1]

# 配置审计日志参数
sudo vi /etc/audit/auditd.conf

确保以下核心参数正确设置:
max_log_file = 100         # 单个日志文件最大为100MB
num_logs = 5               # 最多保留5个历史日志文件
max_log_file_action = ROTATE  # 达到大小限制后轮转
space_left = 200           # 当磁盘剩余空间低于200MB时发出警告
admin_space_left = 50      # 剩余空间少于50MB时触发管理员操作

[此处为图片2]

# 综合安全加固脚本(一键部署)

#!/bin/bash
# security_hardening.sh
echo "启动服务器安全强化流程..."

# 创建专用管理账户组
echo "正在创建系统管理账户..."
useradd -m -s /bin/bash sysadmin
useradd -m -s /bin/bash secadmin
useradd -m -s /bin/bash audadmin

echo "请手动为以下账户配置密码:"
echo "sysadmin, secadmin, audadmin"
echo "使用命令:passwd 用户名"

# 加固SSH服务配置
echo "调整SSH安全策略..."
sed -i 's/^#PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
echo "AllowUsers sysadmin" >> /etc/ssh/sshd_config

# 启动并启用审计守护进程
echo "启动审计服务..."
systemctl start auditd
systemctl enable auditd

# 写入定制化审计规则
cat > /etc/audit/rules.d/security.rules << EOF
-w /etc/passwd -p wa -k user_changes
-w /etc/shadow -p wa -k user_changes
-w /etc/group -p wa -k user_changes
-w /etc/sudoers -p wa -k sudoers_changes
-a always,exit -F arch=b64 -S execve -k process_execution
EOF

# 重启相关服务以应用更改
echo "重新加载配置项..."
systemctl restart sshd
auditctl -R /etc/audit/rules.d/security.rules

echo "安全强化任务已完成!"

# 验证与测试步骤说明

# 检查账户权限隔离机制
su - sysadmin
sudo whoami    # 应允许执行sudo命令

su - secadmin
sudo whoami    # 根据权限设定,应拒绝执行

su - audadmin
sudo tail /var/log/secure    # 仅限查看日志内容

[此处为图片3]

# 审计功能验证操作
# 查询用户变更相关的审计记录
sudo ausearch -k user_changes

# 检查进程执行事件的审计日志
sudo ausearch -k process_execution

# 实时跟踪审计日志输出
sudo tail -f /var/log/audit/audit.log

# 触发并测试审计规则响应
sudo useradd testuser    # 添加测试用户以生成审计条目
sudo ausearch -k user_changes | tail -20    # 查看最近的20条相关记录

[此处为图片4]

# SSH配置有效性验证
# 尝试使用root账户通过SSH登录,确认已被阻止

1. 检查远程维护设备是否通过IP协议配置了SSH,并禁用Telnet服务

验证方式:

  • 确认SSH服务处于运行状态:
    systemctl status sshd
    或者使用进程查看命令:
    ps -ef | grep sshd
  • 检查Telnet服务是否已停止或禁用:
    systemctl status telnet.socket 2>/dev/null || echo "Telnet service likely not installed or masked"
  • 检测是否有程序正在监听Telnet默认端口23:
    netstat -tulnp | grep :23

配置步骤:

  • 安装并启用SSH服务:
  • # CentOS/RHEL
    yum install -y openssh-server
    
    # Ubuntu/Debian
    apt install -y openssh-server
    
    systemctl enable --now sshd
  • 停用并禁用Telnet服务:
  • systemctl stop telnet.socket
    systemctl disable telnet.socket
  • 如系统中存在telnet-server相关组件,建议彻底移除:
  • yum remove telnet-server   # CentOS/RHEL
    apt remove telnetd         # Ubuntu/Debian
[此处为图片1]

2. 验证是否设置了密码修改的最小间隔时间

检查手段:
查看 /etc/login.defs 文件中的 PASS_MIN_DAYS 参数值。

grep ^PASS_MIN_DAYS /etc/login.defs

设置方法:
编辑 /etc/login.defs 文件,设定最小更改周期(例如设为1天):

sudo sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS   1/' /etc/login.defs

也可手动打开文件进行修改:

sudo vi /etc/login.defs
[此处为图片2]

3. 核查命令行界面是否配置超时自动退出功能

检测方式:
搜索全局环境配置文件中是否定义了 TMOUT 变量:

grep -r "TMOUT" /etc/profile /etc/bash.bashrc /etc/bashrc 2>/dev/null

启用配置:
/etc/profile/etc/bash.bashrc 文件末尾添加超时设置(例如5分钟即300秒):

echo "export TMOUT=300" | sudo tee -a /etc/profile
source /etc/profile
[此处为图片3]

4. 检查系统是否限制用户重复使用旧密码

查验方法:
查找PAM认证配置文件中关于密码历史记录的参数:

# CentOS/RHEL
grep remember /etc/pam.d/system-auth

# Ubuntu/Debian
grep remember /etc/pam.d/common-password

配置操作:
在对应PAM配置文件中增加或调整如下规则,以保存最近5次密码记录:

password requisite pam_pwhistory.so use_authtok remember=5
[此处为图片4]

5. 确认是否设置了口令过期前提醒天数

查看方式:
读取 /etc/login.defs 中的 PASS_WARN_AGE 值:

grep ^PASS_WARN_AGE /etc/login.defs

配置方法:
修改该参数以实现提前7天提醒用户更换密码:

sudo sed -i 's/^PASS_WARN_AGE.*/PASS_WARN_AGE   7/' /etc/login.defs
[此处为图片5]

6. 检查是否通过PAM模块限制非wheel组用户切换至root账户

核查指令:
审查 /etc/pam.d/su 文件内容,确认是否存在针对 wheel 组的访问控制规则。

?? 关键实施要点

  • 操作前备份:所有关键配置文件应在修改前完成备份。
  • 保留应急通道:确保可通过物理控制台或其他方式恢复root权限。
  • 分阶段测试:每项变更后需立即验证其功能有效性。
  • 审计日志监控:定期审查日志系统,确保安全事件被准确记录。
  • 最小权限原则:严格按照职责分配最低必要权限。

完成上述各项配置后,服务器将满足安全审计标准,实现权限分离与可追溯性管理。

# 测试root本地登录权限
ssh root@localhost ?# 应该被拒绝

# 测试管理员账户登录能力
ssh sysadmin@localhost ?# 应当成功

[此处为图片6]

7. 验证是否禁用 root 用户的远程登录功能

检查方式:查看 SSH 服务配置文件 /etc/ssh/sshd_configPermitRootLogin 参数的设置情况。

grep PermitRootLogin /etc/ssh/sshd_config

配置步骤:修改 /etc/ssh/sshd_config 文件,将该项设为禁用:

PermitRootLogin no

完成修改后,重启 SSH 服务以应用更改:

systemctl restart sshd

8. 审查关键系统目录与文件的权限配置

检查方式:使用 ls 命令查看核心配置文件及临时目录的当前权限状态。

ls -l /etc/passwd /etc/shadow /etc/group /etc/gshadow
ls -ld /tmp /var/tmp

配置建议:根据安全最佳实践调整对应权限(示例如下):

chmod 644 /etc/passwd
chmod 000 /etc/shadow
chmod 000 /etc/gshadow
chmod 644 /etc/group
chmod 1777 /tmp
chmod 1777 /var/tmp

9. 确认系统是否启用了 NTP 时间同步机制

检查方式:确认 chronyd 或 ntpd 服务运行状态,并查看时间同步源信息。

systemctl status chronyd 2>/dev/null || systemctl status ntpd 2>/dev/null
chronyc sources 2>/dev/null || ntpq -p 2>/dev/null

配置方法:推荐安装并启用 Chrony 实现时间同步:

yum install -y chrony    # CentOS/RHEL 系统
apt install -y chrony    # Ubuntu/Debian 系统
systemctl enable --now chronyd

随后编辑时间服务配置文件(如 /etc/chrony.conf/etc/ntp.conf),指定可靠的时间服务器地址。

10. 检查和配置系统内核安全参数

操作说明:通过修改 /etc/sysctl.conf 文件强化网络协议栈安全性。可根据实际需要添加以下典型安全参数:

vi /etc/sysctl.conf

常见加固项包括关闭 ICMP 回显、禁止 IP 转发等:

net.ipv4.icmp_echo_ignore_all = 1
net.ipv4.ip_forward = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

保存后执行以下命令使配置立即生效:

sysctl -p

11. 验证 SSH 登录成功后是否显示提示横幅(Banner)

检查方式:查询 /etc/ssh/sshd_config 文件中 Banner 字段是否已设置。

grep Banner /etc/ssh/sshd_config

配置流程:在 SSH 配置文件中指定横幅文件路径,例如:

Banner /etc/issue.net

接着创建或编辑该文件,填入合法的登录警告内容,最后重启 SSH 服务生效。

12. 审核命令行历史记录的相关设置

检查方式:查看环境变量 HISTSIZEHISTFILESIZEHISTTIMEFORMAT 的当前值。

echo $HISTSIZE $HISTFILESIZE
grep HIST /etc/profile ~/.bashrc

配置方法:在全局环境配置文件中追加设定,例如保留一万条历史命令并启用时间戳记录:

echo "export HISTSIZE=10000" | sudo tee -a /etc/profile
echo "export HISTFILESIZE=10000" | sudo tee -a /etc/profile
echo "export HISTTIMEFORMAT='%F %T '" | sudo tee -a /etc/profile
source /etc/profile

配置方法:在 /etc/pam.d/su 文件中添加或取消注释如下行:

auth required pam_wheel.so use_uid

然后确保仅允许 wheel 组成员切换至 root 用户,可通过将目标用户加入该组实现:

usermod -aG wheel <username>

验证配置是否存在且正确:

grep -E "^auth.*pam_wheel.so" /etc/pam.d/su

13. 验证系统是否禁用数据包转发功能(适用于不承担路由职责的主机)

验证方式: 通过查看内核参数 net.ipv4.ip_forward 的当前设置状态来判断。 执行以下命令进行检查:

sysctl net.ipv4.ip_forward
cat /proc/sys/net/ipv4/ip_forward

配置建议: 若返回值为 1,表示数据包转发已启用,需关闭以提升安全性。修改配置文件 /etc/sysctl.conf,添加或更新如下行:

net.ipv4.ip_forward = 0

保存后运行 sysctl -p 命令使更改立即生效。

未达标项及整改方案

以下为系统当前存在的安全配置问题,需尽快完成修复:

1. 口令变更最小间隔天数未正确设置
检测情况:PASS_MIN_DAYS 当前值为 0。
风险说明:该配置允许用户在不等待任何时间的情况下重复修改密码,容易被利用绕过密码历史策略,降低账户安全性。建议设置为至少 1 天。
整改措施:
编辑 /etc/login.defs 文件,将 PASS_MIN_DAYS 修改为符合安全策略的数值(如 1):

sudo sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS   1/' /etc/login.defs

验证操作:
执行命令确认修改结果:

grep ^PASS_MIN_DAYS /etc/login.defs

输出应为:PASS_MIN_DAYS 1

2. 未配置命令行界面自动退出超时机制
检测情况:执行 grep -r "TMOUT" 无返回内容。
风险说明:未设置会话超时可能导致用户离开终端后仍保持登录状态,增加未授权访问风险。
整改措施:
向全局环境配置中添加 TMOUT 设置,限制空闲会话最长持续时间为 300 秒(5 分钟):

echo -e "\n# Set shell timeout for security\nexport TMOUT=300" | sudo tee -a /etc/profile

应用更改:
执行以下命令使当前 shell 立即生效,新用户登录时将自动加载:

source /etc/profile

验证操作:
重新建立会话并执行:

echo $TMOUT

预期输出为:300

3. 关键系统文件权限配置不当
检测情况:/etc/shadow 和 /etc/gshadow 文件当前权限为 -r--r--r--(即 644)。
风险说明:这两个文件包含用户密码哈希信息,若所有用户均可读取,攻击者可提取哈希尝试离线破解。必须严格限制仅 root 用户可访问。
整改措施:
使用 chmod 命令移除其他所有用户的访问权限:

sudo chmod 000 /etc/shadow
sudo chmod 000 /etc/gshadow

验证操作:
执行以下命令检查权限是否已更新:

ls -l /etc/shadow /etc/gshadow

预期显示权限为:----------,即无任何权限位开放。

4. SSH 登录 Banner 配置存在冗余
检测情况:sshd_config 中同时启用了 Banner /etc/issue.netBanner /etc/motd
风险说明:多个 Banner 指令可能导致信息重复显示或冲突,影响合规性与用户体验。应保留单一有效入口提示。
整改措施:
编辑 SSH 服务主配置文件:

sudo vi /etc/ssh/sshd_config

定位至相关行,执行以下操作:

  • 取消注释 #Banner /etc/issue.net 行(删除行首 #);
  • Banner /etc/motd 行注释掉或删除。

修改后的配置应类似如下形式:

#Banner /etc/motd    # 此行已被注释
Banner /etc/issue.net    # 仅此行生效

[此处为图片1]

重启 SSH 服务以激活新配置:

sudo systemctl restart sshd

补充建议:
确保 /etc/issue.net 文件中包含合法的登录警告声明,避免泄露系统版本等敏感细节。

5. 历史命令记录设置不完善
检测情况:HISTSIZE 设置为 1000,且未定义 HISTTIMEFORMAT。
风险说明:过大的历史记录数量可能占用资源,并不利于审计追踪;缺少时间戳则无法准确判断命令执行时间。
整改措施:
编辑全局 shell 配置文件:

sudo vi /etc/profile

找到 HISTSIZE 所在行,将其调整为合理值(例如 500),并新增时间格式变量:

HISTSIZE=500
HISTTIMEFORMAT='%F %T '

[此处为图片2]

保存后执行以下命令使改动即时生效:

source /etc/profile

已符合项说明

以下安全配置项目经核查已满足标准要求,无需进一步处理。

检查设备远程维护所使用的IP协议是否配置了SSH协议,并确认已禁用telnet协议。经netstat检测,系统未监听23端口,且已执行相关命令关闭telnet服务。

验证密码重复使用限制情况:在PAM配置中发现 remember=5 的设置,满足安全策略要求。

核查口令过期前的警告天数配置:系统已设定 PASS_WARN_AGE 为7天,符合规范标准。

检查PAM认证模块是否限制非wheel组用户切换至root账户:系统已正确加载并配置 pam_wheel.so 模块,实现访问控制功能。

[此处为图片1]

确认是否禁止root用户通过远程方式登录:SSH配置文件中 PermitRootLogin 参数已设为 no,符合安全加固要求。

检查网络层数据包转发功能是否已关闭:sysctl.conf 文件中 net.ipv4.ip_forward 参数已设置为 0,表明该功能处于禁用状态,符合安全策略。

总结与操作建议

建议按照以下顺序执行各项安全配置修改,每项修改完成后应立即进行效果验证:

  1. 调整敏感文件权限(高风险操作):执行命令 sudo chmod 000 /etc/shadow /etc/gshadow,以严格限制对关键认证文件的访问。
  2. 更新密码最小更换周期:运行指令 sudo sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 1/' /etc/login.defs,强化密码管理策略。
  3. 配置会话自动超时退出:通过命令 echo -e "\nexport TMOUT=300" | sudo tee -a /etc/profile && source /etc/profile 设置空闲会话5分钟后自动断开。
  4. 修正SSH登录横幅信息配置:编辑 /etc/ssh/sshd_config 文件,确保仅启用一个 Banner 路径配置项,修改后重启SSH服务使变更生效。
  5. 优化命令历史记录设置:修改 /etc/profile 文件,调整 HISTSIZE 参数并添加 HISTTIMEFORMAT 时间戳格式,随后执行 source /etc/profile 刷新环境变量。

全部配置更新完毕后,推荐重新建立一个新的SSH连接,用于测试会话超时机制及Banner信息显示是否按预期工作。

[此处为图片1]

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Linux 服务器安全 服务器 Lin localhost

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-5 22:28