第 3 章 · 用户、权限与 sudo
本章目标:理解 Linux 多用户模型与 rwx 权限位;熟练使用 chmod/chown;配置 sudo 安全提权;排查 Permission denied;为 api-go-demo 服务账号与配置目录权限打基础。
学时建议:4 小时(含 2 小时跟练)
前置:完成 linux-shell ch02;能在终端创建文件与目录。
3.1 场景说明:部署脚本为何无法写入 /opt
团队在 ~/dev-workspace/shop-demo 编写 scripts/deploy.sh,目标安装到 /opt/api-go-demo/bin/api。普通用户无权写 /opt,报错 Permission denied。生产环境 api-go-demo 由专用用户 api 运行:二进制 root 安装、进程非 root——本章学会读权限、改权限、何时 sudo。
开发者 alice ──► 家目录 ~/dev-workspace (rwx)
│
▼ sudo 仅安装阶段
/opt/api-go-demo/bin/api (root:root 755)
│
▼ 运行
进程用户 api (读 bin、写 logs)
3.2 用户、组与 id
Linux 每个进程以某个 UID 运行;文件有 属主 与 属组。
whoami
id
id alice
grep '^alice:' /etc/passwd
groups
| /etc/passwd 字段 | 示例 | 含义 |
|---|---|---|
| 用户名 | alice | 登录名 |
| UID | 1000 | 0=root |
| GID | 1000 | 主组 |
| 家目录 | /home/alice | ~ |
| Shell | /bin/bash | 默认解释器 |
系统用户:www-data、nobody、服务账号 UID 通常 <1000,无登录 Shell。
3.3 ls -l 与 rwx 解读
cd ~/dev-workspace/shop-demo
mkdir -p configs scripts
touch configs/app.env
echo '#!/bin/bash' > scripts/deploy.sh
chmod 644 configs/app.env
chmod 755 scripts/deploy.sh
ls -l configs/app.env scripts/deploy.sh
ls -ld configs scripts
示例:-rw-r--r-- 1 alice alice ... app.env
| 位段 | 含义 |
|---|---|
| 第1字符 | - 文件,d 目录,l 符号链接 |
| 2-4 | 属主 u:rwx |
| 5-7 | 属组 g |
| 8-10 | 其他 o |
数字 chmod:
| 数字 | 二进制 | 权限 |
|---|---|---|
| 7 | 111 | rwx |
| 6 | 110 | rw- |
| 5 | 101 | r-x |
| 4 | 100 | r-- |
chmod 600 configs/app.env # 仅属主读写
chmod 750 scripts/deploy.sh # 属主全、组读执行
3.4 目录权限:x 表示「可进入」
对目录,x 表示能否 cd 进入、能否访问其下 inode(还需文件自身权限)。
mkdir -p private
chmod 700 private
echo 'DB_PASS=teaching-only' > private/.env
ls -ld private
# 其他用户 ls private 应失败
禁止 chmod 777 生产目录;ops-deploy 安全基线要求最小权限。
3.5 chown 与部署属主
sudo chown root:root scripts/deploy.sh
sudo chown root:api configs/app.env # 组 api 可读(需存在 api 组,教学可跳过)
ls -l scripts/deploy.sh
| 路径 | 建议属主 | 权限 | 说明 |
|---|---|---|---|
/opt/.../bin/api | root:root | 755 | 防篡改 |
configs/*.yaml | root:api | 640 | 含 DSN |
logs/ | api:api | 755 | 进程写日志 |
对照 gin-web ch14 Docker:容器内 non-root 用户对挂载卷需 w 权限。