关注「WeiyiGeek」公众号

设为「特别关注」每天带你玩转网络安全运维、应用开发、物联网IOT学习!

希望各位看友【关注、点赞、评论、收藏、投币】,助力每一个梦想。


本章目录


首发地址: https://mp.weixin.qq.com/s/dO1bV0tfXKn4ZmqlMcUrrQ

原文地址: https://blog.weiyigeek.top/2022/8-13-683.html


0x00 前言简述

描述: 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,针对脚本进行结构调整,更加方便大家一起参参与维护,若脚本有Bug请大家发送到我的邮箱 master@weiyigeek.top

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



首发地址: https://mp.weixin.qq.com/s/dO1bV0tfXKn4ZmqlMcUrrQ

实践视频https://www.bilibili.com/video/BV1fe4y1o7ov


0x01 加固实践

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

​ 帮助文档

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

脚本说明:

root@Ubuntu-Security:/home/ubuntu/Ubuntu# ./Ubuntu22.04-InitializeReinforce.sh
__ __ _ _ _____ _
\ \ / / (_) (_)/ ____| | |
\ \ /\ / /__ _ _ _ _| | __ ___ ___| | __
\ \/ \/ / _ \ | | | | | | |_ |/ _ \/ _ \ |/ /
\ /\ / __/ | |_| | | |__| | __/ __/ <
\/ \/ \___|_|\__, |_|\_____|\___|\___|_|\_\
__/ |
|___/
======================================================================
@ Desc: Ubuntu 22.04 Security Reinforce and System initialization
@ Mail bug reports: master@weiyigeek.top or pull request (pr)
@ Author : WeiyiGeek
@ Follow me on Blog : https://blog.weiyigeek.top/
@ Follow me on Wechat : https://weiyigeek.top/wechat.html?key=欢迎关注
@ Communication group : https://weiyigeek.top/visit.html
====================================================================== Usage: ./Ubuntu22.04-InitializeReinforce.sh [--start ] [--network] [--function] [--clear] [--version] [--help]
Option:
--start Start System initialization and security reinforcement.
--network Configure the system network and DNS resolution server.
--function PCall the specified shell function.
--clear Clear all system logs, cache and backup files.
--version Print version and exit.
--help Print help and exit. Mail bug reports or suggestions to <master@weiyigeek.top> or pull request (pr).
current version : 1.0 WARNING: 温馨提示:使用前先请配置机器上网环境,若没有配置请在 Ubuntu22.04.conf 文件中进行网络配置.

⚛️脚本函数:

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

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

​​ 配置文件:

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

$ vim Ubuntu22.04.conf
# Show Script Execute result (Y/N)
VAR_VERIFY_RESULT=Y # Modify Script vertify timeout (unit s)
VAR_VERIFY_TIMEOUT=5 # Modify Script run time
VAR_RUNDATE=$(date +%Y%m%d-%s) # Modify Path to logfile.
LOGFILE=/var/log/weiyigeek-${VAR_RUNDATE}.log # Modify Path to Backup directory.
BACKUPDIR=/var/log/.backup/${VAR_RUNDATE} # Modify Path to history record directory.
HISTORYDIR=/var/log/.history # Modify su command execute log file path.
SU_LOG_FILE=${HISTORYDIR}/su.log # Modify the hostname
VAR_HOSTNAME="Ubuntu-Security" # Modify the IP/MASK and Gateway
VAR_IP=10.20.172.152/24
VAR_GATEWAY=10.20.172.1 # Modify the DNS server
# DNSPod: 119.29.29.29 Alidns: 223.5.5.5 223.6.6.6
# Google: 8.8.8.8 8.8.4.4 Cloudflare: 1.1.1.1 1.0.0.1
# Internal : Your intranet domain name resolution server
VAR_DNS_SERVER=("223.5.5.5" "223.6.6.6") # Modify the SSHD server
VAR_SSHD_PORT=20221 # Modify the super user and normal user
# 建议将密码设置最小长度10(最好设置为12以上,等保要求),数字、大写字母、小写字母、特殊符号,密码包含三种及以上, 且无规律。
# 温馨提示: 下面设置的密码为初始密码,在系统登陆后会要求更改。
VAR_SUPER_USER=root
VAR_SUPER_PASS=R2022.weiyigeek.top
# normal user
VAR_USER_NAME=ubuntu
VAR_USER_PASS=U2022.weiyigeek.top
# low privilege application users
VAR_APP_USER=app
VAR_APP_PASS=A2022.weiyigeek.top # Modify the NTP server
VAR_NTP_SERVER=( "ntp.aliyun.com" "ntp.tencent.com" "192.168.10.254") # Modify the timezone
VAR_TIMEZONE=Asia/Shanghai # Modify Password policy
# 默认密码最大使用为90天、过期前15天提示, 密码最小长度为12
PASS_MIN_DAYS=1
PASS_MAX_DAYS=90
PASS_WARN_AGE=15
PASS_MIN_LEN=12
# 默认加密方式为SHA512, 重试次数为3, 新密码与旧密码至少有6个字符不同, 至少包含3种密码类型,不限制密码中包含大写字母、小写字母、数字、特殊符号的最大数量,记住三次旧密码。
VAR_PASS_ENCRYPT=SHA512
VAR_PASS_RETRY=3
VAR_PASS_DIFOK=6
VAR_PASS_MINCLASS=3
VAR_PASS_UCREDIT=-1
VAR_PASS_LCREDIT=-1
VAR_PASS_DCREDIT=-1
VAR_PASS_OCREDIT=-1
VAR_PASS_REMEMBER=3 # 禁止没有主目录的用户登录
VAR_DEFAULT_HOME=no
# 删除用户时禁止同步删除用户组
VAR_USERGROUPS_ENAB=no
# 启用成功登录的日志记录
VAR_LOG_OK_LOGINS=yes # Modify file or Dirctory privilege policy
VAR_UMASK=022 # Modify user login failed count policy
# 默认在5分钟之内登陆失败次数超过6次将锁定10分钟,终端超时10分钟
VAR_LOGIN_FAIL_COUNT=6
VAR_LOGIN_FAIL_INTERVAL=300
VAR_LOGIN_LOCK_TIME=600
VAR_LOGIN_TIMEOUT=300 # Modify history record count policy
VAR_HISTSIZE=128 # Modify firewall policy tcp or udp port .
VAR_ALLOW_PORT=("22,80,443,${VAR_SSHD_PORT}/tcp" "53/udp")

