缘博客
发布日期

Linux用户和权限(一):超级用户与账号管理

作者
  • 姓名
    社交账号

本篇学习范围

Linux 是多用户操作系统。不同账户拥有不同的目录、身份和权限,系统不会默认允许每个用户修改所有文件。

本篇按“获得合适权限,再管理账号”的顺序,完整覆盖:

  1. root 和普通用户的区别。
  2. suexitsudo 的使用边界。
  3. 如何为普通用户配置 sudo
  4. 用户组与用户的创建、删除、查询和调整。
  5. getent 输出中每一列信息的含义。

下一篇会解释文件权限字符串、chmod 的字符与数字写法,以及 chown 修改所属用户和用户组。


多用户模式与 root

Windows、macOS 和 Linux 都采用多用户管理模式。每个账户只应该拥有完成自身任务所需的权限,这样一个普通操作失误不会轻易破坏整个系统。

Linux 中权限最高的账户名是:

root

它常被称为超级管理员。root 能够修改系统配置、创建系统目录、管理其他用户、改变文件所有权等。普通用户的权限通常只在自己的 HOME 目录中较为完整:

/home/用户名

以普通用户 alice 为例:

/home/alice

普通用户通常可以在这里创建、修改、删除自己的文件,但在 /etc/usr、根目录 / 等系统位置往往只能读取或执行,不能随意写入。

这种限制不是障碍,而是保护机制。日常工作应保持普通用户身份,需要管理员权限时再临时提升。


su:切换用户身份

su 来自 Switch User,用于切换当前 Shell 的用户身份。课件中的基础语法是:

su [-] [用户名]

其中:

部分含义
用户名要切换到的目标用户;省略时默认切换到 root
-切换后按目标用户的登录环境加载环境变量,通常建议带上

常见写法:

# 切换到 root,并加载 root 的登录环境
su -

# 等价地显式指定 root
su - root

# 切换到普通用户 alice
su - alice

普通用户切换到其他用户时,需要输入目标用户的密码。例如 alice 执行 su - root,需要输入 root 的密码。

root 切换到其他用户时通常不需要目标用户密码,但这不是鼓励长期停留在 root 身份下的理由。

- 为什么建议带上

su root 只切换有效用户,可能保留原用户的部分环境;su - root 更接近一次完整的 root 登录,会加载目标用户的 HOME、PATH 等登录环境。学习和管理系统时,通常使用:

su -

可以通过下面两条命令观察身份和 HOME 是否变化:

whoami
echo $HOME

返回上一个用户

切换用户后,使用 exit 返回上一层 Shell:

exit

也可按快捷键:

Ctrl + D

例如:

alice
  └─ su - root
       └─ exit
            └─ 回到 alice

每次临时完成 root 操作后及时 exit,可以降低误操作风险。


sudo:只为一条命令临时提权

长期使用 root 很危险。更推荐的方式是以普通用户登录,在确实需要管理员权限时只为单条命令加 sudo

sudo 其他命令

例如:

sudo mkdir /test
sudo ls /root
sudo systemctl restart sshd

sudo 不会把当前终端永久切成 root。命令执行结束后,仍然是原来的普通用户,这符合“最小权限”原则。

并非所有用户都能使用 sudo

能否执行 sudo 由系统的 sudoers 配置决定。没有授权的用户执行时会被拒绝,因此不要看到某条命令报“not in the sudoers file”就尝试反复输入密码。

配置 sudoers

这一步必须在 root 身份下完成。使用 visudo 编辑 /etc/sudoers

visudo

visudo 会在保存前检查语法,优于直接用普通编辑器修改 /etc/sudoers。在文件末尾添加一行,例如授予 itheima 用户完整 sudo 权限且不要求密码:

itheima ALL=(ALL) NOPASSWD: ALL

各部分含义:

片段含义
itheima被授权的用户名
ALL=(ALL)可在任意主机上以任意目标用户身份执行授权命令
NOPASSWD: ALL执行任何授权命令时不再要求输入密码

编辑完成后,在 Vim 的命令模式输入:

:wq

保存并退出。课件中写作 wq,实际需要先输入冒号进入 Vim 底线命令模式。

NOPASSWD: ALL 对学习环境很方便,但在生产环境权限过大。实际系统应只授权必需用户、必需命令,并保留密码验证和审计记录。


用户与用户组的关系

Linux 既可以创建多个用户,也可以创建多个用户组。一个用户能够加入多个用户组。

