news 2026/7/29 6:11:27

Linux用户与权限管理看这一篇就够了!从零基础到实战,彻底搞懂用户/组/sudo

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux用户与权限管理看这一篇就够了!从零基础到实战,彻底搞懂用户/组/sudo

Linux用户与权限管理从入门到实战:零基础也能轻松掌握

从“小白懵圈”到“熟练配置”,一文搞定用户、组、权限那些事儿


一、为什么我们要管用户和权限?

想象一下,你租了一间合租房,大门钥匙(root密码)每个人都能复制,今天张三带朋友来,明天李四搬走东西,最后屋里丢了东西都不知道该找谁。Linux系统如果不做用户管理,所有人共用 root 超级管理员,后果就是这样:

  • 没有操作日志——谁动了配置文件?查不到人
  • 误操作风险极高——一个rm -rf /*可能让整个服务器瘫痪
  • 权限无边界——开发、测试、运维都用同一个账号,数据库和网站代码随便删

用户管理的核心目标:让“谁、什么时候、做了什么”清清楚楚,同时做到最小权限原则——每个账号只拥有完成自己工作所必须的权限。


二、用户信息存在哪?三座“档案库”

Linux 把所有用户和组的信息存放在三个文本文件中,它们就是系统账号管理的“户籍档案”:

文件存储内容用途
/etc/passwd用户名、UID、主组ID、家目录、登录Shell基本账户信息(密码已移走)
/etc/shadow加密后的密码、密码过期策略真正存放密码的地方,权限极高
/etc/group组名、GID、组成员列表组信息及成员关系

⚠️新手注意:千万不要用vim直接编辑这些文件!必须用系统提供的命令(如useraddusermod)来修改,否则格式出错会导致无法登录。


三、组管理——先把“部门”建好

在创建用户之前,通常先创建组(好比公司先设部门,再招人)。

3.1 创建组 ——groupadd

# 创建一个名为 devops 的组sudogroupadddevops# 创建组并指定 GID(组ID)为 3000sudogroupadd-g3000dba

新手常见报错
如果你创建组时提示group 'xxx' already exists,说明组名已被占用。可以用-f强制忽略,或换个组名。

3.2 修改组 ——groupmod

# 把组名 devops 改为 opssudogroupmod-nops devops# 修改组的 GID 为 4000sudogroupmod-g4000ops

3.3 删除组 ——groupdel

sudogroupdelops

🚨踩坑预警:如果某个用户的主组(primary group)正是这个组,那么无法删除该组!你必须先把用户的主组改掉或删除用户,才能删组。


四、用户管理——招人、换岗、离职

4.1 添加用户 ——useradd

# 最简单的创建(Rocky/CentOS 自动建家目录、指定 bash)sudouseradddev_user# Ubuntu 必须加上 -m(创建家目录)和 -s(指定Shell)sudouseradd-m-s/bin/bash dev_user# 指定 UID、主组、附加组sudouseradd-u2000-gdevops-Gdba,developer app_admin

关于主组 vs 附加组(新手最晕的)

  • 主组(Primary Group):每个用户必须有且只有一个,新建文件时默认所属组就是它。
  • 附加组(Supplementary Groups):可以有 0 个或多个,用于授予额外权限(比如让开发人员临时加入运维组)。

创建用户时,如果不指定-g,系统会自动创建一个与用户名同名的组作为主组。

常用选项一览

选项含义备注
-m创建家目录Rocky 可省,Ubuntu 必加
-s指定登录 Shell/bin/bash/sbin/nologin(禁止登录)
-u指定 UID
-g指定主组组必须已存在
-G指定附加组多个组用逗号分隔
-r创建系统用户(无家目录,不可登录)用于运行服务进程

4.2 修改用户 ——usermod

# 修改用户的 Shellsudousermod-s/bin/bash dev_user# 修改家目录(同时迁移数据)sudousermod-d/opt/dev_user-mdev_user# 添加附加组(千万注意 -a 选项!)sudousermod-aGdba dev_user# ✅ 追加 dba 组sudousermod-Gdba dev_user# ❌ 会覆盖掉之前所有的附加组!

新手翻车现场
很多人忘记加-a,结果用户只剩一个dba组,原来在wheel等组里的权限全部丢失。记住:-aG是标配,-G单独用是重置。

锁定和解锁用户:

# 锁定用户(无法登录)sudousermod-Ldev_user# 解锁sudousermod-Udev_user

锁定后,/etc/shadow中该用户密码字段前会多一个!符号。


4.3 删除用户 ——userdel

# 仅删除用户,家目录和邮箱保留sudouserdeldev_user# 删除用户并同时删除家目录和邮箱(-r)sudouserdel-rdev_user

💡 工作场景中,通常建议先备份用户数据,再用-r彻底清理,避免遗留孤儿文件。


4.4 设置密码 ——passwdchpasswd

  • 交互式设置(需要输入两次):
sudopasswddev_user
  • 非交互式(适合脚本)——Rocky 和 Ubuntu 通用
echo"dev_user:MyPass123"|sudochpasswd

Rocky 还支持echo "MyPass123" | passwd --stdin dev_user,但 Ubuntu 不支持,所以推荐统一用chpasswd


五、Linux 权限模型 UGO —— 文件三权分立

Linux 中每个文件/目录都有属主(User)属组(Group)其他人(Other)三类访问者,各自拥有一套读(r)、写(w)、执行(x)权限。

5.1 rwx 对文件和目录的“大不同”

权限对文件的意义对目录的意义
r(读)可以cat查看文件内容可以ls罗列文件夹内全部资源(需配合 x)
w(写)可以vim修改内容可以在目录内创建、删除、重命名文件(需配合 x)
x(执行)可以运行该程序/脚本可以cd进入目录,是访问内部文件的前提

新手容易犯的错误:给目录只赋r权限而没有x,导致无法cd进去,只能看名字却进不去。

5.2 权限表示法

  • 字符法rwxr-x---
    前三位属主(rwx)、中三位属组(r-x)、后三位其他人(—)。
  • 数字法:将每组 rwx 视为二进制,有权限为1,无则为0,转十进制。
    rwx= 111 = 7,r-x= 101 = 5,---= 000 = 0 → 750。

六、修改权限与属主 —— 日常高频操作

6.1 修改属主属组 ——chown/chgrp

# 只改属主sudochowndev_user project.log# 只改属组sudochown:devops project.log# 等价于 chgrp devops project.log# 同时改属主和属组sudochowndev_user:devops project.log# 递归修改整个目录(-R)sudochown-Rdev_user:devops /opt/app/

6.2 修改权限 ——chmod

字符模式

# 给属主添加执行权限chmodu+x script.sh# 移除属组的读权限chmodg-r secret.conf# 精确设置其他人的权限为只读chmodo=r public.txt# 给所有人类别赋予读写执行chmoda=rwx tool

数字模式(更常用):

chmod755app.jar# 属主 rwx,属组 rx,其他人 rxchmod640config.yml# 属主 rw,属组 r,其他人无chmod750/opt/data# 属主 rwx,属组 rx,其他人无

七、权限掩码 umask —— 新文件默认权限从哪来?

每次你创建新文件或目录,系统都会根据umask值计算默认权限。

  • 计算公式
    文件默认权限 = 666 - umask
    目录默认权限 = 777 - umask

查看当前 umask:

umask# 输出 0022(普通用户可能 0002)
  • 当 umask = 022 时:
    新文件 → 666 - 022 = 644(-rw-r--r--
    新目录 → 777 - 022 = 755(drwxr-xr-x

  • 当 umask = 027 时:
    新文件 → 666 - 027 = 640(-rw-r-----
    新目录 → 777 - 027 = 750(drwxr-x---

临时修改umask 027
永久修改:写入~/.bashrc/etc/profile

🧠 很多新手以为 umask 是“减掉”的权限,实际是“屏蔽”的权限位。例如 umask 为 022,就是屏蔽掉属组的写权限和其他的写权限。


八、删除文件的本质 —— 为什么需要目录的写权限?

很多人误以为删除文件需要文件本身有写权限。其实不然!

删除文件实际上是在父目录中删除该文件的条目(文件名与 inode 的映射),所以真正要求的是父目录有写和执行权限

实验验证:

  1. 创建一个目录并给满权限,里面的文件权限设为 000:
mkdir/opt/testecho"hello">/opt/test/file.txtchmod777/opt/testchmod000 /opt/test/file.txt
  1. 用普通用户尝试删除该文件(需要普通用户对目录有写权限):
rm-f/opt/test/file.txt# 成功删除!尽管 file.txt 本身是 000
  1. 反过来,如果目录没有写权限,即使文件是 777 也删不掉:
chmod555/opt/test# 目录无写权限rm-f/opt/test/file.txt# 报错 Permission denied

结论:删除文件,看的是目录的权限,不是文件本身的权限。


九、权限委派 —— su 与 sudo 的正确用法

9.1 su —— 切换用户身份

sudev_user# 切换用户,但环境变量、当前目录保留原用户的su- dev_user# 切换用户并加载目标用户的环境(推荐)su- dev_user-c"ls -lh /home/dev_user"# 切换并执行一条命令

使用su - root需要知道 root 密码,并且切换后没有任何审计日志,不推荐在生产使用

9.2 sudo —— 临时提权(推荐)

普通用户执行管理员命令时,只需在自己密码前加sudo,系统会检查/etc/sudoers是否授权。

将用户加入管理员组(最快速获得 sudo 权限):

发行版管理员组默认配置
Rocky / RHELwheel%wheel ALL=(ALL) ALL
Ubuntu / Debiansudo%sudo ALL=(ALL) ALL
# Rocky 中加入 wheelsudousermod-aGwheel dev_user# Ubuntu 中加入 sudosudousermod-aGsudodev_user

9.3 精细控制 sudo —— 使用visudo

编辑/etc/sudoers或单独文件/etc/sudoers.d/xxx(推荐后者):

sudovisudo-f/etc/sudoers.d/custom

配置格式
用户/组 主机=(运行身份) 命令

示例:

# 允许 dev_user 执行任何命令(需密码)dev_userALL=(ALL)ALL# 允许 devops 组成员重启 nginx 且无需密码%devopsALL=(ALL)NOPASSWD: /usr/bin/systemctl restart nginx# 禁止某用户修改 root 密码bad_userALL=(ALL)ALL,!/usr/bin/passwd root

验证权限

sudo-l# 查看当前用户被允许的命令sudo-l-Udev_user# 查看指定用户的 sudo 权限

十、综合实战:为若依项目创建标准化用户体系

场景:公司新部署了一套若依后台管理系统,需要为不同角色分配专属账号和权限。

角色账号所属组权限需求
应用管理员ruoyi-admindevops可重启 Nginx
数据库管理员ruoyi-dbadba可启停 MySQL
开发人员ruoyi-devdeveloper可查看应用日志

实施步骤

1. 创建组

sudogroupadddevopssudogroupadddbasudogroupadddeveloper

2. 创建用户并加入附加组

sudouseradd-Gdevops ruoyi-adminsudouseradd-Gdba ruoyi-dbasudouseradd-Gdeveloper ruoyi-dev# Ubuntu 需加 -m -s /bin/bash

3. 设置统一密码(非交互)

echo"ruoyi-admin:Ruoyi@2026"|sudochpasswdecho"ruoyi-dba:Ruoyi@2026"|sudochpasswdecho"ruoyi-dev:Ruoyi@2026"|sudochpasswd

4. 配置 sudo 精细权限

新建/etc/sudoers.d/ruoyi

%devopsALL=(ALL)/usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx %dbaALL=(ALL)/usr/bin/systemctl start mysqld, /usr/bin/systemctl stop mysqld, /usr/bin/systemctl status mysqld %developerALL=(ALL)/usr/bin/tail-f/var/log/ruoyi/*, /usr/bin/cat /var/log/ruoyi/*

5. 验证

sudo-l-Uruoyi-admin# 应显示可执行 restart 和 status

十一、Rocky Linux 与 Ubuntu 差异速查表

操作Rocky/CentOSUbuntu
创建用户useradd dev_user(自动家目录)useradd -m -s /bin/bash dev_user
非交互密码`echo “123”passwd --stdin user`
管理员组wheelsudo
查看 sudo 日志/var/log/secure/var/log/auth.log

建议跨发行版时统一使用chpasswdvisudo,确保兼容。


十二、新手常见报错与解决

报错信息原因解决
useradd: group 'xxx' does not exist附加组未提前创建先用groupadd建组
usermod: group 'xxx' does not exist同上检查组名拼写
userdel: user xxx is currently used by process用户正在登录强制踢出或用-f
sudo: command not found未安装 sudodnf install sudo/apt install sudo
permission denied删除文件父目录缺少 w 权限chmod +w父目录
chmod: cannot access 'file'文件路径错误或权限不足检查路径及当前身份

总结

  • 用户管理三文件/etc/passwd/etc/shadow/etc/group,命令操作是正道,千万别手动改。
  • 组与主/附加组:主组只有一个,附加组可多个,-aG是追加的好朋友。
  • 权限模型 UGO:r、w、x 对文件和目录含义不同,目录必须有 x 才能进入。
  • 删除文件看目录:目录有 w 权限就能删,和文件本身无关。
  • sudo 胜过 su:su 切换无审计,sudo 临时提权并记录日志,更安全可控。

通过今天的实战练习,你已经能独立完成用户体系搭建、权限分配和日常运维操作。接下来,不妨在自己的虚拟机里动手演练一遍,把每个命令敲出来,遇到报错再看看本文的“踩坑指南”,很快就能熟练于心!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/29 6:11:18

2026年AI培训成本高效果差?济南机构按效果付费模式解决痛点

2026年AI培训成本高效果差?济南机构按效果付费模式解决痛点本文解析济南企业AI培训成本高、落地难痛点,提出分层解决方案,介绍按效果付费模式优势,给出避坑要点与选择建议。2026年AI培训成本高效果差?济南机构按效果付…

作者头像 李华
网站建设 2026/7/29 6:10:50

Intel Edison物联网设备邮件通知系统:Python实现与稳定性优化

1. 项目概述:为什么要在Edison上实现邮件通知?几年前,我在一个工业物联网项目里遇到了一个头疼的问题:几十台部署在偏远厂区的设备,需要实时上报运行状态。网络时好时坏,传统的云平台心跳检测总有延迟&…

作者头像 李华
网站建设 2026/7/29 6:10:13

D Gaussian splatting : 部署模型网页展示

D Gaussian Splatting : 部署模型网页展示 在计算机视觉与图形学领域,3D Gaussian Splatting 正迅速成为从图像序列重建高质量 3D 场景的核心技术。它与传统的 NeRF 不同,采用显式的点云高斯椭球表示,渲染速度极快,且能实现实时交…

作者头像 李华
网站建设 2026/7/29 6:09:42

AI Agent安全实践:工具调用权限与自治行为边界控制方案

1. 项目概述:当AI开始“自作主张”,我们如何为它划清行动边界?最近在折腾和落地几个AI Agent项目,从简单的自动化客服到复杂的业务流程编排,一个越来越无法回避的问题浮出水面:权限失控。想象一下&#xff…

作者头像 李华
网站建设 2026/7/29 6:09:34

OPUS音频编解码器在DSP平台的优化实践

1. OPUS编解码器概述:为什么选择它?OPUS是一种开源、免版税的音频编解码器,由IETF标准化为RFC 6716。它最显著的特点是能够在低比特率下保持高音质,同时支持从窄带(6kHz)到全带(20kHz&#xff0…

作者头像 李华
网站建设 2026/7/29 6:09:29

STM32工程模板搭建指南:从零构建Keil5标准库与HAL库开发框架

1. 为什么需要一个专属的STM32工程模板?如果你刚开始接触STM32,或者已经写过几个简单的点灯、串口程序,可能会觉得每次新建工程都挺麻烦的。需要手动添加一堆文件,配置各种路径,设置编译选项,稍有不慎就会报…

作者头像 李华