开发组-AI服务器账号隔离

开发组-AI服务器账号隔离

StarmoAI 服务器账号隔离与只读审计配置记录

操作指南DOCX下载原文件
# StarmoAI 服务器账号隔离与只读审计配置记录

目标:给 Codex 和小艺建立独立服务器身份,区分“审计账号”和“部署账号”,避免它们直接使用 root。

本次实际完成:codex-audit 的独立 SSH 登录和生产网站只读权限验证。

一、最终达成的状态

目前已经完成:

  • 创建了审计组 starmo-audit

  • 创建了部署组 starmo-deploy

  • 创建了 4 个独立 Linux 用户

  • codex-audit 可以使用自己的 SSH 私钥登录

  • codex-audit 没有 sudo 管理员权限

  • codex-audit 可以查看网站目录

  • codex-audit 不能修改生产网站目录

  • 发现并修复了生产目录的危险 777 权限

  • root 账号和审计账号的 SSH 密钥彼此独立

当前账号规划:

| 用途 | Codex | 小艺 |

| –– | ––––––– | ————— |

| 只读审计 | codex-audit | xiaoyi-audit |

| 部署操作 | codex-deploy | xiaoyi-deploy |


二、重要概念

1. root

root 是 Linux 服务器的最高管理员。

它几乎可以:

  • 删除任何文件

  • 修改系统配置

  • 创建或删除用户

  • 重启服务

  • 改变权限

因此日常不应该让 AI 或普通程序直接使用 root。


2. sudo

sudo 的意思可以理解为:

临时使用管理员权限执行某一条命令。

例如:


sudo systemctl restart nginx

意思是以管理员权限重启 Nginx。

本次创建的 codex-audit 不应该拥有 sudo 权限。


3. SSH Key

SSH Key 是服务器登录钥匙,通常包含两个文件:


私钥

公钥.pub
  • 私钥只能保存在自己的电脑中

  • 私钥不能发给别人

  • 公钥可以放到服务器

  • 服务器根据公钥验证本地私钥

本次 Codex 审计账号的本地密钥:


C:\Users\你的用户名\.ssh\starmo-codex-audit

C:\Users\你的用户名\.ssh\starmo-codex-audit.pub

其中:


starmo-codex-audit

是私钥,不能泄露。


4. 本地终端和服务器终端的区别

看到下面的提示符,代表命令在 Windows 本地执行:


PS C:\Users\你的用户名>

看到下面的提示符,代表命令在服务器普通用户中执行:


codex-audit@服务器名称:~$

看到下面的提示符,代表命令在服务器 root 管理员中执行:


root@服务器名称:~#

虽然键盘是在自己的电脑上操作,但 SSH 登录后,命令实际运行在远程服务器。


三、前置安全处理

在建立独立账号之前,已经完成以下安全处理:

  • 更换曾经暴露过的 root 密码

  • 禁用或更换曾经暴露过的阿里云 AK/SK

  • 删除旧的阿里云 SSH 密钥对

  • 创建新的服务器 SSH 密钥对

  • 确认可以使用新的密钥登录 root

任何曾经公开发送过的以下信息,都应当立即废弃:

  • 密码

  • 私钥

  • .pem 文件内容

  • AccessKey ID

  • AccessKey Secret

  • API Token


四、创建 Linux 用户组

以下命令需要在服务器的 root 终端中执行。

创建审计组:


groupadd starmo-audit

创建部署组:


groupadd starmo-deploy

用户组的作用是统一管理一类账号的权限。


五、创建四个独立用户

在 root 终端中创建账号。

Codex 审计账号


useradd -m -s /bin/bash codex-audit

usermod -aG starmo-audit codex-audit

passwd -l codex-audit

小艺审计账号


useradd -m -s /bin/bash xiaoyi-audit

usermod -aG starmo-audit xiaoyi-audit

passwd -l xiaoyi-audit

Codex 部署账号


useradd -m -s /bin/bash codex-deploy

usermod -aG starmo-deploy codex-deploy

passwd -l codex-deploy

小艺部署账号


useradd -m -s /bin/bash xiaoyi-deploy

usermod -aG starmo-deploy xiaoyi-deploy

passwd -l xiaoyi-deploy

参数含义:


-m

自动创建用户的 home 目录。


-s /bin/bash

使用 Bash 作为登录终端。


passwd -l

锁定密码登录,避免账号通过普通密码进入。


六、创建 SSH 配置目录

为每个用户创建 .ssh 目录。


mkdir -p /home/codex-audit/.ssh

mkdir -p /home/xiaoyi-audit/.ssh

mkdir -p /home/codex-deploy/.ssh

mkdir -p /home/xiaoyi-deploy/.ssh

设置所有者:


chown -R codex-audit:codex-audit /home/codex-audit/.ssh

chown -R xiaoyi-audit:xiaoyi-audit /home/xiaoyi-audit/.ssh

chown -R codex-deploy:codex-deploy /home/codex-deploy/.ssh

chown -R xiaoyi-deploy:xiaoyi-deploy /home/xiaoyi-deploy/.ssh

设置 .ssh 目录权限:


