Contents

网安等保-Linux服务器之最新Ubuntu-22.04-LTS系统内核优化与安全加固配置脚本分享

Contents

前言简述

描述: Ubuntu 22.04 LTS 是Canonical于2022年4月21日发布的操作系统,代号为Jammy Jellyfish(果酱水母), 其采用GNOME电源配置文件和流线型工作空间过渡,提高优化图形驱动程序上的桌面帧速率,使用新的加密算法迁移到OpenSSL v3以提高安全性,并且为内存安全的系统级编程添加了Rus。

而又由于CentOS发行版在最近几年时内将不在进行维护更新了,所以为了考虑到系统的安全性、可维护性、以及后期运维成本,我们企业内部在2020年时就已经将ubuntu作为主要的服务器系统,所以在我公司新上的业务系统基本采用debian系的发行版服务器来承载基础应用业务,而使用最多当然是Ubuntu此发行版。

现在 Ubuntu 推出了22.04 , 想到原来每次都需要手动一台一台的进行主机安全加固以符合等保要求,所以了节约工作时间提高工作效率,有更多时间进行学习进步,则需要将将我们公司所使用的系统基线镜像进行更新迭代,编写适用于ubuntu 22.04系统的安全加固脚本,并且总结此篇文章并在文章末尾附上自动化安全加固脚本,谢谢大家支持。

此处我依据在我从前编写的 Ubuntu 20.04 系统安全加固脚本中对其根据最新的22.04版本进行更新了等保相关规定策略,以及更新适用最新版本的 Ubuntu,针对脚本进行结构调整,更加方便大家一起参参与维护

想要获取该加固脚本的朋友可以在WX公众号【WeiyiGeek】中回复【ubuntu系统加固】即可获得,或者访问【https://weiyigeek.top/wechat.html?key=ubuntu系统加固】

​首发地址: https://mp.weixin.qq.com/s/dO1bV0tfXKn4ZmqlMcUrrQ 实践视频:https://www.bilibili.com/video/BV1fe4y1o7ov

加固实践

描述: Ubuntu 22.04 主机系统安全加固的 Ubuntu22.04-InitializeReinforce.sh 脚本相关上的使用说明以及实践。

📖​ 帮助文档 描述: 本工具集主要针对于 Ubuntu 22.04 、20.04 LTS 操作系统进行安全加固以及系统初始化操作。

🛠️ 脚本说明:

 1root@Ubuntu-Security:/home/ubuntu/Ubuntu# ./Ubuntu22.04-InitializeReinforce.sh
 2     __          __  _       _  _____           _
 3     \ \        / / (_)     (_)/ ____|         | |
 4     \ \  /\  / /__ _ _   _ _| |  __  ___  ___| | __
 5       \ \/  \/ / _ \ | | | | | | |_ |/ _ \/ _ \ |/ /
 6       \  /\  /  __/ | |_| | | |__| |  __/  __/   <
 7         \/  \/ \___|_|\__, |_|\_____|\___|\___|_|\_\
 8                      __/ |
 9                      |___/
10======================================================================
11@ Desc: Ubuntu 22.04 Security Reinforce and System initialization
12@ Mail bug reports: master@weiyigeek.top or pull request (pr)
13@ Author : WeiyiGeek
14@ Follow me on Blog   : https://blog.weiyigeek.top/
15@ Follow me on Wechat : https://weiyigeek.top/wechat.html?key=欢迎关注
16@ Communication group : https://weiyigeek.top/visit.html
17======================================================================
18
19Usage: ./Ubuntu22.04-InitializeReinforce.sh [--start ] [--network] [--function] [--clear] [--version] [--help]
20Option:
21  --start            Start System initialization and security reinforcement.
22  --network          Configure the system network and DNS resolution server.
23  --function         PCall the specified shell function.
24  --clear            Clear all system logs, cache and backup files.
25  --version          Print version and exit.
26  --help             Print help and exit.
27
28Mail bug reports or suggestions to <master@weiyigeek.top> or pull request (pr).
29current version : 1.0