​​ 脚本使用

  • Step 1.上传到需要加固的主机服务器中,此处我上传到ubuntu用户的家目录。
OperatingSystem\Security> scp -r .\Ubuntu\ ubuntu@10.20.172.152:~
ubuntu@10.20.172.152\'s password:
Ubuntu22.04.conf 100% 2979 976.9KB/s 00:00
os-base.sh 100% 14KB 5.4MB/s 00:00
os-clean.sh 100% 2446 2.1MB/s 00:00
os-exceptions.sh 100% 2634 2.5MB/s 00:00
os-info.sh 100% 1169 1.3MB/s 00:00
os-manual.sh 100% 1860 2.0MB/s 00:00
os-network.sh 100% 3774 1.8MB/s 00:00
os-optimize.sh 100% 7752 3.7MB/s 00:00
os-security.sh 100% 23KB 5.7MB/s 00:00
os-service.sh 100% 3969 2.0MB/s 00:00
os-software.sh 100% 8007 3.3MB/s 00:00
Ubuntu22.04-InitializeReinforce.sh 100% 7989 5.0MB/s 00:00
  • Step 2.登陆服务器并切换到root用户, 查看 /home/ubuntu 目录下上传的加固版本。
$ ssh -p 22 ubuntu@10.20.172.152
ubuntu@Ubuntu-Security:~$ tree Ubuntu/
Ubuntu/
├── Readme.assets
│   ├── image-20220823143235577.png
│   └── image-20220823143354742.png
├── Readme.md
├── Ubuntu22.04-InitializeReinforce.sh
├── config
│   └── Ubuntu22.04.conf
├── example
│   └── 22.04
│   ├── 00-custom-header
│   ├── common-auth
│   ├── common-password
│   ├── issue
│   ├── issue.net
│   ├── login.defs
│   ├── profile
│   ├── resolved.conf
│   ├── sshd_config
│   └── su
└── scripts
├── os-base.sh
├── os-clean.sh
├── os-exceptions.sh
├── os-info.sh
├── os-manual.sh
├── os-network.sh
├── os-optimize.sh
├── os-security.sh
├── os-service.sh
└── os-software.sh ubuntu@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等端口。

脚本视频演示:

温馨提示: 点击上方图像进行观看视频。

原文地址: https://blog.weiyigeek.top/2022/8-13-683.html

本文至此完毕,更多技术文章,尽情期待下一章节!


WeiyiGeek Blog 个人博客 - 为了能到远方,脚下的每一步都不能少 】

欢迎各位志同道合的朋友一起学习交流【点击加入交流群】,如文章有误请在下方留下您宝贵的经验知识!

作者主页: 【 https://weiyigeek.top

博客地址: 【 https://blog.weiyigeek.top 】

专栏书写不易,如果您觉得这个专栏还不错的,请给这篇专栏 【点个赞、投个币、收个藏、关个注,转个发,留个言】(人间六大情),这将对我的肯定,谢谢!。

  • echo "【点个赞】,动动你那粗壮的拇指或者芊芊玉手,亲!"

  • printf("%s", "【投个币】,万水千山总是情,投个硬币行不行,亲!")

  • fmt.Printf("【收个藏】,阅后即焚不吃灰,亲!")

  • console.info("【转个发】,让更多的志同道合的朋友一起学习交流,亲!")

  • System.out.println("【关个注】,后续浏览查看不迷路哟,亲!")

  • cout << "【留个言】,文章写得好不好、有没有错误,一定要留言哟,亲! " << endl;

更多网络安全、系统运维、应用开发、物联网实践、网络工程、全栈文章,尽在 https://blog.weiyigeek.top 之中,谢谢各位看又支持!

