云电脑安全隔离,防止网站源码泄露:云电脑安全隔离实战
把网站部署在云电脑上,
最怕的就是源码被其他用户或入侵者轻易翻出来。防止网站源码泄露的核心思路是:
让运行网站的用户只拥有读取权限,
同时禁止通过 Web 直接下载源码文件,
并把不同站点或用户隔离开。 下面按实际运维场景,
从账号准备到验证,
一步步说明如何配置。
先搞清楚:云电脑上源码会从哪里泄露
云电脑通常是一台共享或独占的 Windows 或 Linux 虚拟机。
源码泄露一般来自三个口子:
- 其他登录用户直接浏览你的网站目录(比如
C:\wwwroot或/www/wwwroot)。 - Web 服务器把
.php、.zip、.bak等敏感文件当成静态文件返回给浏览器。 - 网站程序漏洞导致目录遍历,攻击者能直接下载源码包。
安全隔离的目标就是堵住这三条路。判断标准很简单:非网站运行账号无法读取源码目录,浏览器访问 http://你的域名/源码文件 返回 403 或 404。
准备工作:创建独立运行账号并规划目录
不建议直接用 Administrator 或 root 跑网站,先建一个专用低权限账号。
Linux 下执行:
# 创建用户组和用户,-s /sbin/nologin 表示不给予登录 shell
sudo groupadd webgroup
sudo useradd -g webgroup -s /sbin/nologin wwwuser
Windows 云电脑可以打开“计算机管理” → “本地用户和组” → “用户”,新建一个 wwwuser,只加入 Users 组,不加入 Administrators。
接着把网站目录的所有权交给这个账号。
假设网站目录是 /www/wwwroot/mysite:
sudo chown -R wwwuser:webgroup /www/wwwroot/mysite
目录规划建议: 每个站点单独一个目录,不要所有网站混在同一个文件夹下。
如果云电脑上有多个用户,各自的家目录权限设为 700,避免互相查看。
用权限锁住源码目录
权限设置是隔离的关键,分两步:目录可进入,文件可读但不可写(对 Web 运行账号)。
# 目录权限 750:所有者可读写执行,同组可读执行,其他人无权限
sudo find /www/wwwroot/mysite -type d -exec chmod 750 {} \;
# 文件权限 640:所有者可读写,同组可读,其他人无权限
sudo find /www/wwwroot/mysite -type f -exec chmod 640 {} \;
这样其他系统用户就无法进入或读取源码文件。注意:
不要图省事设成 777,
那等于把源码公开。 Windows 下右键网站文件夹 → 属性 → 安全 → 编辑,
只保留 wwwuser 和 Administrators,
移除 Users 的读取权限。
堵住 Web 服务器直接下载源码的漏洞
即使文件权限正确,如果 Nginx 或 IIS 把 .zip 当成下载文件,源码包还是会被拖走。
以 Nginx 为例,在站点配置的 server 块中加入:
# 禁止访问常见源码和备份文件
location ~* \.(zip|rar|tar\.gz|7z|bak|sql|conf|log)$ {
deny all;
return 403;
}
# 禁止访问 .git 目录
location ~ /\.git {
deny all;
}
改完执行 nginx -t 测试语法,然后 nginx -s reload 重载。
IIS 可以在“请求筛选”中隐藏规则,添加文件扩展名 .zip、.bak 等并设为拒绝。
宝塔面板用户操作路径: 网站 → 设置 → 配置文件,在 server 段内粘贴上面代码,保存后重载 Nginx。
避坑提醒:这些配置容易白做
- 只改了网站根目录权限,但忘了备份目录。很多源码泄露来自
/www/backup或网站下的backup.zip,务必把备份文件放到 Web 根目录之外。 - 云电脑快照或共享文件夹里残留源码。如果开启了共享文件夹,其他虚拟机可能直接访问,建议关闭不必要的共享。
- PHP 的
open_basedir没限制。在 php.ini 中设置open_basedir=/www/wwwroot/mysite:/tmp,防止跨目录读取。 - 忘记检查
.svn、.hg等版本控制目录,和.git一样要禁止访问。
验证隔离是否生效
配置完成后,用下面三个方法确认:
- 用另一个普通账号登录云电脑,尝试
cd /www/wwwroot/mysite,应提示权限不足。 - 浏览器访问
http://你的域名/config.php.bak或http://你的域名/backup.zip,应返回 403 或 404,而不是下载文件。 - 在网站根目录放一个
test.txt,用浏览器访问,如果返回 403,说明静态文件被正确拦截(正常业务文件除外)。
只要这三项验证通过,云电脑安全隔离就基本到位了。 后续如果新增站点,记得重复权限设置和 Nginx 规则。
常见疑问
问:云电脑是 Windows 系统,没有命令行怎么办?
答:可以用 icacls 命令,例如 icacls C:\wwwroot\mysite /inheritance:r /grant wwwuser:(OI)(CI)RX,也可以在图形界面里逐项设置权限。
问:网站程序需要写入缓存,权限 640 会不会导致报错?
答:需要写入的目录(如 runtime、cache)单独给 770 权限,但不要把整个站点目录放开。
问:已经泄露了怎么办?
答:立即修改数据库密码、后台密码,检查是否有 webshell,并重新部署源码到干净目录,同时按本文步骤加固。
问:云服务商的安全组需要调整吗?
答:安全组主要控制端口访问,和文件权限隔离是两回事。建议只开放 80、443 和必要的管理端口,不要对公网开放 22 或 3389,除非限制来源 IP。
如果你正在配置云电脑安全隔离,建议按上面的顺序先建账号、再设权限、最后改 Web 规则,每一步都验证结果,避免遗漏。