重命名 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
systemctl stop telnet.socket
systemctl disable telnet.socket
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 ?# 应当成功
7. 验证是否禁用 root 用户的远程登录功能
检查方式:查看 SSH 服务配置文件 /etc/ssh/sshd_config 中 PermitRootLogin 参数的设置情况。
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. 审核命令行历史记录的相关设置
检查方式:查看环境变量 HISTSIZE、HISTFILESIZE 和 HISTTIMEFORMAT 的当前值。
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.net 和 Banner /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,表明该功能处于禁用状态,符合安全策略。
总结与操作建议
建议按照以下顺序执行各项安全配置修改,每项修改完成后应立即进行效果验证:
- 调整敏感文件权限(高风险操作):执行命令
sudo chmod 000 /etc/shadow /etc/gshadow,以严格限制对关键认证文件的访问。 - 更新密码最小更换周期:运行指令
sudo sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 1/' /etc/login.defs,强化密码管理策略。 - 配置会话自动超时退出:通过命令
echo -e "\nexport TMOUT=300" | sudo tee -a /etc/profile && source /etc/profile设置空闲会话5分钟后自动断开。 - 修正SSH登录横幅信息配置:编辑
/etc/ssh/sshd_config文件,确保仅启用一个 Banner 路径配置项,修改后重启SSH服务使变更生效。 - 优化命令历史记录设置:修改
/etc/profile文件,调整 HISTSIZE 参数并添加 HISTTIMEFORMAT 时间戳格式,随后执行source /etc/profile刷新环境变量。
全部配置更新完毕后,推荐重新建立一个新的SSH连接,用于测试会话超时机制及Banner信息显示是否按预期工作。
[此处为图片1]


雷达卡


京公网安备 11010802022788号