网安等保-Linux服务器之最新Ubuntu-22.04-LTS系统内核优化与安全加固配置脚本使用分享的更多相关文章

  1. linux服务器之LVS、Nginx和HAProxy负载均衡器对比

    linux服务器之LVS.Nginx和HAProxy负载均衡器对比. LVS特点:  1.抗负载能力强,使用IP负载均衡技术,只做分发,所以LVS本身并没有多少流量产生:  2.稳定性.可靠性好,自身 ...

  2. (转)Ubuntu 12.04 LTS安装VMware Tools实现linux和window 互相复制:无法找到kernel header path的问题

    Ubuntu 12.04 LTS安装VMware Tools无法找到kernel header path的问题   ubuntuvmware Ubuntu 12.04 安装 VMware Tools, ...

  3. Linux Ubuntu 14.04 LTS下VirtualBox连接USB

    1.环境 主机:Ubuntu 14.04 LTS 虚拟机:Windows 7 专业版本 VirtualBox: 图形用户界面版本 5.1.8 r111374 (Qt5.6.1) 2.在主机上给Virt ...

  4. Compile Linux Kernel on Ubuntu 12.04 LTS (Detailed)

    This tutorial will outline the process to compile your own kernel for Ubuntu. It will demonstrate bo ...

  5. Linux服务管理(Ubuntu服务管理工具sysv-rc-conf)(转)

    Linux运行级别 Linux系统任何时候都运行在一个指定的运行级上,并且不同的运行级的程序和服务都不同,所要完成的工作和要达到的目的都不同,系统可以在这些运行级之间进行切换,以完成不同的工作. 运行 ...

  6. Linux服务器之SSH

    SSH 1.ssh是安全的加密协议,用于远程连接linux服务器. 2.ssh默认端口是22,安全协议版本ssh2. 3.ssh服务端主要包含两个服务功能ssh远程连接,sftp服务. 4.linux ...

  7. XPS1330 作为Linux服务器之安装配置计划

      # Task 状态 完成时间 备注 博文链接  1.  打通SSH  未开始  --  安装系统后已经具备  --  2.  打通FTP  未开始  --  安装系统后已经具备  --  3.   ...

  8. linux服务器之redis

    linux环境下安装redis服务器: redis下载地址:http://redis.io/download $ wget http://download.redis.io/releases/redi ...

  9. linux服务器之LVS、Nginx和HAProxy负载均衡器对比总结

    LVS特点: 1.抗负载能力强,使用IP负载均衡技术,只做分发,所以LVS本身并没有多少流量产生: 2.稳定性.可靠性好,自身有完美的热备方案:(如:LVS+Keepalived) 3.应用范围比较广 ...

随机推荐

  1. Docker容器手动安装mysql(国内镜像)

    Docker手动安装mysql 1.创建centos镜像的容器 [root@localhost Tools]# docker run -i -d -h zabbix --name zabbix -p ...

  2. ACM-01背包问题-Python

    日后完善 二维数组实现 if __name__ == '__main__': # 背包空间 space = 10 # 默认第一个元素为 0, 仅仅是为了方便理解 weights = [0, 2, 2, ...

  3. 基于Vite+React构建在线Excel

    Vite是随着Vue3一起发布的一款新型前端构建工具,能够显著的提升前端开发体验,它主要由两部分组成: (1)一个开发服务器,它基于**原生ES模块提供了丰富的内建功能,如速度快到惊人的 模块热更新( ...

  4. ABAP CDS - DEFINE VIEW, name_list

    Syntax ... ( name1, name2, ... ) ... Effect Defines the element names of a CDS view in ABAP CDS in a ...

  5. 【前端面试】(二)JavaScript加法运算

    视频链接:JavaScript加法运算 - Web前端工程师面试题讲解 数值 + 数值 首先看菜鸟教程有关于数值对象的教程 JavaScript Number 对象 可以知道Infinity , -I ...

  6. 全新升级的AOP框架Dora.Interception[6]: 框架设计和实现原理

    本系列前面的五篇文章主要介绍Dora.Interception(github地址,觉得不错不妨给一颗星)的编程模式以及对它的扩展定制,现在我们来聊聊它的设计和实现原理.(拙著<ASP.NET C ...

  7. IDEA插件配置之Eclipse Code Formatte

    1.下载 在idea中的Plugins中下载插件 Eclipse Code Formatte,下载过之后重启. 2.配置 将自己下载的xml文件加载进来即可. 这个xml文件可自行在网上找找,有需要的 ...

  8. CentOS6安装使用ntp同步时间

    [root@server yum.repos.d]# yum install ntp已加载插件:fastestmirror, priorities, refresh-packagekit, secur ...

  9. Java编程作业

    1.编程题 设计一个用户类User,类中的变量有用户名.密码和记录用户数量的变量,定义3个构造方法:无参的.为用户名赋值的.为用户名和密码赋值的,还有获取和设置密码的方法和返回类信息的方法. pack ...

  10. java的方法(类似与C语言函数)

    package www.nihao; import java.util.Scanner; public class demo02 { public static void main(String[] ...