在设置新的 CentOS 7 服务器时,系统管理员通常需要执行一系列标准配置步骤。这些步骤可能包括设置主机名、创建用户帐户、配置防火墙规则、安装常用软件包以及创建用户目录等。手动执行这些任务不仅耗时而且容易出错。自动化这个过程可以帮助您节省时间,并减少因操作不当导致的潜在错误。
下面是一个简单的 Bash 脚本示例,它可以自动完成 CentOS 7 服务器的基本初始配置。
shell
#!/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
脚本功能概览
- 检查 root 权限:确保脚本以 root 用户身份运行。
- 设置主机名:更改服务器的主机名。
- 创建新用户:添加一个新用户,并为其配置密码和 sudo 权限。
- 配置防火墙:只允许特定 IP 范围的访问。
- 安装工具:安装一些必要的系统管理工具。
- 配置系统资源限制:提高文件描述符和进程数的限制。
- 创建用户目录:为新用户创建一系列常用的工作目录。
- 重启服务器:应用所有更改并重启。
脚本逐步解析
权限检查
脚本的第一步是确认当前用户是否具有 root 权限。这是必要的,因为大多数配置更改都需要管理员权限。
shell
if [ "$(id -u)" -ne 0 ]; then
echo "该脚本需要以 root 身份运行。"
exit 1
fi
设置主机名
使用 hostnamectl
命令,可以轻松地更改服务器的主机名。
shell
hostnamectl set-hostname "$NEW_HOSTNAME"
创建新用户
脚本创建了一个新的用户帐户,并设置了密码。它还修改了 sudoers 文件以赋予该用户无密码 sudo 访问权限。
shell
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 范围的访问。
shell
firewall-cmd --permanent --zone=public --add-rich-rule="rule family=\"ipv4\" source address=\"$ALLOWED_IP_RANGE\" accept"
firewall-cmd --reload
安装常用工具
接下来,脚本使用 yum
来安装一系列有用的系统管理工具。
shell
yum install -y vim git curl wget unzip lrzsz net-tools
配置系统资源限制
为了避免因资源限制导致的问题,脚本提高了文件描述符和进程数的限制。
shell
cat >> /etc/security/limits.conf <<EOL
...
EOL
创建用户目录
脚本自动为新用户创建了一些常用的工作目录,并设置了适当的权限。
shell
for dir in "${dirs[@]}"; do
mkdir -p "$dir"
chown $NEW_USERNAME:$NEW_USERNAME "$dir"
done
重启服务器
所有设置完成后,脚本将等待三秒钟,然后重启服务器,确保所有更改都被正确应用。
shell
sleep 3s
reboot
如何使用脚本
要使用这个脚本,您只需要将其内容保存到 CentOS 7 服务器上的文件中,例如 init_server.sh
。然后,通过 SSH 登录到服务器,通过运行以下命令给予脚本执行权限:
shell
chmod +x init_server.sh
然后以 root 用户身份运行脚本:
shell
sudo ./init_server.sh
安全注意事项
- 脚本中的密码应该通过一个更安全的方式设置,比如使用密钥文件或通过交互式提示输入密码。
- 打开防火墙的端口时,必须确保只允许必要和受信任的 IP 地址范围。
- 修改
sudoers
文件时要特别小心,错误的配置可能导致安全风险或阻止合法用户获得必要的权限。
结论
通过使用此 Bash 脚本,系统管理员可以快速自动化 CentOS 7 服务器的初始设置。这不仅提高了配置过程的效率,而且还通过减少人为错误来提高了系统的稳定性和安全性。记住,所有自动化脚本都应该在安全的环境中测试,以确保它们按预期工作,并不会导致系统故障或安全漏洞。