虚拟机初始化 - waitspring/morning-tavern Wiki

Linux

environment version

阿里云,华为云,腾讯云在内的公有云服务,其自带镜像的操作系统都以最小化模式安装,使用起来存在诸多不便
我使用这篇文档,记录最小化模式安装操作系统后的调优步骤,构造更好的环境适用性,满足等保三级标准

一、更新大陆地区的 YUM 源

清华大学 https://mirrors.tuna.tsinghua.edu.cn/
南京大学 https://mirrors.nju.edu.cn/
中国科学技术大学 https://mirrors.ustc.edu.cn/
华为云 https://mirrors.huaweicloud.com/
腾讯云 https://mirrors.cloud.tencent.com/
阿里云 https://mirrors.aliyun.com/

我们使用南京大学提供的 YUM 源为对象,一键式更新虚拟机的 YUM 源:

sed -i -r '/enabled/s/^(.*enabled)(.*)$/enabled=0/g' /etc/yum.repos.d/*.repo
cat > /etc/yum.repos.d/host.repo << EOF
[os]
name     = os
gpgcheck = 0
enabled  = 1
baseurl  = https://mirrors.nju.edu.cn/centos/7/os/x86_64/

[extras]
name     = extras
gpgcheck = 0
enabled  = 1
baseurl  = https://mirrors.nju.edu.cn/centos/7/extras/x86_64/

[epel]
name     = epel
gpgcheck = 0
enabled  = 1
baseurl  = https://mirrors.nju.edu.cn/epel/7/x86_64/
EOF
yum clean all
yum makecache
yum repolist all

二、使用 YUM 源安装必要的软件包

bash-completion.noarch Programmable completion for Bash
bash-completion-extras.noarch Additional programmable completions for Bash
bind-utils.x86_64 Utilities for querying DNS name servers
chrony.x86_64 An NTP client/server
dos2unix.x86_64 Text file format converters
figlet.x86_64 A program for making large letters out of ordinary text
gcc.x86_64 C support for GCC
gcc-c++.x86_64 C++ support for GCC
htop.x86_64 Interactive process viewer
java-1.8.0-openjdk.x86_64 OpenJDK 8 Runtime Environment
java-1.8.0-openjdk-devel.x86_64 OpenJDK 8 Development Environment
libaio.x86_64 Linux-native asynchronous I/O access library
libaio-devel.x86_64 Development files for Linux-native asynchronous I/O access
lrzsz.x86_64 The lrz and lsz modem communications programs
nmap.x86_64 Network exploration tool and security scanner
nmap-ncat.x86_64 Nmap's Netcat replacement
procps-ng.x86_64 System and process monitoring utilities
psmisc.x86_64 Utilities for managing processes on your system
telnet.x86_64 The client program for the Telnet remote login protocol
tree.x86_64 File system tree viewer
unzip.x86_64 A utility for unpacking zip files
wget.x86_64 A utility for retrieving files using the HTTP or FTP protocols
xorg-x11-apps.x86_64 X.Org X11 applications
xorg-x11-xauth.x86_64 X.Org X11 X authority utilities
yum install -y bash-completion.noarch \
               bash-completion-extras.noarch \
               bind-utils.x86_64 \
               chrony.x86_64 \
               dos2unix.x86_64 \
               figlet.x86_64 \
               gcc.x86_64 \
               gcc-c++.x86_64 \
               htop.x86_64 \
               java-1.8.0-openjdk.x86_64 \
               java-1.8.0-openjdk-devel.x86_64 \
               libaio.x86_64 \
               libaio-devel.x86_64 \
               lrzsz.x86_64 \
               nmap.x86_64 \
               nmap-ncat.x86_64 \
               procps-ng.x86_64 \
               psmisc.x86_64 \
               python2-pip.noarch \
               telnet.x86_64 \
               tree.x86_64 \
               unzip.x86_64 \
               wget.x86_64 \
               xorg-x11-apps.x86_64 \
               xorg-x11-xauth.x86_64

三、更新大陆地区的 PIP 源

清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
豆瓣网 https://pypi.doubanio.com/simple/
阿里云 https://mirrors.aliyun.com/pypi/simple/

我们使用清华大学提供的 PIP 源为对象,一键式更新虚拟机的 PIP 源:

mkdir -p ~root/.pip
cat > ~root/.pip/pip.conf << EOF
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
EOF
python -m pip install --upgrade pip==20.2.4
python -m pip install --upgrade pip

四、优化终端环境

配置虚拟终端的命令行提示符,其相应工作模式如下:

cat > /etc/profile.d/ps1.sh << EOF
#!/bin/bash
export PS1='\[email protected]\h:\[\033[31m\]\w\[\033[0m\]$ '
EOF
cat >> ~root/.bash_profile << EOF
PS1='\[\033[31;1m\][PROD]\[\033[0m\][\[email protected]\h \[\033[31m\]\w\[\033[0m\]]# '
EOF

五、内核与服务调优

内核调优:

  • 解除文件句柄的阈值限制
  • 解除网络句柄的阈值限制
cat >> /etc/security/limits.conf << EOF
* soft nproc  65535
* hard nproc  65535
* soft nofile 65535
* hard nofile 65535
* soft stack  65535
* hard stack  65535
* soft core   -1
* hard core   -1
* soft rss    -1
* hard rss    -1
EOF
cat >> /etc/sysctl.conf << EOF
fs.file-max = 65535
net.nf_conntrack_max = 65535
EOF
modprobe ip_conntrack
sysctl -p

六、优化用户会话的服务体验

准备 OpenSSH 服务的欢迎文案:

figlet -f script "Hello  Developer" > /etc/motd

可以到 figlet 工具的示例页面查看不同的字体效果,亦可直接执行下述命令:

showfigfonts

关闭 OpenSSH 服务的指纹校验特性:

echo -e "\tStrictHostKeyChecking no" >> /etc/ssh/ssh_config
systemctl restart sshd.service

配置 OpenSSH 服务的 X11 图形化通道:

sed -i -r '/X11Forwarding/s/^(.*X11Forwarding)(.*)$/\1 yes/g' /etc/ssh/sshd_config
sed -i -r '/X11Forwarding/s/^(.*)(X11Forwarding.*)$/\2/g' /etc/ssh/sshd_config
systemctl restart sshd.service

七、构建可靠的用户体系

构建可靠的用户体系的要点如下:

  1. 用户隶属于相同群组,以便进一步构建共享工作目录
  2. 共享目录主要有业务软件部署目录(application),业务日志存储目录(applog),中间件部署目录(middleware
  3. 允许部分用户能够免密借权
# 创建业务进程使用的用户体系
groupadd season
echo -e "spring\nsummer\nautumn\nwinter" | xargs -i useradd -g season {}

# 创建业务进程使用的共享目录
mkdir -p /opt/{application,applog,middleware}
chown -R :season /opt/{application,applog,middleware}
chmod -R 3775 /opt/{application,applog,middleware}

# 取消用户的借权验证
sed -i -r '/%wheel/a\%season  ALL=(ALL)  NOPASSWD: ALL' /etc/sudoers
sed -i -r 's/^(Defaults.*requiretty)$/#\1/g' /etc/sudoers

八、连接可靠的时钟服务

中国科学院国家授时中心 ntp.ntsc.ac.cn
中国科学技术大学 time.ustc.edu.cn
清华大学 ntp.tuna.tsinghua.edu.cn
南京大学 ntp.nju.edu.cn
sed -i -r '/^server/s/^(.+)$/#\1/g' /etc/chrony.conf
cat >> /etc/chrony.conf << EOF
server ntp.ntsc.ac.cn iburst
EOF
timedatectl set-timezone "Asia/Shanghai"
timedatectl set-ntp True
mkdir -p /var/run/chrony
systemctl enable chronyd.service
systemctl restart chronyd.service
chronyc sources -v

Windows Server

environment version

一、人工安装必要的软件包

WinRAR 圣彼得堡开源工程师 Eugene Roshal 维护的文件存档管理工具
Notepad++ 巴黎开源工程师 Don HO 维护的文本编辑器
Chrome 离线安装版本
OpenJDK 1.8 需要注册红帽开发者账号才允许下载
Oracle Client 需要注册甲骨文开发者账号才允许下载
PL/SQL 软件安装包需要与 Oracle Client 软件安装包的位数相互匹配
XShell 家庭与教育版本
Palm Input 手心输入法
Everything 模糊检索工具

注意:为方便管理,建议把上述软件包统一安装在 C:\Program Files 目录

二、调整 Windows 管理工具寄存的快捷方式

调整 Windows 管理工具寄存的快捷方式为:

iSCSI 发起程序 C:\Windows\system32\iscsicpl.exe
Windows Server 备份 C:\Windows\system32\wbadmin.msc
Windows 内存诊断 C:\Windows\system32\MdSched.exe
本地安全策略 C:\Windows\system32\secpol.msc
本地组策略 C:\Windows\System32\gpedit.msc
磁盘清理 C:\Windows\System32\cleanmgr.exe
服务 C:\Windows\System32\services.msc
服务器管理器 C:\Windows\System32\ServerManager.exe
高级安全 Windows Defender 防火墙 C:\Windows\System32\WF.msc
恢复驱动器 C:\Windows\System32\RecoveryDrive.exe
任务计划程序 C:\Windows\System32\taskschd.msc
事件查看器 C:\Windows\System32\eventvwr.msc
碎片整理和优化驱动器 C:\Windows\System32\dfrgui.exe
系统配置 C:\Windows\System32\msconfig.exe
性能监视器 C:\Windows\System32\perfmon.msc
资源监视器 C:\Windows\System32\perfmon.exe
注册表编辑器 C:\Windows\regedit.exe

三、调整操作系统日志保留策略

flowchart LR
    A0 --&gt; B
    subgraph A [Windows 管理工具]
        direction LR
        A0(事件查看器)
    end
    subgraph B [事件查看器]
        direction LR
        B0(Windows 日志) --&gt; B1(应用程序)
        B0(Windows 日志) --&gt; B2(安全)
        B0(Windows 日志) --&gt; B3(系统)
        B1(应用程序) --&gt; B4(属性)
        B2(安全) --&gt; B4(属性)
        B3(系统) --&gt; B4(属性)
    end
classDef default fill:#ffffff,stroke:#000000,stroke-width:1px;

基于属性的编辑窗口,执行:

日志最大大小(KB):51200
达到事件日志最大大小时:日志满时将其存档,不覆盖事件

四、调整用户密码的设置强度

flowchart LR
    A0 --&gt; B
    subgraph A [Windows 管理工具]
        direction LR
        A0(本地组策略)
    end
    subgraph B [本地组策略编辑器]
        direction LR
        B0(计算机配置) --&gt; B1(Windows 设置)
        B1(Windows 设置) --&gt; B2(安全设置)
        B2(安全设置) --&gt; B3(账户策略)
        B3(账户策略) --&gt; B4(密码策略)
        B3(账户策略) --&gt; B5(账户锁定策略)
    end
classDef default fill:#ffffff,stroke:#000000,stroke-width:1px;

基于密码策略的编辑窗口,执行:

密码必须符合复杂性要求:开启
密码长度最小值:11 个字符
密码最短使用期限:7 天
密码最长使用期限:90 天
强制密码历史:6 个记住的密码

基于账户锁定策略的编辑窗口,执行:

账户锁定时间:30 分钟
账户锁定阈值:5 次无效登录
重置账户锁定计数器:30 分钟之后
⚠️ **GitHub.com Fallback** ⚠️