实验环境:CentOS 7 Server

备注:因为我安装的CentOS系统没有图形界面,实验步骤将在SSH终端进行,SSH工具为GMSSH

1. Linux 安全基线配置

1.1. 账号管理和认证授权

1.1.1. 用户口令安全基线配置

1.1.1.1. 编辑/etc/login.defs文件修改账户口令的生存期
Vim /etc/login.defs

1.1.1.2. 编辑/etc/pam.d/system-auth文件,设置账户口令长度至少为8位,
Vim /etc/pam.d/system-auth

1.1.1.3. 检查是否存在空口令账户
Awk -F: ‘($2 == “”) {print $1}’ /etc/shadow

1.1.2. 用户访问控制

1.1.2.1. 设置重要文件权限,
chmod 644 /etc/passwd
chmod 600 /etc/shadow
chmod 644 /etc/group

1.1.2.2. 由不同人员维护系统和数据库
adduser admin									#创建用户admin
passwd admin									#为用户admin设置密码
chmod -v u+w /etc/sudoers			#增加sudoers文件的读写权限,默认为只读
vim /etc/sudoers							#修改sudoers文件
#Allow root to run any commands anywhere
root		ALL=(ALL)			ALL
admin		ALL=(ALL)			ALL
chmod -v u-w /etc/sudoers			#删除sudoers的写入权限

1.1.2.3. 为系统不需要登录的账户设置 nologin
useradd www												#创建www用户
useradd mysql_1										#创建mysql_1用户
useradd mysql_2										#创建mysql_2用户
cat /etc/passwd
cat /etc/group

将 www,mysql_1,mysql_2 设置为 nologin

1.1.2.4. 账户和共享账户删除
cat /home/*							#检查home目录下的文件
userdel -r username			#删除账户

1.1.3. 检查是否存在除 root 以外 UUID 为 0 的用户

awk -F: '($3 == 0) {print $1}' /etc/passwd

1.1.4. root 用户环境变量的安全性

检查用户环境变量是否包含 root 用户的父目录

echo $PATH | egrep '(^|:) (\.|:$)'

'(^|:) (\.|:$)' 666 这啥神仙命令,linux 系统我用了两年没遇到过这种命令!!!!

环境变量不包含 root 用户的父目录

检查是否包含组目录权限为 777 的目录

find / -type d -perm 777

不包含权限为 777 的组目录

1.2. 认证

1.2.1. 检查系统中是否有.netrc 和.rhosts 文件,

运行结果为空则安全,否则不安全,若返回值不为空,需删除文件

find /-name.netrc
find /-name.rhosts

1.2.2. 禁止 root 用户远程登录

不是!不让 root 用户远程登录那我 ssh 呢?

cp /etc/ssh/sshd_config /etc/ssh/sshd_config_bak				#备份sshd_config文件
vim /etc/ssh/sshd_config

1.2.3. 用户的 umask 配置

more /etc/profile
more /etc/csh.login
more /etc/csh.cshre
more /etc/bash

不是!这咋这么多,我本来就没多少时间,这我得看到啥时候,不看了😁直接跳过

1.2.4. 查找未授权的 suid/sgid 文件

for PART in `grep -v ^#/etc/fstab | awk '($6 !="0"){print $2}'`; do
find $PART -perm -04000 -o -perm -02000 -perm -04000 -o -perm -02000 -type f -print
done

?这啥命令?怎么感觉哪里怪怪的

1.2.5. 检查任何人都有写权限的目录

for PART in `grep -v ^#/etc/fstab | awk '$3=="ext2"||$3=="ext3"{print $2}'`; do
find $PART -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
done

?咋还是不对劲?运行结果呢??目录呢?

1.2.6. 查找任何人都有写权限的目录

for PART in `grep -v ^#/etc/fstab | awk '($6!="0"){print $2}'`; do
find $PART -xdev -type f \( -perm -0002 -a ! -perm -1000 \) -print
done

1.2.7. 检查没有属主的文件

for PART in `grep -v ^# /etc/fstab | awk '($6!="0"){print $2}'`; do
find $PART -nouser -o -nogroup -print
done

1.2.8. 检查异常隐含文件

find /-xdev -name ".. *" -print
find /-xdev -name "... *" -print|cat -v

1.3. 日志审计

1.3.1. rsyslog 登录事件记录

more /etc/rsyslog.conf
Authpriv.*/var/log/secure					查看参数Authpriv的值

1.4. rsyslog 的配置审核

1.4.1. 设置 AUDITD 开机自启动

systemctl enable auditd

1.4.2. 判定条件

系统能够审计用户操作

1.4.3. 查看 AUDITD 开机自启状态

systemctl is-enabled auditd

成功设置开机自启!!

2. 提高 Linux 安全基线配置实验

2.1. 用户和权限管理

2.1.1. 创建非 root 账户用户

adduser alpha02

2.1.2. 为用户分配最需要的权限

usermod -aG sudo alpha02

2.1.3. 配置 sudo 规则,限制特定用户对敏感命令的执行

vim sudo
alpha02    ALL=(ALL)NOPASSWD:/path/to/sensitive/command

2.2. 网络和服务配置

2.2.1. 锁定网络配置文件,防止未授权更改

sudo chown root:root /etc/sysconfig/network-scripts/ifcfg-eth0
sudo chown 644 /etc/sysconfig/network-scripts/ifcfg-eth0

2.2.2. 配置防火墙规则,允许或拒绝特定的网络流量

#放行192.168.0.0/24访问TCP 22端口
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" port protocol="tcp" port="22" accept'

#拒绝192.168.0.0/24访问TCP 80端口
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" port protocol="tcp" port="80" reject'

2.3. 日志和监控配置

2.3.1. 配置远程日志服务器,确保日志的完整性和可用性

sudo yum install rsyslog-gnutls
sudo vim /etc/rsyslog.conf
#在末尾添加以下内容
*.* @@remote_server:port

2.3.2. 设置实时监控告警,以便快速响应潜在的威胁

sudo yum install nagios-nrpe-plugin
sudo vim /etc/nagion3/nrpe.cfg
#在文件末尾添加以下内容
command{check_disk}=/usr/lib/nagion3/plugin3/plugins/check_disk

终于写完了!这么长的作业是不是应该加 90 学分!😁😁😁😁

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