Ubuntu 22.04 Server 虚拟机初始化配置与优化指南

✅ Ubuntu 22.04 本地/通用服务器初始化配置清单

1. 设置时区

sudo timedatectl set-timezone Asia/Shanghai

2. 防火墙配置(UFW)

sudo ufw enable
sudo ufw default deny
# 可选放通SSH或其他端口
sudo ufw allow 22/tcp
# 查看状态
sudo ufw status
# 禁用防火墙
# sudo ufw disable

3. 安装常用基础软件

sudo apt update && sudo apt install -y vim wget lrzsz bash-completion tree lsof rsync unzip net-tools

4. 优化资源限制(limits.conf)

sudo tee -a /etc/security/limits.conf << 'EOF'
root soft nofile 65535
root hard nofile 65535
root soft stack unlimited
root hard stack unlimited
root soft nproc 127962
root hard nproc 127962
root soft core unlimited
root hard core unlimited
EOF

5. 配置静态IP(手动编辑)

sudo vi /etc/netplan/00-installer-config.yaml
sudo netplan apply

6. 彻底关闭 IPv6

sudo tee -a /etc/sysctl.conf << 'EOF'
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOF
sudo sysctl -p

7. 删除 Snap 系统(节省空间、提高兼容性)

snap list
sudo snap remove --purge lxd
sudo snap remove --purge core20
sudo snap remove --purge snapd
sudo apt remove --autoremove snapd

8. 配置国内 DNS 并关闭 DNSStubListener

sudo vi /etc/systemd/resolved.conf

修改为:

[Resolve]
DNS=223.5.5.5
DNSStubListener=no

然后执行:

sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo systemctl restart systemd-resolved

9. 开启系统时间同步(默认使用 systemd-timesyncd

sudo timedatectl set-ntp true

如需自定义 NTP:

sudo vi /etc/systemd/timesyncd.conf

10. 禁用 Swap(适用于纯内存型虚拟化环境)

sudo swapoff -a
sudo sysctl -w vm.swappiness=0
sudo sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab

11. SSH 启用 root 登录(仅限内网、测试环境,生产不推荐)

sudo vi /etc/ssh/sshd_config

修改或添加:

PermitRootLogin yes

然后重启 SSH 服务:

sudo systemctl restart ssh

🛠️ 一键初始化优化交互脚本

#!/bin/bashset -efunction prompt() {read -rp "$1 [y/N]: " responsecase "$response" in[yY][eE][sS]|[yY]) return 0 ;;*) return 1 ;;esac
}echo "🌐 Ubuntu 22.04 云/虚拟化服务器初始化交互脚本"# 1. 设置时区
if prompt "1️⃣ 设置时区为 Asia/Shanghai?"; thentimedatectl set-timezone Asia/Shanghaiecho "✅ 时区已设置为 Asia/Shanghai"
fi# 2. 安装常用工具
if prompt "2️⃣ 安装常用软件包(vim wget net-tools 等)?"; thenapt update && apt install -y vim wget lrzsz bash-completion tree lsof rsync unzip net-toolsecho "✅ 常用工具安装完成"
fi# 3. 优化 limits.conf
if prompt "3️⃣ 配置系统资源限制(/etc/security/limits.conf)?"; thencat >> /etc/security/limits.conf << EOF
root soft nofile 65535
root hard nofile 65535
root soft stack unlimited
root hard stack unlimited
root soft nproc 127962
root hard nproc 127962
root soft core unlimited
root hard core unlimited
EOFecho "✅ limits.conf 已配置"
fi# 4. 禁用 IPv6
if prompt "4️⃣ 禁用 IPv6?"; thencat >> /etc/sysctl.conf << EOF
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOFsysctl -pecho "✅ IPv6 已禁用"
fiif prompt "2️⃣ 修改 GRUB 参数彻底禁用 IPv6?(重启后生效)"; thenGRUB_FILE="/etc/default/grub"if grep -q "ipv6.disable=1" "$GRUB_FILE"; thenecho "🔁 GRUB 已包含 ipv6.disable=1,无需重复添加"elsesed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 ipv6.disable=1"/' "$GRUB_FILE"echo "✅ GRUB 参数已添加"update-grubfi
fi# 5. 删除 snap
if prompt "5️⃣ 删除 snap 及其组件(节省空间)?"; thensnap list || truesnap remove --purge lxd || truesnap remove --purge core20 || truesnap remove --purge snapd || trueapt remove --autoremove snapd -y || trueecho "✅ snap 已删除"
fi# 6. 配置 DNS
if prompt "6️⃣ 配置 DNS 为(223.5.5.5)并关闭 DNSStubListener?"; thensed -i '/^#*DNS=/c\DNS=223.5.5.5' /etc/systemd/resolved.confsed -i '/^#*DNSStubListener=/c\DNSStubListener=no' /etc/systemd/resolved.confln -sf /run/systemd/resolve/resolv.conf /etc/resolv.confsystemctl restart systemd-resolvedecho "✅ DNS 配置完成"
fi# 7. 开启时间同步
if prompt "7️⃣ 开启时间同步?"; thentimedatectl set-ntp trueecho "✅ NTP 时间同步已启用"
fi# 8. 禁用 Swap
if prompt "8️⃣ 禁用 Swap(建议内存足够情况下)?"; thenswapoff -asysctl -w vm.swappiness=0sed -ri '/^[^#]*swap/s@^@#@' /etc/fstabecho "✅ Swap 已禁用"
fi# 9. 防火墙配置(UFW)
if prompt "9️⃣ 启用防火墙(默认拒绝,放通22端口)?"; thenufw enableufw default denyufw allow 22/tcpecho "✅ 防火墙已启用,22端口已放行"
fi# 10. SSH 启用 Root 登录
if prompt "🔟 启用 root 用户 SSH 登录?(不推荐生产使用)"; thensed -i 's/^#\?PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_configsystemctl restart sshecho "✅ Root 登录已启用"
fiecho "🎉 所有选择的操作已完成 ✅"