用户 alice
  ├─ 主组:alice
  ├─ 项目组:developers
  └─ 运维组:ops

文件权限会同时根据两个层级判断:

  1. 文件所属用户。
  2. 文件所属用户组。

因此,在后续权限管理中,不必把同样的权限逐一赋给每个用户。可以先建立用户组,再把一批用户加入该组,最后让文件或目录归属该组。

本节涉及的用户和用户组管理命令通常都需要 root 权限,或通过 sudo 执行。


用户组管理:groupaddgroupdel

创建用户组:

groupadd 用户组名

例如:

sudo groupadd itcast

删除用户组:

groupdel 用户组名

例如:

sudo groupdel itcast

删除前应该先检查组内成员和相关文件归属。用户组删除不等于自动处理所有仍以该组为归属的文件,也不应该把“删不掉”当作可以强制绕过检查的理由。


用户管理:创建、删除、查看和加入组

useradd:创建用户

课件中的基础语法:

useradd [-g -d] 用户名

常用选项:

选项作用
-g 用户组指定用户的主组;指定的组必须已经存在
-d HOME目录指定用户 HOME 目录

不指定 -g 时,许多发行版会为新用户创建同名主组并自动加入。若已经存在同名组,创建时需要明确指定 -g,避免主组关系不符合预期。

示例:

# 默认创建用户及其默认 HOME 目录
sudo useradd alice

# 创建用户并加入已存在的 itcast 组
sudo useradd -g itcast bob

# 指定 HOME 目录
sudo useradd -d /data/carol carol

useradd 只负责创建账户等基础信息。实际系统中还可能需要设置密码、Shell、过期时间等,这些超出本课件的基础范围。

userdel:删除用户

userdel [-r] 用户名
写法结果
userdel alice删除用户账户,保留其 HOME 目录
userdel -r alice删除账户,同时删除 HOME 目录

例如:

sudo userdel alice
sudo userdel -r bob

-r 主要会删除用户 HOME 目录和相关邮件文件,不会自动查找并删除该用户在系统其他目录中的所有文件。执行前应确认是否需要备份项目文件、SSH 密钥、配置和日志。

id:查看用户身份和组

id [用户名]

不带参数时查看当前用户:

id

带用户名时查看指定用户:

id alice

输出中通常能看到 UID、GID、主组以及附加组。它是确认“某个用户到底属于哪些组”的首选命令。

usermod -aG:加入附加用户组

usermod -aG 用户组 用户名

例如:

sudo usermod -aG itcast alice

其中:

部分含义
-G设置附加用户组
-aappend,追加而不是覆盖原有附加组

-aG 应当作为整体使用。若只使用 -G,可能会覆盖用户原有的附加组,导致原先能访问的资源突然失去权限。修改组关系后,用户通常需要重新登录,新的组身份才会反映到新的会话中。


getent:查看系统用户和用户组数据库

getent 可以按系统的名称服务配置读取用户、用户组等数据库。

查看全部用户

getent passwd

每一行对应一个用户,通常由 7 个以 : 分隔的字段组成:

用户名:密码占位符:用户ID:组ID:描述信息:HOME目录:登录Shell

例如:

alice:x:1001:1001::/home/alice:/bin/bash
字段示例含义
用户名alice登录账户名
密码占位符x密码哈希通常不直接保存在此处
用户 ID1001UID
组 ID1001主组 GID
描述信息备注字段
HOME 目录/home/alice用户个人目录
登录 Shell/bin/bash登录后使用的命令解释器

查看全部用户组

getent group

每一行通常由 4 个以 : 分隔的字段组成:

组名称:组认证占位符:组ID:成员列表

例如:

itcast:x:1002:

最后一个字段列出以该组作为附加组的直接成员,空着时会保留末尾冒号。它不一定列出所有以该组作为主组的用户,因此结合 id 用户名 使用,才能更直观地确认某个具体用户的组关系。


账号管理的安全顺序

创建一个项目用户和组时,可以按下面的顺序思考:

先创建用户组
创建用户并指定主组和 HOME
用 usermod -aG 添加附加组
用 id 验证组关系
按需授予文件权限或 sudo 权限

不要反过来先把所有用户都给 root 或无条件 sudo,再试图靠口头约束避免误操作。账号、用户组与权限设计本身就是 Linux 安全模型的一部分。

下一篇:Linux用户和权限(二):文件权限、chmod 与 chown