WARNING: 温馨提示:使用前先请配置机器上网环境,若没有配置请在 Ubuntu22.04.conf 文件中进行网络配置.

运行加固脚本

1./Ubuntu22.04-InitializeReinforce.sh --start

⚛️脚本函数:

描述: 如下脚本将根据参数在 Ubuntu22.04-InitializeReinforce.sh 分别进行调用执行, 也可采用--function参数进行指定调用。

  1❯ grep -r -n  "函数名称" -A 1 *
  2scripts/os-base.sh:26:# 函数名称: base_hostname
  3scripts/os-base.sh-27-# 函数用途: 主机名称设置
  4--
  5scripts/os-base.sh:55:# 函数名称: ubuntu_mirror
  6scripts/os-base.sh-56-# 函数用途: ubuntu 系统主机软件仓库镜像源
  7--
  8scripts/os-base.sh:126:# 函数名称: ubuntu_software
  9scripts/os-base.sh-127-# 函数用途: ubuntu 系统主机内核版本升级以常规软件安装
 10--
 11scripts/os-base.sh:153:# 函数名称: base_timezone
 12scripts/os-base.sh-154-# 函数用途: 主机时间同步校准与时区设置
 13--
 14scripts/os-base.sh:192:# 函数名称: base_banner
 15scripts/os-base.sh-193-# 函数用途: 远程本地登陆主机信息展示
 16--
 17scripts/os-base.sh:345:# 函数名称: base_reboot
 18scripts/os-base.sh-346-# 函数用途: 是否进行重启或者关闭服务器
 19--
 20scripts/os-clean.sh:27:# 函数名称: system_clean
 21scripts/os-clean.sh-28-# 函数用途: 删除安全加固过程临时文件清理为基线镜像做准备
 22--
 23scripts/os-exceptions.sh:26:# 函数名称: problem_usercrond
 24scripts/os-exceptions.sh-27-# 函数用途: 解决普通用户定时任务无法定时执行问题
 25--
 26scripts/os-exceptions.sh:45:# 函数名称: problem_multipath
 27scripts/os-exceptions.sh-46-# 函数用途: 解决 ubuntu multipath add missing path 错误
 28--
 29scripts/os-network.sh:27:# 函数名称: net_config
 30scripts/os-network.sh-28-# 函数用途: 主机IP地址与网关设置
 31--
 32scripts/os-network.sh:70:# 函数名称: net_dns
 33scripts/os-network.sh-71-# 函数用途: 设置主机DNS解析服务器
 34--
 35scripts/os-optimize.sh:27:# 函数名称: optimize_kernel
 36scripts/os-optimize.sh-28-# 函数用途: 系统内核参数的优化配置
 37--
 38scripts/os-optimize.sh:84:# 函数名称: resources_limits
 39scripts/os-optimize.sh-85-# 函数用途: 系统资源文件打开句柄数优化配置
 40--
 41scripts/os-optimize.sh:115:# 函数名称: swap_partition
 42scripts/os-optimize.sh-116-# 函数用途: 创建系统swap分区
 43--
 44scripts/os-security.sh:27:# 函数名称: sec_usercheck
 45scripts/os-security.sh-28-# 函数用途: 用于锁定或者删除多余的系统账户
 46--
 47scripts/os-security.sh:65:# 函数名称: sec_userconfig
 48scripts/os-security.sh-66-# 函数用途: 针对拥有ssh远程登陆权限的用户进行密码口令设置。
 49--
 50scripts/os-security.sh:131:# 函数名称: sec_passpolicy
 51scripts/os-security.sh-132-# 函数用途: 用户密码复杂性策略设置 (密码过期周期0~90、到期前15天提示、密码长度至少12、复杂度设置至少有一个大小写、数字、特殊字符、密码三次不能一样、尝试次数为三次)
 52--
 53scripts/os-security.sh:166:# 函数名称: sec_sshdpolicy
 54scripts/os-security.sh-167-# 函数用途: 系统sshd服务安全策略设置
 55--
 56scripts/os-security.sh:194:# 函数名称: sec_loginpolicy
 57scripts/os-security.sh-195-# 函数用途: 用户登陆安全策略设置
 58--
 59scripts/os-security.sh:230:# 函数名称: sec_historypolicy
 60scripts/os-security.sh-231-# 函数用途: 用户终端执行的历史命令记录安全策略设置
 61--
 62scripts/os-security.sh:261:# 函数名称: sec_grubpolicy
 63scripts/os-security.sh-262-# 函数用途: 系统 GRUB 安全设置防止物理接触从grub菜单中修改密码
 64--
 65scripts/os-security.sh:304:# 函数名称: sec_firewallpolicy
 66scripts/os-security.sh-305-# 函数用途: 系统防火墙策略设置, 建议操作完成后重启计算机.
 67--
 68scripts/os-security.sh:335:# 函数名称: sec_ctrlaltdel
 69scripts/os-security.sh-336-# 函数用途: 禁用 ctrl+alt+del 组合键对系统重启 (必须要配置我曾入过坑)
 70--
 71scripts/os-security.sh:355:# 函数名称: sec_recyclebin
 72scripts/os-security.sh-356-# 函数用途: 设置文件删除回收站别名(防止误删文件)(必须要配置,我曾入过坑)
 73--
 74scripts/os-security.sh:405:# 函数名称: sec_supolicy
 75scripts/os-security.sh-406-# 函数用途: 切换用户日志记录和切换命令更改名称为SU(可选)
 76--
 77scripts/os-security.sh:425:# 函数名称: sec_privilegepolicy
 78scripts/os-security.sh-426-# 函数用途: 系统用户sudo权限与文件目录创建权限策略设置
 79--
 80scripts/os-service.sh:26:# 函数名称: svc_apport
 81scripts/os-service.sh-27-# 函数用途: 禁用烦人的apport错误报告
 82--
 83scripts/os-service.sh:52:# 函数名称: svc_snapd
 84scripts/os-service.sh-53-# 函数用途: 不使用snapd容器的环境下禁用或者卸载多余的snap软件及其服务
 85--
 86scripts/os-service.sh:75:# 函数名称: svc_cloud-init
 87scripts/os-service.sh-76-# 函数用途: 非云的环境下禁用或者卸载多余的cloud-init软件及其服务
 88--
 89scripts/os-service.sh:101:# 函数名称: svc_debugshell
 90scripts/os-service.sh-102-# 函数用途: 在系统启动时禁用debug-shell服务
 91--
 92scripts/os-software.sh:26:# 函数名称: install_chrony
 93scripts/os-software.sh-27-# 函数用途: 安装配置 chrony 时间同步服务器
 94--
 95scripts/os-software.sh:79:# 函数名称: install_java
 96scripts/os-software.sh-80-# 函数用途: 安装配置java环境
 97--
 98scripts/os-software.sh:110:## 函数名称: install_docker
 99scripts/os-software.sh-111-## 函数用途: 在 Ubuntu 主机上安装最新版本的Docker
