掘金 后端 ( ) • 2024-03-23 10:02

在设置新的 CentOS 7 服务器时,系统管理员通常需要执行一系列标准配置步骤。这些步骤可能包括设置主机名、创建用户帐户、配置防火墙规则、安装常用软件包以及创建用户目录等。手动执行这些任务不仅耗时而且容易出错。自动化这个过程可以帮助您节省时间,并减少因操作不当导致的潜在错误。

下面是一个简单的 Bash 脚本示例,它可以自动完成 CentOS 7 服务器的基本初始配置。

#!/bin/bash

# 确保脚本以 root 身份执行
if [ "$(id -u)" -ne 0 ]; then
    echo "该脚本需要以 root 身份运行。"
    exit 1
fi

# 定义变量
NEW_HOSTNAME="node1" # 设置的主机名称
NEW_USERNAME="admin" # 新创建的用户名称
NEW_USER_PASSWORD="Password@123" # 定义用户密码
ALLOWED_IP_RANGE="10.0.0.0/24" # IP白名单

# 1. 设置主机名
echo "1. 设置主机名为 $NEW_HOSTNAME..."
hostnamectl set-hostname "$NEW_HOSTNAME"

# 2. 创建新用户并设置密码
echo "2. 创建新用户 $NEW_USERNAME..."
adduser "$NEW_USERNAME"
echo "$NEW_USER_PASSWORD" | passwd --stdin "$NEW_USERNAME"
usermod -aG wheel "$NEW_USERNAME"
echo "$NEW_USERNAME ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/$NEW_USERNAME
chmod 0440 /etc/sudoers.d/$NEW_USERNAME

# 3. 开放firewall防火墙所有端口,但是只让特定IP范围的访问
echo "3. 配置防火墙,允许 $ALLOWED_IP_RANGE 的IP地址范围访问所有端口..."
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="$ALLOWED_IP_RANGE" accept" && firewall-cmd --reload
echo "防火墙规则已更新。"

# 4. 安装有用的工具
echo "4. 安装一些常用的系统工具..."
yum install -y vim git curl wget unzip lrzsz net-tools

# 5. 配置系统资源限制
echo "5. 配置系统资源限制..."
cat >> /etc/security/limits.conf <<EOL
* soft nofile 65536
* hard nofile 65536
* soft nproc  65536
* hard nproc  65536
EOL
cat >> /etc/security/limits.d/20-nproc.conf <<EOL
* soft nofile 65536
* hard nofile 65536
* soft nproc  65536
* hard nproc  65536
EOL

# 6. 为新用户创建常用目录
echo "6. 为用户 $NEW_USERNAME 创建常用目录..."
USER_HOME=$(eval echo ~$NEW_USERNAME)

# 创建目录列表
declare -a dirs=(
  "$USER_HOME/project"
  "$USER_HOME/software"
  "$USER_HOME/document"
  "$USER_HOME/download"
  "$USER_HOME/tmp"
)

# 创建目录并设置所属权
for dir in "${dirs[@]}"; do
  mkdir -p "$dir"
  chown $NEW_USERNAME:$NEW_USERNAME "$dir"
done

echo "初始化脚本执行完成。即将重启服务器......"

# 7. 重启服务器
sleep 3s
reboot

脚本功能概览

  1. 检查 root 权限:确保脚本以 root 用户身份运行。
  2. 设置主机名:更改服务器的主机名。
  3. 创建新用户:添加一个新用户,并为其配置密码和 sudo 权限。
  4. 配置防火墙:只允许特定 IP 范围的访问。
  5. 安装工具:安装一些必要的系统管理工具。
  6. 配置系统资源限制:提高文件描述符和进程数的限制。
  7. 创建用户目录:为新用户创建一系列常用的工作目录。
  8. 重启服务器:应用所有更改并重启。

脚本逐步解析

权限检查

脚本的第一步是确认当前用户是否具有 root 权限。这是必要的,因为大多数配置更改都需要管理员权限。

if [ "$(id -u)" -ne 0 ]; then
    echo "该脚本需要以 root 身份运行。"
    exit 1
fi

设置主机名

使用 hostnamectl 命令,可以轻松地更改服务器的主机名。

hostnamectl set-hostname "$NEW_HOSTNAME"

创建新用户

脚本创建了一个新的用户帐户,并设置了密码。它还修改了 sudoers 文件以赋予该用户无密码 sudo 访问权限。

adduser "$NEW_USERNAME"
echo "$NEW_USER_PASSWORD" | passwd --stdin "$NEW_USERNAME"
usermod -aG wheel "$NEW_USERNAME"
echo "$NEW_USERNAME ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/$NEW_USERNAME
chmod 0440 /etc/sudoers.d/$NEW_USERNAME

防火墙配置

使用 firewall-cmd,脚本配置了防火墙,以便仅允许来自特定 IP 范围的访问。

firewall-cmd --permanent --zone=public --add-rich-rule="rule family=\"ipv4\" source address=\"$ALLOWED_IP_RANGE\" accept"
firewall-cmd --reload

安装常用工具

接下来,脚本使用 yum 来安装一系列有用的系统管理工具。

yum install -y vim git curl wget unzip lrzsz net-tools

配置系统资源限制

为了避免因资源限制导致的问题,脚本提高了文件描述符和进程数的限制。

cat >> /etc/security/limits.conf <<EOL
...
EOL

创建用户目录

脚本自动为新用户创建了一些常用的工作目录,并设置了适当的权限。

for dir in "${dirs[@]}"; do
  mkdir -p "$dir"
  chown $NEW_USERNAME:$NEW_USERNAME "$dir"
done

重启服务器

所有设置完成后,脚本将等待三秒钟,然后重启服务器,确保所有更改都被正确应用。

sleep 3s
reboot

如何使用脚本

要使用这个脚本,您只需要将其内容保存到 CentOS 7 服务器上的文件中,例如 init_server.sh。然后,通过 SSH 登录到服务器,通过运行以下命令给予脚本执行权限:

chmod +x init_server.sh

然后以 root 用户身份运行脚本:

sudo ./init_server.sh

安全注意事项

  • 脚本中的密码应该通过一个更安全的方式设置,比如使用密钥文件或通过交互式提示输入密码。
  • 打开防火墙的端口时,必须确保只允许必要和受信任的 IP 地址范围。
  • 修改 sudoers 文件时要特别小心,错误的配置可能导致安全风险或阻止合法用户获得必要的权限。

结论

通过使用此 Bash 脚本,系统管理员可以快速自动化 CentOS 7 服务器的初始设置。这不仅提高了配置过程的效率,而且还通过减少人为错误来提高了系统的稳定性和安全性。记住,所有自动化脚本都应该在安全的环境中测试,以确保它们按预期工作,并不会导致系统故障或安全漏洞。