在 Linux 操作系统中,“用户” 与 “权限” 是保障系统安全、实现多用户协同的核心机制。不同于 Windows 的图形化权限管理,Linux 采用精细化的命令行控制逻辑,既确保了系统稳定性,也为多场景使用提供了灵活性。本文将从基础概念入手,逐步拆解用户与权限的工作原理,并结合实操案例,帮助读者掌握 Linux 账户管理与权限配置的核心技能。

Linux 用户与权限的核心逻辑

Linux 作为多用户、多任务操作系统,设计初衷是支持多人同时使用一台服务器(如开发团队共享一台测试机)。用户与权限的核心作用可概括为两点:

  1. 安全隔离:防止普通用户误操作系统文件(如删除 /etc/passwd),避免系统崩溃;同时隔离不同用户的个人数据(如 A 用户无法默认访问 B 用户的家目录)。
  2. 权限可控:通过精细化授权,让用户仅能执行 “必要操作”(如开发人员仅能修改项目目录,无法修改系统配置),降低越权风险。

简单来说,Linux 的权限逻辑可总结为:“谁(用户 / 组)能对什么(文件 / 目录)做什么(读 / 写 / 执行)”

核心概念:3 个基础术语先记牢

在实操前,先明确 3 个必须知道的概念,后续所有操作都围绕它们展开:

1. 用户(User):你在 Linux 中的 “身份证”

每个用户都有一个唯一的 UID(用户 ID),Linux 系统通过 UID 识别用户,而不是用户名(用户名只是给人看的)。

  • 超级用户(root):UID=0,拥有系统的 “绝对权力”,能修改任何文件、执行任何命令(相当于 Windows 的 “管理员”);
  • 系统用户:UID 1~999,Linux 系统自带的用户(如 binmysql),用于运行系统服务,一般不允许登录;
  • 普通用户: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)权限的 “字母” 与 “数字” 对应

为了方便操作,权限可以用字母或数字表示(数字更常用):

权限字母数字含义(文件 / 目录)
r4文件:查看内容;目录:列出目录内文件
w2文件:修改内容;目录:创建 / 删除文件
执行x1文件:运行脚本 / 程序;目录:进入目录
无权限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:修改权限位(多用户共享)

若多个用户(如 devuser1devuser2)需要共享 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 个错误

  1. 忘记设置密码:用 useradd 创建用户后,必须执行 passwd 用户名—— 否则用户无密码,无法登录(包括 su 切换和 SSH 登录)。解决:执行 sudo passwd 用户名,重新设置密码。
  2. 修改权限漏加 -R:给目录授权时,若仅执行 chmod g+w /data/project,仅能修改目录本身权限,子文件 / 子目录权限不变,导致用户无法操作内部文件。解决:加 -R 递归修改,如 sudo chmod -R g+w /data/project
  3. 直接用 root 日常操作:新手易习惯用 root 用户干活,但 root 权限过大,一旦误操作(如 rm -rf /tmp/* 写成 rm -rf / *)会导致系统崩溃。解决:日常用普通用户,需管理员权限时加 sudo
  4. 权限位设置过宽:为图方便给文件设置 777 权限(所有用户可读写执行),导致敏感文件(如数据库配置)被任意修改。解决:遵循 “最小权限原则”,如仅给所有者 rwx、组 rx,设置为 750

总结:权限管理的核心原则

Linux 用户与权限的操作看似复杂,但核心可归纳为 “明确身份、按需授权”:

  1. 用户分类:根据角色创建用户(如开发用普通用户,管理用 root),避免权限混用;
  2. 组管理优先:多用户共享资源时,优先用 “组授权” 替代 “逐个用户授权”,减少重复操作;
  3. 最小权限:授权时仅给 “必要权限”(如只需读文件,就不给写权限),降低安全风险。