在 Linux 操作系统中,“用户” 与 “权限” 是保障系统安全、实现多用户协同的核心机制。不同于 Windows 的图形化权限管理,Linux 采用精细化的命令行控制逻辑,既确保了系统稳定性,也为多场景使用提供了灵活性。本文将从基础概念入手,逐步拆解用户与权限的工作原理,并结合实操案例,帮助读者掌握 Linux 账户管理与权限配置的核心技能。
Linux 用户与权限的核心逻辑
Linux 作为多用户、多任务操作系统,设计初衷是支持多人同时使用一台服务器(如开发团队共享一台测试机)。用户与权限的核心作用可概括为两点:
- 安全隔离:防止普通用户误操作系统文件(如删除
/etc/passwd
),避免系统崩溃;同时隔离不同用户的个人数据(如 A 用户无法默认访问 B 用户的家目录)。 - 权限可控:通过精细化授权,让用户仅能执行 “必要操作”(如开发人员仅能修改项目目录,无法修改系统配置),降低越权风险。
简单来说,Linux 的权限逻辑可总结为:“谁(用户 / 组)能对什么(文件 / 目录)做什么(读 / 写 / 执行)”。
核心概念:3 个基础术语先记牢
在实操前,先明确 3 个必须知道的概念,后续所有操作都围绕它们展开:
1. 用户(User):你在 Linux 中的 “身份证”
每个用户都有一个唯一的 UID(用户 ID),Linux 系统通过 UID 识别用户,而不是用户名(用户名只是给人看的)。
- 超级用户(root):UID=0,拥有系统的 “绝对权力”,能修改任何文件、执行任何命令(相当于 Windows 的 “管理员”);
- 系统用户:UID 1~999,Linux 系统自带的用户(如
bin
、mysql
),用于运行系统服务,一般不允许登录; - 普通用户:UID 1000+,我们手动创建的用户(如
testuser
),权限受限制,只能操作自己的家目录和授权的资源。
小贴士:输入
id 用户名
可以查看某个用户的 UID 和所属组,比如id root
会显示uid=0(root) gid=0(root) ...
。
用户类型 UID 范围 权限说明 典型场景 超级用户(root) UID=0 拥有系统 “绝对权限”,可修改任何文件、执行任何命令(如 rm -rf /
会删除整个系统)系统管理员维护操作 系统用户 UID 1~999 系统自带的 “隐形用户”,用于运行系统服务(如 mysql
用户运行数据库服务),不允许登录系统服务运行依赖 普通用户 UID 1000+ 手动创建的用户,权限受限制,仅能操作自身家目录( /home/用户名
)及授权资源开发、日常办公等普通操作
2. 用户组(Group):方便管理多个用户的 “组织”
把多个用户归为一个 “组”,给组授权后,组内所有用户都能拥有相同权限,避免重复操作。比如把开发团队的 5 个用户加入 developers
组,只需给 developers
组开放项目目录权限,5 个用户就都能访问了。
每个用户有一个 GID(组 ID):
- 主组(Primary Group):用户默认所属的组,创建用户时会自动创建一个同名的主组(如创建
testuser
时,会生成testuser
组,作为其主组); - 附加组(Supplementary Group):用户额外加入的组(如
testuser
可以同时加入developers
组和sudo
组)。
3. 权限(Permission):用户能对文件 / 目录做什么?
Linux 中,每个文件 / 目录都有 3 类权限,分别对应 “所有者(u)”“所属组(g)”“其他用户(o)”,用 ls -l
命令就能看到:
bash
# 执行 ls -l,查看当前目录文件的权限
ls -l
输出示例(重点看第一列和第三、四列):
plaintext
-rwxr-xr-- 2 testuser testuser 4096 10月12 14:00 test.sh
drwxrwxr-x 3 testuser developers 4096 10月12 13:30 project
(1)权限位解析(第一列)
第一列的 10 个字符分为 4 部分,以 -rwxr-xr--
为例:
- 第 1 个字符:文件类型(
-
表示普通文件,d
表示目录,l
表示软链接); - 第 2~4 个字符:所有者(u)的权限(
rwx
表示读、写、执行); - 第 5~7 个字符:所属组(g)的权限(
r-x
表示读、执行,没有写权限); - 第 8~10 个字符:其他用户(o)的权限(
r--
表示只读,没有写和执行权限)。
(2)权限的 “字母” 与 “数字” 对应
为了方便操作,权限可以用字母或数字表示(数字更常用):
权限 | 字母 | 数字 | 含义(文件 / 目录) |
---|---|---|---|
读 | r | 4 | 文件:查看内容;目录:列出目录内文件 |
写 | w | 2 | 文件:修改内容;目录:创建 / 删除文件 |
执行 | x | 1 | 文件:运行脚本 / 程序;目录:进入目录 |
无权限 | – | 0 | 无法操作 |
比如 rwxr-xr--
对应的数字是 754
(7=4+2+1,5=4+1,4=4)。
实操篇:权限配置核心场景
普通用户默认仅能操作自身家目录,若需让用户访问特定资源(如项目目录、执行系统命令),需通过权限配置实现。以下是三个高频场景的完整操作流程。
场景 1:给用户授予管理员权限(sudo
权限)
若需普通用户执行管理员命令(如安装软件 yum install
、重启服务 systemctl restart
),需给用户添加 sudo
权限 —— 核心是将用户加入 “sudo 组”(CentOS 中为 wheel
组,Ubuntu 中为 sudo
组)。
操作步骤:
bash
# 1. CentOS 系统:将 devuser 加入 wheel 组(sudo 权限组)
sudo usermod -aG wheel devuser
# -aG:a=append(追加),G=Group(组),避免覆盖原有组
# Ubuntu 系统:将 devuser 加入 sudo 组
# sudo usermod -aG sudo devuser
# 2. 验证是否加入成功(查看 devuser 所属组是否包含 wheel)
groups devuser
# 输出:devuser : devuser wheel(包含 wheel 组,成功)
# 3. 切换到 devuser,测试 sudo 权限
su - devuser
# 尝试安装 tree 工具(需管理员权限)
sudo yum install -y tree
# 首次执行需输入 devuser 的密码,输入后开始安装(5 分钟内无需重复输密码)
场景 2:让用户访问特定目录(文件权限配置)
假设 root 在 /data
目录下有 project
项目文件夹,需让 devuser
能读写该目录,有两种常用方法:修改 “所有者” 或修改 “权限位”。
方法 1:修改目录所有者(推荐,单用户独占)
若 devuser
需要完全控制 project
目录,将目录的所有者改为 devuser
:
bash
# 1. 递归修改 /data/project 的所有者和所属组为 devuser(-R 表示递归子目录)
sudo chown -R devuser:devuser /data/project
# 2. 验证修改结果(查看目录的所有者和所属组)
ls -ld /data/project
# 输出:drwxr-xr-x 3 devuser devuser 4096 10月15 14:30 /data/project
# 第三列(所有者)和第四列(所属组)均为 devuser
# 3. 测试权限:devuser 可读写目录
su - devuser
cd /data/project
touch new_file.py # 成功创建
echo "print('hello')" > new_file.py # 成功写入
rm new_file.py # 成功删除(权限生效)
方法 2:修改权限位(多用户共享)
若多个用户(如 devuser1
、devuser2
)需要共享 project
目录,可创建共享组 developers
,给组授权:
bash
# 1. 创建共享组 developers
sudo groupadd developers
# 2. 将 devuser1、devuser2 加入 developers 组
sudo usermod -aG developers devuser1
sudo usermod -aG developers devuser2
# 3. 递归修改 /data/project 的所属组为 developers,并给组“读写执行”权限
sudo chgrp -R developers /data/project # 修改所属组
sudo chmod -R g+rwx /data/project # 给组(g)添加 rwx 权限
# 4. 验证权限
ls -ld /data/project
# 输出:drwxrwxr-x 3 root developers 4096 10月15 14:30 /data/project
# 第四列(所属组)为 developers,第五~七列(组权限)为 rwx
# 5. 测试:devuser1 可在目录内创建文件
su - devuser1
cd /data/project
touch shared_file.py # 成功创建
场景 3:限制用户仅执行特定命令(精细化 sudo
授权)
若需让 devuser
仅能通过 sudo
重启 nginx
服务,不能执行其他管理员命令(如 yum install
),需编辑 /etc/sudoers
文件(必须用 visudo
命令,避免语法错误导致 sudo
失效)。
操作步骤:
bash
# 1. 用 root 或 sudo 用户执行 visudo,编辑 sudoers 文件
sudo visudo
# 2. 在文件末尾添加一行(按 i 进入编辑模式)
devuser ALL=(ALL) /usr/bin/systemctl restart nginx
# 格式说明:用户名 允许登录的主机=(以谁的身份执行) 允许执行的命令路径
# 命令路径可通过 which 命令查询:which systemctl → /usr/bin/systemctl
# 3. 保存退出:按 Esc,输入 :wq 回车(visudo 会自动检查语法)
# 4. 测试权限
su - devuser
sudo systemctl restart nginx # 成功执行,重启 nginx
sudo yum install tree # 拒绝执行,输出“用户 devuser 无权执行 /usr/bin/yum”
避坑指南:新手常犯的 4 个错误
- 忘记设置密码:用
useradd
创建用户后,必须执行passwd 用户名
—— 否则用户无密码,无法登录(包括su
切换和 SSH 登录)。解决:执行sudo passwd 用户名
,重新设置密码。 - 修改权限漏加
-R
:给目录授权时,若仅执行chmod g+w /data/project
,仅能修改目录本身权限,子文件 / 子目录权限不变,导致用户无法操作内部文件。解决:加-R
递归修改,如sudo chmod -R g+w /data/project
。 - 直接用 root 日常操作:新手易习惯用 root 用户干活,但 root 权限过大,一旦误操作(如
rm -rf /tmp/*
写成rm -rf / *
)会导致系统崩溃。解决:日常用普通用户,需管理员权限时加sudo
。 - 权限位设置过宽:为图方便给文件设置
777
权限(所有用户可读写执行),导致敏感文件(如数据库配置)被任意修改。解决:遵循 “最小权限原则”,如仅给所有者rwx
、组rx
,设置为750
。
总结:权限管理的核心原则
Linux 用户与权限的操作看似复杂,但核心可归纳为 “明确身份、按需授权”:
- 用户分类:根据角色创建用户(如开发用普通用户,管理用 root),避免权限混用;
- 组管理优先:多用户共享资源时,优先用 “组授权” 替代 “逐个用户授权”,减少重复操作;
- 最小权限:授权时仅给 “必要权限”(如只需读文件,就不给写权限),降低安全风险。