100--
101scripts/os-software.sh:201:## 函数名称: install_cockercompose
102scripts/os-software.sh-202-## 函数用途: 在 Ubuntu 主机上安装最新版本的Dockercompose

​☕​ 配置文件:

描述: 在 Ubuntu22.04.conf 配置文件中定义脚本所需的安全策略以及日志、历史记录存放路径, 以模板的初始密码与防火墙配置等,其中最主要的是一定要配置好IP地址,以成功拉取软件仓库中的工具。

 1$ vim Ubuntu22.04.conf
 2# Show  Script Execute result (Y/N)
 3VAR_VERIFY_RESULT=Y
 4
 5# Modify Script vertify timeout (unit s)
 6VAR_VERIFY_TIMEOUT=5
 7
 8# Modify Script run time
 9VAR_RUNDATE=$(date +%Y%m%d-%s)
10
11# Modify Path to logfile.
12LOGFILE=/var/log/weiyigeek-${VAR_RUNDATE}.log
13
14# Modify Path to Backup directory.
15BACKUPDIR=/var/log/.backup/${VAR_RUNDATE}
16
17# Modify Path to history record directory.
18HISTORYDIR=/var/log/.history
19
20# Modify su command execute log file path.
21SU_LOG_FILE=${HISTORYDIR}/su.log
22
23# Modify the hostname
24VAR_HOSTNAME="Ubuntu-Security"
25
26# Modify the IP/MASK and Gateway
27VAR_IP=10.20.172.152/24
28VAR_GATEWAY=10.20.172.1
29
30# Modify the DNS server
31# DNSPod: 119.29.29.29      Alidns: 223.5.5.5 223.6.6.6
32# Google: 8.8.8.8 8.8.4.4   Cloudflare: 1.1.1.1 1.0.0.1
33# Internal : Your intranet domain name resolution server
34VAR_DNS_SERVER=("223.5.5.5" "223.6.6.6")
35
36# Modify the SSHD server
37VAR_SSHD_PORT=20221
38
39# Modify the super user and normal user
40# 建议将密码设置最小长度10(最好设置为12以上,等保要求),数字、大写字母、小写字母、特殊符号,密码包含三种及以上, 且无规律。
41# 温馨提示: 下面设置的密码为初始密码,在系统登陆后会要求更改。
42VAR_SUPER_USER=root
43VAR_SUPER_PASS=R2022.weiyigeek.top
44# normal user
45VAR_USER_NAME=ubuntu
46VAR_USER_PASS=U2022.weiyigeek.top
47# low privilege application users
48VAR_APP_USER=app
49VAR_APP_PASS=A2022.weiyigeek.top
50
51# Modify the NTP server
52VAR_NTP_SERVER=( "ntp.aliyun.com" "ntp.tencent.com" "192.168.10.254")
53
54# Modify the timezone
55VAR_TIMEZONE=Asia/Shanghai
56
57# Modify Password policy
58# 默认密码最大使用为90天、过期前15天提示, 密码最小长度为12
59PASS_MIN_DAYS=1
60PASS_MAX_DAYS=90
61PASS_WARN_AGE=15
62PASS_MIN_LEN=12
63# 默认加密方式为SHA512, 重试次数为3, 新密码与旧密码至少有6个字符不同, 至少包含3种密码类型,不限制密码中包含大写字母、小写字母、数字、特殊符号的最大数量,记住三次旧密码。
64VAR_PASS_ENCRYPT=SHA512
65VAR_PASS_RETRY=3
66VAR_PASS_DIFOK=6
67VAR_PASS_MINCLASS=3
68VAR_PASS_UCREDIT=-1
69VAR_PASS_LCREDIT=-1
70VAR_PASS_DCREDIT=-1
71VAR_PASS_OCREDIT=-1
72VAR_PASS_REMEMBER=3
73
74# 禁止没有主目录的用户登录
75VAR_DEFAULT_HOME=no
76# 删除用户时禁止同步删除用户组
77VAR_USERGROUPS_ENAB=no
78# 启用成功登录的日志记录
79VAR_LOG_OK_LOGINS=yes
80
81# Modify file or Dirctory privilege policy
82VAR_UMASK=022
83
84# Modify user login failed count policy
85# 默认在5分钟之内登陆失败次数超过6次将锁定10分钟,终端超时10分钟
86VAR_LOGIN_FAIL_COUNT=6
87VAR_LOGIN_FAIL_INTERVAL=300
88VAR_LOGIN_LOCK_TIME=600
89VAR_LOGIN_TIMEOUT=300
90
91# Modify history record count policy
92VAR_HISTSIZE=128
93
94# Modify firewall policy tcp or udp port .
95VAR_ALLOW_PORT=("22,80,443,${VAR_SSHD_PORT}/tcp" "53/udp")