chmod 700 /home/codex-audit/.ssh

chmod 700 /home/xiaoyi-audit/.ssh

chmod 700 /home/codex-deploy/.ssh

chmod 700 /home/xiaoyi-deploy/.ssh

700 表示:

  • 用户本人可以读取、写入和进入目录

  • 其他人没有权限


七、创建 authorized_keys 文件


touch /home/codex-audit/.ssh/authorized_keys

touch /home/xiaoyi-audit/.ssh/authorized_keys

touch /home/codex-deploy/.ssh/authorized_keys

touch /home/xiaoyi-deploy/.ssh/authorized_keys

设置所有者:


chown codex-audit:codex-audit /home/codex-audit/.ssh/authorized_keys

chown xiaoyi-audit:xiaoyi-audit /home/xiaoyi-audit/.ssh/authorized_keys

chown codex-deploy:codex-deploy /home/codex-deploy/.ssh/authorized_keys

chown xiaoyi-deploy:xiaoyi-deploy /home/xiaoyi-deploy/.ssh/authorized_keys

设置文件权限:


chmod 600 /home/codex-audit/.ssh/authorized_keys

chmod 600 /home/xiaoyi-audit/.ssh/authorized_keys

chmod 600 /home/codex-deploy/.ssh/authorized_keys

chmod 600 /home/xiaoyi-deploy/.ssh/authorized_keys

600 表示:

  • 文件所有者可以读取和写入

  • 其他用户没有权限


八、在 Windows 生成 Codex 审计密钥

在 Windows PowerShell 中执行:


ssh-keygen -t ed25519 -f "$env:USERPROFILE\.ssh\starmo-codex-audit" -C "codex-audit"

生成两个文件:


starmo-codex-audit

starmo-codex-audit.pub

查看公钥:


Get-Content "$env:USERPROFILE\.ssh\starmo-codex-audit.pub"

只复制 .pub 文件输出的公钥。

不要复制或发送私钥:


starmo-codex-audit

九、把公钥添加到服务器

在服务器 root 终端中,将公钥写入:


/home/codex-audit/.ssh/authorized_keys

可以使用文本编辑器:


nano /home/codex-audit/.ssh/authorized_keys

粘贴一整行公钥后保存。

再次保证权限正确:


chown codex-audit:codex-audit /home/codex-audit/.ssh/authorized_keys

chmod 600 /home/codex-audit/.ssh/authorized_keys

检查结果:


ls -l /home/codex-audit/.ssh/authorized_keys

期望类似:


-rw------- 1 codex-audit codex-audit ... authorized_keys

十、测试 Codex 审计账号登录

在 Windows PowerShell 中执行:


ssh -i "$env:USERPROFILE\.ssh\starmo-codex-audit" codex-audit@服务器公网IP

注意:


服务器公网IP

必须替换为阿里云服务器的真实公网 IP,不能把这几个中文字原样复制进去。

第一次连接时可能看到:


Are you sure you want to continue connecting (yes/no/[fingerprint])?

输入:


yes

登录成功后,提示符应类似:


codex-audit@服务器名称:~$

十一、验证登录身份

在 codex-audit 终端中执行:


whoami

期望结果:


codex-audit

检查用户组:


id

期望看到:


groups=...,starmo-audit

并且不应该包含:


sudo

admin

十二、验证没有 sudo 权限

执行:


sudo -n true

本次返回:


sudo: a password is required

同时 id 输出中没有 sudo 组。

说明该用户不能直接使用免密码 sudo,也没有加入常规 sudo 管理员组。

需要注意:

没有 sudo 不代表账号自动只读。

账号仍然可以:

  • 修改自己的 home 目录

  • 修改所有对普通用户开放写权限的文件

  • 写入权限配置错误的生产目录

因此还必须继续检查网站目录权限。


十三、测试网站目录读取权限

执行:


ls -la /var/www/starmoai-blog-v1 | head

输出显示:


current -> /var/www/starmoai-blog-v1/releases/某个版本目录

releases

说明 codex-audit 可以查看网站发布目录。

其中:


current

是一个软链接,指向当前在线版本。


十四、测试生产目录是否可写

使用只读检测命令:


test -w "$(readlink -f /var/www/starmoai-blog-v1/current)" \

&& echo "危险:可写" \

|| echo "正常:只读"

第一次测试得到:


危险:可写

说明审计账号居然可以修改线上网站,需要继续调查。

这条命令只检测权限,不会创建、修改或删除文件。


十五、排查目录权限

原计划使用:


getfacl -p "$(readlink -f /var/www/starmoai-blog-v1/current)"

但服务器没有安装 getfacl,因此没有继续安装新软件。

改用系统自带的:


namei -l "$(readlink -f /var/www/starmoai-blog-v1/current)"

输出中发现当前发布目录权限为:


drwxrwxrwx root root 版本目录

其中:


rwxrwxrwx

等同于:


777

这意味着:

  • root 可以读取、写入、进入

  • 所属组可以读取、写入、进入

  • 所有其他用户也可以读取、写入、进入

因此任何普通服务器用户都有可能修改该生产目录。


