🖥️ 服务器项目权限管理指南 — 从入门到上手

作者: taohuaracing
场景: 需要把权限开给同事,以便内部访问
读完能做什么: 独立完成服务器上的用户创建、目录授权、Web 访问配置、安全加固


📖 目录

  1. 先搞懂几个核心概念
  2. 第一步:创建同事的服务器账号
  3. 第二步:文件权限 — 谁能读/写/执行
  4. 第三步:把项目目录共享给同事
  5. 第四步:Web 访问 — 让同事用浏览器看
  6. 第五步:SSH 密钥登录(更安全的方式)
  7. 第六步:数据库权限
  8. 第七步:防火墙 — 别把门大开着
  9. 一句话速查表
  10. 常见翻车现场 & 排错
  11. 安全 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:端口 看效果
  • (可选)远程连接数据库

最后一句忠告: 权限管理 = 告诉系统"谁能做什么"。原则是 最小权限 — 只给够用的权限,不多给。同事要读,就只给读,先别给写。需要再升级。

权限给少了可以加,给多了再收就难了。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