​🏃​ 脚本使用

  • Step 1.上传到需要加固的主机服务器中,此处我上传到ubuntu用户的家目录。
 1OperatingSystem\Security> scp -r .\Ubuntu\ ubuntu@10.20.172.152:~
 2ubuntu@10.20.172.152\'s password:
 3Ubuntu22.04.conf                                                                      100% 2979   976.9KB/s   00:00
 4os-base.sh                                                                            100%   14KB   5.4MB/s   00:00
 5os-clean.sh                                                                           100% 2446     2.1MB/s   00:00
 6os-exceptions.sh                                                                      100% 2634     2.5MB/s   00:00
 7os-info.sh                                                                            100% 1169     1.3MB/s   00:00
 8os-manual.sh                                                                          100% 1860     2.0MB/s   00:00
 9os-network.sh                                                                         100% 3774     1.8MB/s   00:00
10os-optimize.sh                                                                        100% 7752     3.7MB/s   00:00
11os-security.sh                                                                        100% 23KB     5.7MB/s   00:00
12os-service.sh                                                                         100% 3969     2.0MB/s   00:00
13os-software.sh                                                                        100% 8007     3.3MB/s   00:00
14Ubuntu22.04-InitializeReinforce.sh                                                    100% 7989     5.0MB/s   00:00
  • Step 2.登陆服务器并切换到root用户, 查看 /home/ubuntu 目录下上传的加固版本。
 1$ ssh -p 22 ubuntu@10.20.172.152
 2ubuntu@Ubuntu-Security:~$ tree Ubuntu/
 3Ubuntu/
 4├── Readme.assets
 5│   ├── image-20220823143235577.png
 6│   └── image-20220823143354742.png
 7├── Readme.md
 8├── Ubuntu22.04-InitializeReinforce.sh
 9├── config