保存为 init.sh,赋予执行权限并运行:

chmod +x init.sh
sudo ./init.sh

📌 建议后续补充(非必须):

  • 设置主机名(hostnamectl set-hostname
  • 创建新用户并设置免密sudo权限
  • 安装 fail2ban、防火墙策略等安全组件
  • 启用 BBR(TCP加速)
  • 开启日志轮转策略(logrotate)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91135.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在服务器上运行一个github项目

一、事情的缘起 今天一个朋友向我推荐了小红书上的一个视频&#xff0c;我看了一下这是一个在演示TypeWords项目的视频。这个项目是Github上采用vue来编写的一个开源项目。我进入该项目后看到了给出的样例网址2study.top&#xff0c;然后到上面看了一下。我发现这是一个通过打…

7.14 Java基础|String 和StringBuilder

补充注意&#xff1a;1、StringBuilder 的 append 方法可以接收整数类型的参数&#xff0c;并将其自动转换为字符串后添加到 StringBuilder 中2、该方法适用于所有基本数据类型&#xff08;如 long、double 等&#xff09;和对象&#xff08;通过调用其 toString() 方法&#x…

React 第六十九节 Router中renderMatches的使用详解及注意事项

前言 renderMatches 是 React Router 的一个高级实用函数&#xff0c;用于根据路由匹配结果渲染对应的组件树。它提供了对路由渲染过程的底层控制能力&#xff0c;特别适用于自定义路由渲染逻辑的场景。 一、基本概念和功能 renderMatches 函数的作用是将路由匹配结果转换为 Re…

esp8266-01S实现PPM波形

esp8266-01虽然小众&#xff0c;但是功能可不能少。因航模需要让ESP8266-01生成PPM波形。#include <ESP8266WiFi.h> #include <Ticker.h> // 仅用于延时函数替代#define PPM_PIN 2 // 使用 GPIO2 (需断开串口上传时的连接) #define CHANNELS 4 // PPM通道数量…

使用 pytest 测试框架构建自动化测试套件之一

pytest 是一个非常灵活且强大的测试框架&#xff0c;它支持简单的单元测试到复杂的功能测试。显著特点是其简洁的语法&#xff0c;可以无需继承 TestCase 类直接使用函数来编写测试用例&#xff0c;并通过 assert语句 进行断言。还支持参数化测试、丰富的插件系统。 pytest自动…

nacos docker 配置

docker.io/nacos 项目中国可用镜像列表 | 高速可靠的 Docker 镜像资源 1、Docker 拉取镜像 docker pull nacos/nacos-server:v2.1.0 2、创建宿主机挂载目录 mkdir -p /mydata/nacos/logs/ mkdir -p /mydata/nacos/conf/ AI写代码 3、启动nacos并复制文件到宿主机&#xff0…

Django 模板(Template)

1. 模板简介 作为 Web 开发框架,Django 提供了模板,可以很便利的动态生成 HTML。模版系统致力于表达外观,而不是程序逻辑。 模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用。 模板包含: HTM…

Word 文字编辑状态下按回车换行后是非正文格式

在Word里编辑时&#xff0c;按回车后新段落突然变成标题1、标题2这类格式&#xff0c;不再是正文样式&#xff0c;这通常是因为「正文」的样式设置出了问题——可能被默认设置成“后续段落自动应用标题1/标题2格式”了。 修改方法很简单&#xff1a; 找到并打开「正文」样式的修…

PySide6 UI 灵活性:QToolBar 的浮动与停靠及 QSplitter 的可调整面板

PySide6 UI 灵活性&#xff1a;QToolBar 的浮动与停靠及 QSplitter 的可调整面板 在现代桌面应用程序开发中&#xff0c;提供灵活且用户友好的界面至关重要。PySide6&#xff08;Qt for Python&#xff09;提供了强大的工具来构建这样的界面。本文将深入探讨两个关键的 PySide6…

B4016 树的直径

B4016 树的直径 - 洛谷 题目描述 给定一棵 n 个结点的树&#xff0c;树没有边权。请求出树的直径是多少&#xff0c;即树上最长的不重复经过一个点的路径长度是多少。 输入格式 第一行输入一个正整数 n&#xff0c;表示结点个数。 第二行开始&#xff0c;往下一共 n - 1 行…

【一维 前缀和+差分】

一、一维前缀和 1.1 定义 给定一个数组 a[1..n]&#xff0c;其前缀和数组 pre[1..n] 定义为&#xff1a; pre[i]a[1]a[2]⋯a[i] pre[i] a[1] a[2] \dots a[i] pre[i]a[1]a[2]⋯a[i] 即 pre[i] 表示原数组从第 1 项到第 i 项的和。 1.2 构建 int a[N], pre[N]; for (int i …

Spring Boot 双数据源配置

文章目录什么是双数据源&#xff1f;为什么需要双数据源&#xff1f;核心实现原理完整示例注意什么是双数据源&#xff1f; 双数据源是指在一个应用程序中同时配置和使用两个不同的数据库连接。比如&#xff1a; 一个连接订单数据库&#xff0c;处理业务数据一个连接用户中心…

【Java】【力扣】102.二叉树层序遍历

思路一个辅助队列&#xff08;初始化队列&#xff1a;根节点入队&#xff09;一个节点 出队&#xff0c;他的左右孩子入队循环 直到队列为空举例代码public List<List<Integer>> levelOrder(TreeNode root) {if (rootnull){return new ArrayList<List<Intege…

为什么有些PDF无法复制文字?原理分析与解决方案

在日常办公和学习中&#xff0c;我们经常会从PDF文件中复制文字&#xff0c;用于编辑、引用、整理笔记。但你是否也遇到过这样的情况&#xff1a;有些PDF中的文字根本无法选中&#xff0c;更无法复制粘贴&#xff1f; 看起来像是“文字”&#xff0c;但操作上却完全无效——这…

LabVIEW浏览器ActiveX事件交互

​程序围绕 WebBrowser ActiveX 控件&#xff0c;借 “Reg Event Callback” 注册标题变更回调&#xff0c;“Callback - Title Change.vi” 处理标题数据&#xff0c;“Monitor...” 响应 URL 变更&#xff0c;“Unregister...” 清理资源&#xff0c;实现浏览器事件交互与管控…

C++后端面试八股文

一、C 语言基础与底层原理请解释 new / delete 和 malloc / free 的区别和联系&#xff0c;以及使用它们时需要注意什么new 和 delete 是C的​​运算符&#xff08;Operator&#xff09;​​。这意味着它们可以被类&#xff08;通过 operator new 和 operator delete&#xff0…

基础分类模型及回归简介(一)

一、先搞懂两个核心任务&#xff1a;分类和回归咱们生活中总遇到要 “判断” 或 “预测” 的事&#xff1a;比如看到一个水果&#xff0c;判断是苹果还是橘子 —— 这就是分类&#xff08;结果是 “类别”&#xff09;&#xff1b;比如根据西瓜的大小、颜色&#xff0c;猜它能卖…

【LeetCode 热题 100】114. 二叉树展开为链表——(解法二)分治

Problem: 114. 二叉树展开为链表 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序…

【WPF】WPF 自定义控件 实战详解,含命令实现

&#x1f9e9;《WPF 自定义控件》实战详解本文将围绕如何编写一个自定义控件&#xff08;如带右键菜单的图片控件 ImageView&#xff09;&#xff0c;逐步讲解其定义、命令绑定与 ContextMenu 中常见的语法技巧。&#x1f9f1; 一、创建一个 WPF 自定义控件的步骤 WPF 中自定义…

Flink 2.0 DataStream算子全景

在实时流处理中&#xff0c;Apache Flink的DataStream API算子是构建流处理 pipeline 的基础单元。本文基于Flink 2.0&#xff0c;聚焦算子的核心概念、分类及高级特性。 一、算子核心概念&#xff1a;流处理的"原子操作 1. 数据流拓扑&#xff08;Stream Topology&#x…