服务器项目权限管理指南(IT指南)
🖥️ 服务器项目权限管理指南 — 从入门到上手
作者: taohuaracing
场景: 需要把权限开给同事,以便内部访问
读完能做什么: 独立完成服务器上的用户创建、目录授权、Web 访问配置、安全加固
📖 目录
- 先搞懂几个核心概念
- 第一步:创建同事的服务器账号
- 第二步:文件权限 — 谁能读/写/执行
- 第三步:把项目目录共享给同事
- 第四步:Web 访问 — 让同事用浏览器看
- 第五步:SSH 密钥登录(更安全的方式)
- 第六步:数据库权限
- 第七步:防火墙 — 别把门大开着
- 一句话速查表
- 常见翻车现场 & 排错
- 安全 checklist
1. 先搞懂几个核心概念
1.1 服务器是什么?
一台 24 小时开机的电脑,没有屏幕,你在家/公司用 SSH 远程连上去操作。
你的电脑 ---SSH--> 服务器(Linux) ---> 运行你的项目
1.2 "开权限"到底在做什么?
本质上就三件事:
| 序号 | 做什么 | 为什么 |
|---|---|---|
| ① | 创建账号 | 让同事能登录服务器 |
| ② | 给文件权限 | 让同事能看到/修改你的项目文件 |
| ③ | 开端口/配 Web | 让同事用浏览器访问你的网页服务 |
1.3 三个你必须记住的 Linux 概念
用户(User) → 每个人一个账号,比如 root, alice, bob
用户组(Group) → 把用户放进组里,方便批量授权
其他人(Others)→ 既不是文件主人也不在组里的人
权限三兄弟:
r = 读(4) w = 写(2) x = 执行(1)
为什么 r=4, w=2, x=1? 因为用加法表示权限:7=rwx, 5=r-x, 6=rw-。记不住?直接记 421 法则。
2. 第一步:创建同事的服务器账号
2.1 先登录服务器
ssh root@你的服务器IP
# 或者
ssh 你的用户名@你的服务器IP
2.2 创建新用户
# 最简单的方式
sudo useradd -m zhangsan
# 解释一下
sudo # 用管理员权限执行
useradd # 创建用户命令
-m # 同时创建 home 目录 /home/zhangsan
zhangsan # 同事的用户名(建议用拼音全名)
2.3 设置密码
sudo passwd zhangsan
# 输入两次密码(输入时屏幕不会显示,正常现象)
✅ 到此,同事可以用 ssh zhangsan@你的服务器IP 登录了。
2.4 验证是否创建成功
# 查看所有用户
cat /etc/passwd | grep zhangsan
# 切换到该用户测试
su - zhangsan
whoami # 应该显示 zhangsan
exit # 切回你的账号
3. 第二步:文件权限 — 谁能读/写/执行
3.1 查看文件权限
ls -l 你的项目目录
输出示例:
drwxr-xr-x 5 root root 4096 Jun 14 10:00 myproject
拆解一下:
d rwx r-x r-x
│ └┬┘ └┬┘ └┬┘
│ │ │ └── 其他人权限(r-x = 可读可执行)
│ │ └─────── 同组人权限(r-x = 可读可执行)
│ └──────────── 文件主人权限(rwx = 可读写执行)
└──────────────── 类型(d=目录,-=文件)
3.2 常用的权限设置
# 755 — 最常用,自己可改,别人只能看
chmod 755 myproject
# 750 — 更安全,同组人能看,外人不让
chmod 750 myproject
# 700 — 只有自己能看(纯私密)
chmod 700 myproject
# 644 — 文件专用,自己可改,别人只能读
chmod 644 myfile.txt
3.3 对目录递归设置(重要!)
项目通常有很多子目录和文件,一次性搞定:
chmod 755 /home/myproject # 改目录本身
chmod -R 755 /home/myproject # 改全部子文件
# -R = Recursive(递归)
⚠️ 新手最容易犯的错: 只改了顶层目录,里面文件没改,同事访问时报 Permission denied。
4. 第三步:把项目目录共享给同事
4.1 方案 A:创建共享用户组(推荐)
假设你的项目在 /var/www/myapp,你和 zhangsan 都需要访问。
# 1. 创建用户组
sudo groupadd devteam
# 2. 把你自己和同事都加进去
sudo usermod -aG devteam yourname
sudo usermod -aG devteam zhangsan
# 3. 把项目目录的组改成 devteam
sudo chown -R yourname:devteam /var/www/myapp
# 4. 给组设置权限(750,组员可读写执行)
chmod -R 750 /var/www/myapp
这套做完的效果:
| 谁 | 权限 |
|---|---|
| 你(文件主人) | ✅ 完全控制 |
| zhangsan(同组人) | ✅ 可读写 |
| 其他人 | ❌ 没权限 |
4.2 方案 B:直接给同事本人权限(简单粗暴)
# 直接把项目给同事
sudo chown -R zhangsan:zhangsan /var/www/myapp
# ⚠️ 这样你就改不了了,不推荐
# 折中:保持你是主人,但开放权限
chmod -R 777 /var/www/myapp
# ⚠️ 777 = 所有人都能改,这是坏习惯!别在生产环境这么做
4.3 关于 umask(默认权限掩码)
你新建文件时的默认权限由 umask 控制:
umask 022 # 默认文件 644(rw-r--r--),目录 755(rwxr-xr-x)
umask 027 # 更安全,同组人只有读,外人完全不能访问
5. 第四步:Web 访问 — 让同事用浏览器看
5.1 场景区分
| 场景 | 方法 |
|---|---|
| 同事要浏览器访问网页 | 配 Nginx/Apache + 开端口 |
| 同事只是要看看代码 | 上面第 4 步就够了 |
| 同事同时需要两者 | 两件事都做 |
5.2 用 Nginx 配一个 Web 访问
前提: 你的项目是一个 Web 项目(Python Flask / Node.js / PHP 等)。
# 在 /etc/nginx/sites-available/ 下创建文件
sudo vim /etc/nginx/sites-available/myapp
写入配置:
server {
listen 8080; # 用 8080 端口(避免和 80 冲突)
server_name 你的服务器IP;
root /var/www/myapp;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
启用并重启:
# 启用配置
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
# 测试配置是否正确
sudo nginx -t
# 重启 Nginx
sudo systemctl restart nginx
现在同事在浏览器输入 http://服务器IP:8080 就能看到了。
5.3 打开防火墙端口
# 如果用了 ufw
sudo ufw allow 8080
# 如果用了 firewalld(CentOS)
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
# 如果用了云服务器(阿里云/腾讯云/AWS)
# 去云控制台 → 安全组 → 添加入站规则 → 放行 8080 端口
5.4 如果用反向代理 + 域名
server {
listen 80;
server_name dev.你的项目.com;
location / {
proxy_pass http://127.0.0.1:3000; # 转发到项目实际端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
同事访问
http://dev.你的项目.com即可,记得 DNS 解析 + 备案。
6. 第五步:SSH 密钥登录(更安全的方式)
6.1 为什么不用密码?
密码容易被暴力破解。密钥登录更安全,而且不用每次输密码。
6.2 让同事生成密钥对
同事在他自己的电脑上执行:
# Windows (Git Bash / PowerShell) 或 Mac/Linux
ssh-keygen -t ed25519 -C "zhangsan@company"
# 一路回车即可
# 会在 ~/.ssh/ 下生成两个文件:
# id_ed25519 → 私钥(自己留着,谁都不能给)
# id_ed25519.pub → 公钥(给服务器)
6.3 把公钥加到服务器
同事把 id_ed25519.pub 内容发给你(或他自己上传)。
在服务器上:
# 如果同事自己登录了
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "ssh-ed25519 AAAA...zhangsan@company" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# 作为 root 帮你同事设置
sudo mkdir -p /home/zhangsan/.ssh
echo "ssh-ed25519 AAAA...zhangsan@company" | sudo tee -a /home/zhangsan/.ssh/authorized_keys
sudo chmod 700 /home/zhangsan/.ssh
sudo chmod 600 /home/zhangsan/.ssh/authorized_keys
sudo chown -R zhangsan:zhangsan /home/zhangsan/.ssh
6.4 关闭密码登录(安全加固)
sudo vim /etc/ssh/sshd_config
找到并修改:
PasswordAuthentication no # 禁止密码登录
PubkeyAuthentication yes # 允许密钥登录
PermitRootLogin no # 禁止 root 直接登录
重启 SSH 服务:
sudo systemctl restart sshd
⚠️ 先留着另一个 SSH 窗口不要关! 万一配错了你还能从另一个窗口修复。配错了把自己锁在外面就悲剧了。
7. 第六步:数据库权限
如果项目用了 MySQL/PostgreSQL,需要给同事数据库访问权限。
7.1 MySQL 创建用户并授权
-- 登录 MySQL
mysql -u root -p
-- 创建用户
CREATE USER 'zhangsan'@'localhost' IDENTIFIED BY '你的密码';
-- 授权某个数据库
GRANT ALL PRIVILEGES ON myapp_db.* TO 'zhangsan'@'localhost';
-- 如果同事要从远程连接(比如用 Navicat)
CREATE USER 'zhangsan'@'%' IDENTIFIED BY '你的密码';
GRANT ALL PRIVILEGES ON myapp_db.* TO 'zhangsan'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
-- 查看授权情况
SHOW GRANTS FOR 'zhangsan'@'localhost';
7.2 PostgreSQL
-- 登录
psql -U postgres
-- 创建用户
CREATE USER zhangsan WITH PASSWORD '你的密码';
-- 授权数据库
GRANT ALL PRIVILEGES ON DATABASE myapp_db TO zhangsan;
-- 授权表(PostgreSQL 需要额外授权 schema)
GRANT ALL ON SCHEMA public TO zhangsan;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO zhangsan;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO zhangsan;
7.3 数据库连接串
把连接信息给同事,方便他配置本地开发环境:
数据库类型: MySQL
主机: 服务器IP
端口: 3306
数据库: myapp_db
用户名: zhangsan
密码: (刚才设置的密码)
8. 第七步:防火墙 — 别把门大开着
8.1 查看当前防火墙状态
# ufw (Ubuntu/Debian)
sudo ufw status
# firewalld (CentOS/RHEL)
sudo firewall-cmd --list-all
# iptables (通用)
sudo iptables -L -n
8.2 基本的防火墙规则
# ufw 示例
sudo ufw default deny incoming # 默认拒绝所有入站
sudo ufw default allow outgoing # 默认允许所有出站
sudo ufw allow ssh # 开放 SSH(22 端口)
sudo ufw allow 80/tcp # 开放 HTTP
sudo ufw allow 443/tcp # 开放 HTTPS
sudo ufw allow 8080/tcp # 开放你的项目端口
sudo ufw enable # 启用防火墙
8.3 只允许特定 IP 访问
# 只让公司 IP 访问
sudo ufw allow from 114.114.114.0/24 to any port 8080
# 只让同事家 IP 访问
sudo ufw allow from 1.2.3.4 to any port 22
8.4 云服务器安全组(重要!)
如果你用云服务器,先配安全组,再配系统防火墙。
云控制台 → 安全组 → 入方向:
协议 端口 来源 说明
TCP 22 公司IP/你IP SSH 登录
TCP 80 0.0.0.0/0 HTTP(如果有域名)
TCP 443 0.0.0.0/0 HTTPS
TCP 8080 公司IP段 项目访问(限制来源!)
原则: 能限 IP 就限 IP,不要对全世界开放开发环境。
9. 一句话速查表
| 你要做什么 | 命令(一句话) |
|---|---|
| 创建用户 | sudo useradd -m zhangsan && sudo passwd zhangsan |
| 创建组 | sudo groupadd devteam |
| 把用户加进组 | sudo usermod -aG devteam zhangsan |
| 改文件主人 | sudo chown -R yourname:devteam /path/to/project |
| 给目录 755 权限 | chmod -R 755 /path/to/project |
| 查看谁在什么组 | groups zhangsan |
| 查看文件权限 | ls -l /path |
| 配 Nginx 站点 | vim /etc/nginx/sites-available/myapp |
| 重启 Nginx | sudo systemctl restart nginx |
| 看看 Nginx 有没有报错 | sudo nginx -t |
| 开防火墙端口 | sudo ufw allow 8080 |
| 加 SSH 密钥 | echo "公钥内容" >> ~/.ssh/authorized_keys |
| 重启 SSH | sudo systemctl restart sshd |
10. 常见翻车现场 & 排错
❌ “Permission denied”
原因:文件权限没给对
解决:
ls -l 查看权限
检查目录及其所有父目录的权限
确认用户是否在正确的组里(groups 用户名)
❌ “Connection refused”
原因:端口没开 或 服务没启动
解决:
sudo systemctl status nginx # 检查服务
sudo ufw status # 检查防火墙
ss -tlnp | grep 8080 # 检查端口监听
云服务器 → 检查安全组
❌ “403 Forbidden” (Nginx)
原因:Nginx 用户(www-data)没有读项目目录的权限
解决:
确保目录对 others 或 group 有 r-x 权限
或者把 www-data 加入 devteam 组:
sudo usermod -aG devteam www-data
❌ 改了 SSH 配置后自己连不上了
原因:sshd_config 改错了
预防:修改前备份
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
修复:如果还有另一个 SSH 窗口,赶紧改回去
如果彻底断了:去云控制台用 VNC 救回来
❌ 给同事开了 777,但总觉得不对劲
你的直觉是对的。
777 = 任何人都能写,意味着:
- 同事可以删除你的文件
- 如果有漏洞,黑客可以写入恶意代码
- 这是"懒人做法",不是"正确做法"
正确做法:用用户组(Group)来精细控制
11. 安全 Checklist
完成权限开通后,对照检查一遍:
- ✅ 同事能用 SSH 登录(密钥方式)
- ✅ 同事能看到项目文件(有 r 权限)
- ✅ 同事能编辑项目文件(有 w 权限,如果需要)
- ✅ 项目目录不是 777
- ✅ 防火墙只开了必要端口
- ✅ 不必要的端口已关闭(如 3306/5432 不要对公网开放)
- ✅ SSH 已关闭密码登录(生产环境建议)
- ✅ root 禁止直接 SSH 登录
- ✅ 日志正常,没有反复的认证失败记录 (
journalctl -u sshd) - ✅ 云服务器安全组已限制来源 IP
🎯 总结:你的"项目开权限"七步流程
1️⃣ 创建同事系统账号 sudo useradd -m zhangsan
2️⃣ 加入共享用户组 sudo usermod -aG devteam zhangsan
3️⃣ 项目目录授权 sudo chown -R you:devteam /path ; chmod -R 750 /path
4️⃣ 配 Web 服务(如果需要) Nginx 加站点配置
5️⃣ 加 SSH 密钥 authorized_keys
6️⃣ 配数据库(如果需要) MySQL GRANT
7️⃣ 开防火墙/安全组端口 ufw / 云安全组
完成这七步,你的同事就可以:
ssh zhangsan@服务器IP登录- 看/改项目代码
- 浏览器访问
http://服务器IP:端口看效果 - (可选)远程连接数据库
最后一句忠告: 权限管理 = 告诉系统"谁能做什么"。原则是 最小权限 — 只给够用的权限,不多给。同事要读,就只给读,先别给写。需要再升级。
权限给少了可以加,给多了再收就难了。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)