10│   └── Ubuntu22.04.conf
11├── example
12│   └── 22.04
13│       ├── 00-custom-header
14│       ├── common-auth
15│       ├── common-password
16│       ├── issue
17│       ├── issue.net
18│       ├── login.defs
19│       ├── profile
20│       ├── resolved.conf
21│       ├── sshd_config
22│       └── su
23└── scripts
24    ├── os-base.sh
25    ├── os-clean.sh
26    ├── os-exceptions.sh
27    ├── os-info.sh
28    ├── os-manual.sh
29    ├── os-network.sh
30    ├── os-optimize.sh
31    ├── os-security.sh
32    ├── os-service.sh
33    └── os-software.sh
34
35ubuntu@Ubuntu-Security:~$ sudo -i
  • Step 3.切换root用户后进入 /home/ubuntu/Ubuntu,安全加固脚本存放目录,首先将所有的sh文件赋予可执行去那些,其次需要在 Ubuntu22.04.conf 中进行相应配置,最后运行Ubuntu22.04-InitializeReinforce.sh –start即可,最后等待系统重启即可。
cd /home/ubuntu/Ubuntu
chmod +x -R *
Ubuntu22.04-InitializeReinforce.sh  --start

运行加固脚本

  • Step 4.中途请根据需求输入Y/N,然后等待重启即可,在重启后请注意sshd服务端口更改为20221所以此时你需要指定ssh连接端口。
ssh -p 20221 ubuntu@10.20.172.152  # Ubuntu22.04.conf 定义的 ubuntu 初始化密码,登陆后会提示你进行更改。
su - root  # 只能有ubuntu用户切换到root用户,其它低权限以及app用户无法通过su进行用户切换

加固结果

温馨提示: 如果执行到密码更新策略时,选择输入了(N) 否将不会更新其在Ubuntu22.04.conf脚本中定义的密码。

温馨提示:脚本中默认root密码为R2022.weiyigeek.top。

温馨提示: 防火墙策略只开放了80,443,22,20221等端口。