菜单

Loen
发布于 2025-10-22 / 3 阅读
0
0

二级等保--专业的中间件安装方式

这是一个非常好的问题,也是部署流程中的关键细节。正确的顺序是:

先使用 root 安装软件,再创建专属用户进行配置和运行。


详细流程说明

让我用一个更直观的流程图来说明整个部署过程:

flowchart TD
    A[开始部署] --> B[使用 root 安装软件]
    B --> C[创建专属用户和组]
    C --> D[创建目录并设置权限]
    D --> E[配置文件调整]
    E --> F[创建 systemd 服务]
    F --> G[使用专属用户启动服务]
    G --> H[验证和测试]

为什么要这个顺序?

  1. 安装阶段需要 root 权限

    • 安装软件通常需要向系统目录写入文件(如 /usr/local
    • 需要设置全局的符号链接
    • 需要安装系统级的依赖包
  2. 运行阶段需要降权

    • 日常运行时,服务不应该拥有 root 权限
    • 遵循"最小权限原则"

具体操作步骤

阶段一:使用 root 安装(部署基础)

# 1. 安装 JDK
yum install java-11-openjdk-devel   # CentOS/RHEL
# 或
apt install openjdk-11-jdk          # Ubuntu/Debian

# 2. 安装 MySQL
# 方式1: 使用包管理器
yum install mysql-server
# 方式2: 下载官方二进制包解压(此时还是用root)
tar -xzf mysql-8.0.xx.tar.gz -C /usr/local/
cd /usr/local && ln -s mysql-8.0.xx mysql

# 3. 安装 Redis
yum install redis
# 或从源码编译
tar -xzf redis-7.0.x.tar.gz
cd redis-7.0.x && make && make install

# 4. 安装 Nginx
yum install nginx
# 或从源码编译
tar -xzf nginx-1.20.x.tar.gz
cd nginx-1.20.x && ./configure --prefix=/usr/local/nginx && make && make install

阶段二:创建专属用户和目录(安全加固)

现在创建我们之前讨论的专属用户和目录:

# 创建用户组和用户
groupadd -r mysql-group
useradd -r -g mysql-group -s /bin/false -d /usr/local/mysql mysql-user

groupadd -r redis-group  
useradd -r -g redis-group -s /bin/false -d /var/lib/redis redis-user

groupadd -r nginx-group
useradd -r -g nginx-group -s /bin/false -d /usr/local/nginx nginx-user

groupadd -r app-group
useradd -r -g app-group -s /bin/false -d /opt/your-java-app app-user

# 创建数据/日志目录并授权
mkdir -p /usr/local/mysql/{data,logs,conf}
chown -R mysql-user:mysql-group /usr/local/mysql
chmod -R 750 /usr/local/mysql

mkdir -p /var/lib/redis /usr/local/redis/{logs,conf}
chown -R redis-user:redis-group /var/lib/redis /usr/local/redis

mkdir -p /usr/local/nginx/{logs,conf,html,cache}
chown -R nginx-user:nginx-group /usr/local/nginx

阶段三:配置和启动(以最小权限运行)

现在使用 root 来配置,但指定服务以专属用户运行:

以 MySQL 为例:

# 使用root初始化数据目录,但指定运行用户
mysqld --initialize --user=mysql-user --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

# 修改配置文件指定用户
echo "[mysqld]
user=mysql-user
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock" > /usr/local/mysql/conf/my.cnf

# 创建systemd服务(root操作)
cat > /etc/systemd/system/mysqld.service << EOF
[Unit]
Description=MySQL Server
[Service]
User=mysql-user
Group=mysql-group
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/conf/my.cnf
[Install]
WantedBy=multi-user.target
EOF

# 启动服务(实际运行时以mysql-user身份)
systemctl daemon-reload
systemctl start mysqld

阶段四:部署 Java 应用

# 1. 使用root创建应用目录
mkdir -p /opt/your-java-app/{logs,config,lib}

# 2. 上传你的jar包(root操作)
cp your-app.jar /opt/your-java-app/

# 3. 修改所有者(关键步骤!)
chown -R app-user:app-group /opt/your-java-app

# 4. 创建systemd服务
cat > /etc/systemd/system/your-app.service << EOF
[Unit]
Description=Your Java Application
[Service]
User=app-user
Group=app-group
WorkingDirectory=/opt/your-java-app
ExecStart=/usr/bin/java -jar /opt/your-java-app/your-app.jar
[Install]
WantedBy=multi-user.target
EOF

# 5. 启动服务(以app-user身份运行)
systemctl daemon-reload
systemctl start your-app

关键检查点

完成部署后,验证服务是否以正确用户运行:

# 检查进程运行用户
ps aux | grep mysql    # 应该显示 mysql-user
ps aux | grep redis    # 应该显示 redis-user  
ps aux | grep nginx    # worker进程应该显示 nginx-user
ps aux | grep java     # 应该显示 app-user

# 检查文件和目录权限
ls -ld /usr/local/mysql/data/
ls -ld /var/lib/redis/
ls -ld /opt/your-java-app/
# 这些都应该是对应的专属用户,而不是root

总结

记住这个原则:

  • 安装阶段:root 权限(因为需要系统级操作)
  • 运行阶段:专属用户权限(为了安全合规)

这样的部署流程既满足了软件安装的技术要求,又符合二级等保的安全规范,是专业的做法。


评论