十六、修复生产目录的 777 权限

此操作必须在服务器 root 终端中执行:


chmod 755 "$(readlink -f /var/www/starmoai-blog-v1/current)"

755 表示:

| 身份 | 权限 |

| –––– | –––– |

| root 所有者 | 读取、写入、进入 |

| 所属组 | 读取、进入 |

| 其他用户 | 读取、进入 |

这样只有 root 能修改目录,普通账号只能读取和进入。


十七、验证修复结果

在 root 终端中执行:


stat -c '%A  %a  %U:%G  %n' \

"$(readlink -f /var/www/starmoai-blog-v1/current)"

得到:


drwxr-xr-x  755  root:root  /var/www/starmoai-blog-v1/releases/版本目录

说明权限已经成功从 777 修改为 755。


十八、使用审计账号重新验证

重新登录 codex-audit:


ssh -i "$env:USERPROFILE\.ssh\starmo-codex-audit" codex-audit@服务器公网IP

验证身份:


whoami

结果:


codex-audit

验证用户组:


id

结果中包含:


starmo-audit

验证网站可读取:


ls -la /var/www/starmoai-blog-v1 | head

能够正常列出目录。

验证生产目录不可写:


test -w "$(readlink -f /var/www/starmoai-blog-v1/current)" \

&& echo "危险:可写" \

|| echo "正常:只读"

最终得到:


正常:只读

至此,codex-audit 基础只读审计账号配置成功。


十九、退出和保存

SSH 命令和权限修改执行成功后,会立即写入服务器,不需要额外点击“保存”。

正常退出服务器:


exit

退出后如果看到:


PS C:\Users\你的用户名>

说明已经回到 Windows 本地。

此时可以直接关闭 PowerShell 窗口。

以下内容不会因为关闭终端而消失:

  • Linux 用户

  • Linux 用户组

  • SSH 公钥

  • authorized_keys

  • 文件权限

  • chmod 755 的修改

  • Windows 本地生成的 SSH 私钥

SSH 断线只相当于远程连接断开,不会撤销已经执行的命令。


二十、本次发现的真实安全问题

生产网站当前版本目录原本是:


777

这意味着服务器上的普通用户可能修改生产网站。

修复后为:


755

现在只有 root 可以修改,普通审计账号只能读取。

这也是为什么必须实际使用低权限账号测试,而不能只看 root 账号下是否正常。


二十一、当前还没有完成的工作

本次只完成了:


codex-audit

其余工作仍待完成:

  • 为 xiaoyi-audit 生成独立 SSH 密钥

  • 为 codex-deploy 生成独立 SSH 密钥

  • 为 xiaoyi-deploy 生成独立 SSH 密钥

  • 设计部署账号可以修改哪些目录

  • 避免给部署账号完整 root 权限

  • 设计受限制的服务重启方式

  • 检查新发布版本是否还会被自动创建成 777

  • 检查部署脚本中的 chmod 777

  • 检查服务器 SSH 密码登录配置

  • 决定是否禁止 root 直接远程登录

  • 收紧阿里云安全组中的 SSH 端口来源

  • 检查旧 Next.js 服务端口

  • 处理响应头中的版本和技术栈暴露

特别重要:

本次手动将当前版本改成了 755,但必须继续检查部署脚本。

如果部署脚本每次发布新版本时仍然执行 chmod 777,下次部署后问题会再次出现。

可以在 root 账号中以后检查:


grep -R "chmod 777\|chmod -R 777" \

/var/www \

/root \

/opt \

/usr/local/bin \

2>/dev/null

这条命令只是搜索,不会修改文件。


二十二、安全规则

永远不要公开发送:


SSH 私钥

.pem 文件内容

服务器密码

阿里云 AccessKey Secret

API Token

数据库密码

.env 文件

可以发送用于排错的内容:


命令报错

whoami 输出

id 输出

文件权限

目录列表

系统版本

公钥指纹

公钥本身通常不是秘密,但排错时一般也不需要完整公开。


二十三、最终验收清单

SSH 登录

  • codex-audit 有独立 SSH 密钥

  • 可以成功登录服务器

  • 不需要使用 root 密钥

  • 不需要输入 Linux 密码

身份隔离

  • whoami 返回 codex-audit

  • 属于 starmo-audit

  • 不属于 sudo

  • 不属于 admin

网站权限

  • 可以读取网站目录

  • 可以进入当前发布目录

  • 不能修改当前发布目录

  • 生产目录权限为 755

  • 生产目录所有者为 root:root

收尾

  • root 操作窗口已经可以安全退出

  • 本地 SSH 窗口已经可以安全退出

  • 所有执行成功的修改已经自动保存


二十四、一句话总结

本次完成的是:

使用独立 SSH 密钥建立 codex-audit 账号,使它可以查看 StarmoAI 生产网站,但不能使用 sudo,也不能修改生产文件;同时发现并修复了生产版本目录的 777 高危权限。

今晚这套不是普通“新手部署教程”,已经涉及 Linux 权限、SSH 身份隔离和生产服务器安全。你是真的把它做成了。🔐😂