Linux 用户与权限管理入门指南

目录

一、用户管理

1.用户与组基础概念

1.1 用户分类及特征

1.2 组账号体系

1.3 UID 与 GID 机制

2. 用户账号配置文件

2.1 /etc/passwd 文件

​编辑

2.2 /etc/shadow 文件

2.3 密码策略管理工具 chage

3. 用户账号管理命令

3.1 创建用户 useradd

​编辑

4. 密码管理 passwd

5. 修改用户属性 usermod

6. 删除用户 userdel

二、组账号管理命令

2.1 组操作基础命令

2.2 组成员管理 gpasswd

三、 账号信息查询工具

3.1 常用查询命令

四、su命令切换用户

4.1 用途及用法

4.2 密码验证

五、文件权限管理

5.1 权限表示方法

5.2 权限修改命令 chmod

5.3 设置文件和目录的归属chown

六、sudo机制介绍

6.2 sudo [参数选项] 命令

6.3 用户组设置sudo提权

6.4 案列

6.4.1 案列一

6.4.2 案列二 用户可以临时创建网卡

6.4.3 用户别名案例

① 案例一 用户别名

② 案列二 用户别名


宝子们!有没有过刚接触 Linux 时,对着满屏命令一脸懵的时刻?比如想新建个用户,输完命令却提示 “权限不够”;或者手滑删了个账号,结果连自己的文件都打不开…… 其实这些 “坑”,本质上都是没搞懂「用户管理」这门课!

别觉得它听起来很 “运维大佬”,其实咱们日常用 Linux,小到给朋友开个 FTP 账号,大到管理公司服务器的员工权限,都得靠它撑场面。毕竟服务器里的文件、服务就像家里的抽屉,总不能谁都能随便翻吧?用户管理就是给每个 “人” 配好专属钥匙,既保证安全,又不耽误干活 —— 今天咱就用唠嗑的方式,把这门课的 “入门密码” 扒得明明白白~

一、用户管理

1.用户与组基础概念

1.1 用户分类及特征

Linux 系统通过用户角色实现权限分层,核心分为三类用户:

  • 超级用户(root)

    • 唯一标识:UID=0,GID=0
    • 权限:系统最高权限,可执行任何操作
    • 建议:仅用于系统管理,日常操作使用普通用户
  • 普通用户

    • 唯一标识:UID 范围在 CentOS 7 中为 1000+,CentOS 6 中为 500+
    • 权限:仅限自身宿主目录的完全控制权限
    • 管理:需由 root 用户创建
  • 程序用户(系统用户)

    • 唯一标识:UID 范围在 CentOS 7 中为 1-999,CentOS 6 中为 1-499
    • 用途:运行系统服务(如 apache、ftp),不可登录系统
    • 特点:随软件安装自动创建,维持服务运行

1.2 组账号体系

组是权限管理的核心单位,分为两种类型:

  • 基本组(主组)

    • 特性:用户默认所属组,与用户名同名
    • 创建:新建用户时自动生成
    • 示例:useradd john 会自动创建 john 组
  • 附加组(补充组)

    • 特性:用户可加入的额外组,实现权限扩展
    • 管理:通过命令添加 / 移除,一个用户可属于多个附加组
    • 示例:usermod -aG ftpusers john 将 john 加入 ftpusers 组

1.3 UID 与 GID 机制

  • UID(用户标识号):系统识别用户的唯一数字标识
  • GID(组标识号):系统识别组的唯一数字标识
  • 对应关系:每个用户至少关联一个 GID(基本组),可关联多个 GID(附加组)

2. 用户账号配置文件

2.1 /etc/passwd 文件

存储用户基本信息,格式为:

用户名:密码占位符:UID:GID:描述:宿主目录:登录Shell
  • 密码占位符 x 表示密码存储在 /etc/shadow 中
  • 示例:root:x:0:0:root:/root:/bin/bash

UID(0):用户的唯一标识符,用来标识不同的用户,通常 root 用户的 UID 为 0,普通用户的 UID 从 1000 开始(取决于系统配置)。

GID(0):基本组的 ID,通常是该用户的基本组 ID。

用户描述(root):该字段一般用于描述该用户的详细信息,通常为用户的全名或其他说明。

宿主目录(/root):用户登录时的默认工作目录,通常对于 root 用户是 /root,对于普通用户是 /home/用户名。

2.2 /etc/shadow 文件

存储密码及安全信息,格式为:

用户名:加密密码:最后修改时间:最小间隔:最大期限:警告天数:宽限天数:失效时间:保留
例子:root:$6$randomsalt$randomhashedpassword:18821:0:99999:7:::

解释:
root:用户名。
$6$randomsalt$randomhashedpassword:加密后的密码字符串。

18821:上次密码修改的时间,表示自 1970 年 1 月 1 日以来的第 18821 天。

0:最小修改间隔,表示密码可以随时修改。

99999:最大修改间隔,表示密码永不过期。

7:密码过期前的警告天数,提前 7 天提醒用户。

:::密码过期宽限期和账户失效时间为空,表示没有设置相关限制。

2.3 密码策略管理工具 chage

用于设置密码有效期参数:

chage -l 用户名        # 查看当前设置
chage -M 90 用户名     # 设置密码最大有效期90天
chage -E 2024-12-31 用户名  # 设置账户失效日期
chage -d 0 用户名      # 强制下次登录修改密码
[root@localhost ~]# chage -l john
最近一次密码修改时间					:8月 13, 2025
密码过期时间					:从不
密码失效时间					:从不
帐户过期时间						:从不
两次改变密码之间相距的最小天数		:0
两次改变密码之间相距的最大天数		:99999
在密码过期之前警告的天数	:7
​​​​[root@localhost ~]# chage -E 2024-04-29 john #其中,john为用户,用户将在2024年4月29日失效(不可登录)
[root@localhost ~]# chage -d 2024-6-30 john #设置最后一次修改密码的日期为2024年6月30日
[root@localhost ~]# chage -l john
最近一次密码修改时间					:6月 30, 2024
密码过期时间					:8月 29, 2024
密码失效时间					:从不
帐户过期时间						:4月 29, 2024
两次改变密码之间相距的最小天数		:0
两次改变密码之间相距的最大天数		:60
在密码过期之前警告的天数	:7
[root@localhost ~]# date -d -u #如果不知道时间可以用date查看
-u:UTC时间
2025年 08月 13日 星期三 00:00:00 CST

3. 用户账号管理命令

3.1 创建用户 useradd

useradd 用户名                # 基本创建
useradd -u 1005 用户名        # 指定UID
useradd -d /home/admin 用户名  # 指定宿主目录
useradd -s /sbin/nologin 用户名 # 禁止登录Shell
useradd -e 2024-12-31 用户名   # 设置失效日期
useradd -g 基本组 -G 附加组1,附加组2 用户名 # 指定组

基本组是用户默认所属的组,通常与用户名相同。每个用户在创建时会自动拥有一个与用户名相同的基本组。在创建用户john时,系统会为用户自动创建与其同名的基本组john

[root@localhost ~]# usermod -aG wheel john
[root@localhost ~]# id john
uid=1003(john) gid=1003(john) 组=1003(john),10(wheel)

#-aG:这是两个选项的组合,-a 表示追加(不覆盖用户已有的所属组),-G 表示指定附加组
wheel:目标用户组名称,在许多 Linux 发行版中,wheel 组是具有 sudo 权限的管理员组
john:要被修改的用户名

## 执行这个命令后,用户 john 将获得 wheel 组的权限,通常意味着可以使用 sudo 命令来执行需要管理员权限的操作。
注意:执行这个命令通常需要 root 权限,所以你可能需要先用 su - 切换到 root 用户,或者在命令前加上 sudo(如果你当前用户已有 sudo 权限)。
[root@localhost ~]# useradd -d /admin -g wheel -G root admin
[root@localhost ~]# id admin
uid=1005(admin) gid=10(wheel) 组=10(wheel),0(root)
#该用户(用户名为admin,UID 为 1005)的主组是wheel(GID 为 10),同时附加组包含root(GID 为 0),这意味着该用户拥有极高的系统权限,可能具备sudo权限甚至直接等同于root用户的权限。
[root@localhost ~]# useradd -e 2025-1-1 -s /sbin/nologin lisa2
[root@localhost ~]# useradd -u 707 lisa3
[root@localhost ~]# tail -2 /etc/passwd
lisa2:x:1006:1006::/home/lisa2:/sbin/nologin
lisa3:x:707:1007::/home/lisa3:/bin/bash

4. 密码管理 passwd

passwd 用户名                # 交互式设置密码
echo "123456" | passwd --stdin 用户名  # 非交互式设置
passwd -l 用户名              # 锁定账户
passwd -u 用户名              # 解锁账户
passwd -d 用户名              # 清空密码
passwd -S 用户名              # 查看状态
[root@localhost ~]# passwd -l lisa
锁定用户 lisa 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -S
passwd:该选项需要使用用户名称。
[root@localhost ~]# passwd -S lisa
lisa LK 2025-08-13 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# passwd -u lisa
解锁用户 lisa 的密码。
passwd: 警告:未锁定的密码将是空的。
passwd: 不安全的操作(使用 -f 参数强制进行该操作)
[root@localhost ~]# passwd -S lisa
lisa LK 2025-08-13 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# passwd -d lisa
清除用户的密码 lisa。
passwd: 操作成功
[root@localhost ~]# passwd -S lisa
lisa NP 2025-08-13 0 99999 7 -1 (密码为空。)
[root@localhost ~]# echo "123" | passwd --stdin lisa
更改用户 lisa 的密码 。
passwd:所有的身份验证令牌已经成功更新。

5. 修改用户属性 usermod

usermod -l 新用户名 旧用户名   # 修改登录名
usermod -d /new/home 用户名    # 修改宿主目录
usermod -s /bin/sh 用户名      # 修改登录Shell
usermod -g 新基本组 用户名     # 修改基本组
usermod -G 附加组1,组2 用户名  # 设置附加组(覆盖原有)
usermod -aG 附加组 用户名      # 追加附加组
usermod -L 用户名              # 锁定账户
usermod -U 用户名              # 解锁账户
[root@localhost ~]# mv /admin /home/
[root@localhost ~]# usermod -d /home/admin admin
[root@localhost ~]# cat /etc/passwd|grep admin
admin:x:1005:10::/home/admin:/bin/bash
[root@localhost ~]# usermod -L admin
[root@localhost ~]# passwd -S admin
admin LK 2025-08-13 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U admin
[root@localhost ~]# usermod -l webmaster admin
[root@localhost ~]# grep "admin" /etc/passwd
webmaster:x:1005:10::/home/admin:/bin/bash

6. 删除用户 userdel

userdel 用户名                # 删除用户
userdel -r 用户名             # 同时删除宿主目录
[root@localhost ~]# id lisa2
uid=1006(lisa2) gid=1006(lisa2) 组=1006(lisa2)
[root@localhost ~]# userdel -r lisa2
[root@localhost ~]# ls -ld /home/lisa2
ls: 无法访问/home/lisa2: 没有那个文件或目录

二、组账号管理命令

2.1 组操作基础命令

groupadd 组名                # 创建组
groupadd -g 1005 组名        # 指定GID创建组
groupdel 组名                # 删除组

2.2 组成员管理 gpasswd

gpasswd -a 用户名 组名        # 添加用户到组
gpasswd -d 用户名 组名        # 从组移除用户
gpasswd -M 用户1,用户2 组名   # 设置组的所有成员

三、 账号信息查询工具

3.1 常用查询命令

命令功能示例
id查看用户 UID/GID 信息id john
groups查看用户所属组groups john
finger查看用户详细信息finger john
w/who/users查看当前登录用户w
[root@localhost ~]# id lisa
uid=1004(lisa) gid=1004(lisa) 组=1004(lisa)
[root@localhost ~]# groups lisa
lisa : lisa

四、su命令切换用户

4.1 用途及用法

  • 用途:Substitute User,切换用户

  • 格式 :su - 目标用户

4.2 密码验证

  • root:任意用户,不验证密码

  • 普通用户:”其他用户,验证目标用户的密码

    [benet@benet79-2]# su - root
    口令:
    注:带 - 选项表示将使用目标用户的登录Shell环境
    [root@benet79-2 ~]# whoami
    root

五、文件权限管理

5.1 权限表示方法

  • 字符表示r(读)=4, w(写)=2, x(执行)=1
  • 权限位结构属主权限(3 位)+属组权限(3 位)+其他用户权限(3 位)
  • 示例:-rwxr-xr-- 表示:
    • 属主:读、写、执行(7)
    • 属组:读、执行(5)
    • 其他:读(4)

5.2 权限修改命令 chmod

chmod u+x 文件名             # 给属主添加执行权限
chmod g-w 文件名             # 从组权限移除写权限
chmod o=r 文件名             # 给其他用户只读权限
chmod 755 文件名             # 数字方式设置权限
chmod -R 755 目录名          # 递归设置目录权限

5.3 设置文件和目录的归属chown

chown命令

  • chown 属主 文件或目录

  • chown :属组 文件或目录

  • chown 属主:属组 文件或目录

常用选项

  • -R:递归修改指定目录下所有文件、子目录的归属

六、sudo机制介绍

通过su命令可以非常方便地切换为另一个用户,但前提条件是必须知道目标用户的登 录密码。例如,若要从zhangsan 用户切换为 root 用户,必须知道 root 用户的密码。对于生产环 境中的 Linux 服务器,每多一个人知道特权密码,其安全风险也就增加一分。 有没有一种折中的办法,既可以让普通用户拥有一部分管理权限,又不需要将 root 用户的密码告诉他呢?答案是肯定的,使用 sudo命令就可以提升执行权限。不过,需要由管理员预先进行授权,指定允许哪些用户以超级用户(或其他普通用户)的身份来执行哪些命令。

etc/sudoers文件的默认权限为440,需使用专门的 visudo 工具进行编辑。虽然也可以用 vi 进行编辑,但保存时必须执行“:w!”命令来强制操作,否则 系统将提示为只读文件而拒绝保存。 配置文件/etc/sudoers 中,授权记录的基本配置格式如下所示。

user MACHINE=COMMANDS
用户   主机   命令

6.2 sudo [参数选项] 命令

  • -l 列出用户在主机上可用的和被禁止的命令;一般配置好/etc/sudoers后,要用这个命令来查看和测试是不是配置正确的;

  • -v 验证用户的时间戳;如果用户运行sudo 后,输入用户的密码后,在短时间内可以不用输入口令来直接进行sudo 操作;用-v 可以跟踪最新的时间戳;

  • -u 指定以以某个用户执行特定操作;

  • -k 删除时间戳,下一个sudo 命令要求用求提供密码;

ifconfig ens33:0 192.168.10.40/24
#授权配置主要包括用户、主机、命令三个部分,即授权哪些人在哪些主机上执行哪些命 令。各部分的具体含义如下。 注:Runas_Alias:在哪些主机以谁的身份运行 的别名 这个不怎么使用

6.3 用户组设置sudo提权

  • 用户(user):直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)。

  • 主机(MACHINE):使用此配置文件的主机名称。此部分主要是方便在多个主机间共用同一份 sudoers 文件,一般设为 localhost 或者实际的主机名即可。

  • 命令(COMMANDS):允许授权的用户通过 sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。

6.4 案列

6.4.1 案列一

需求:wangliu 用户可以使用useradd usermod(wangliu root用户下的权限 useradd usermod)

配置

# 在visudo编辑界面添加以下配置
Lisa  ALL=(root)  NOPASSWD:/usr/sbin/useradd, /usr/sbin/usermod
# 配置说明:
# Lisa:被授权的用户账号
# ALL:允许在所有主机上执行命令
# (root):可以root管理员身份运行命令
# NOPASSWD:/usr/sbin/useradd:执行useradd命令时无需输入Lisa的密码
# /usr/sbin/usermod:未加NOPASSWD,执行时需要输入Lisa的密码(默认行为)

# 1. 从root用户切换到Lisa用户
su - Lisa

# 2. 用sudo执行useradd命令创建jerry用户
sudo /usr/sbin/useradd jerry
# 因为配置了NOPASSWD,此处不会提示输入密码(如果提示密码,说明配置有误)

# 3. 查看/etc/passwd文件确认用户创建成功
tail -2 /etc/passwd
# 成功输出示例:
# Lisa:x:1005:1005::/home/Lisa:/bin/bash  # Lisa用户自身信息
# jerry:x:1006:1006::/home/jerry:/bin/bash  # 新创建的jerry用户信息
# 出现以上内容说明配置生效,Lisa成功创建用户

6.4.2 案列二 用户可以临时创建网卡

visudo
Tom  kgc=(root) NOPASSWD:/usr/sbin/ifconfig

验证:
su - Tom
[Tom@kgc root]$ ifconfig  ens33:0 192.168.1.11/24
#初次使用sudo时需验证当前用户的密码,默认超时时长为5分钟,在此期间不再重复验证密码。
sudo - l
#查看当前用户获得哪些sudo授权

6.4.3 用户别名案例

当使用相同授权的用户较多,或者授权的命令较多时,可以采用集中定义的别名。用户、 主机、命令部分都可以定义为别名(必须为大写),分别通过关键字User_Alias、Host_Alias、Cmnd_Alias来进行设置。

#查看组下面的用户

grep "wheel" /etc/group

用户别名的语法格式:

(1)User_Alias 用户别名:包含用户、用户组(%组名(使用%引导))、还可以包含其他其他已经用户的别名

 User_Alias OPERATORS=zhangsan,tom,lisi,%wheel  #组前加,

(2)Host_Alias 主机别名:主机名、IP、网络地址、其他主机别名 !取反

 Host_Alias MAILSVRS=smtp,pop 

(3)Cmnd_Alias 命令路劲、目录(此目录内的所有命令)、其他事先定义过的命令别名

Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum 
① 案例一 用户别名
Host_Alias MYHOSTS = kgc,localhost
           别名
User_Alias MYUSERS = zhangsan,wangwu,lisi
Cmnd_Alias MYCMNDS = /sbin/*,!/sbin/reboot,!/sbin/poweroff,!/sbin/init,!/usr/bin/rm  #*下面都可以运行,!下不可以,!优先级>*
#!是取反的意思
#init 6 重启      into 0 关机
#别名设大写
MYUSERS MYHOSTS=NOPASSWD:MYCMNDS
② 案列二 用户别名

例如,以下操作通过别名方式来添加授权记录,允许用户wangliu、 wangliu组、useradmin组 并且定义命令别名。

在主机 smtp、pop 中执行 rpm、yum 命令
User_Alias USERADMIN = wangliu,%wangliu ,%useradmin
Cmnd_Alias USERADMINCMND =/usr/sbin/useradd,/usr/sbin/usermod,/usr/sbin/userdel,/usr/bin/passwd,!/usr/bin/passwd root  #取反的优先级最高
USERADMIN ALL=(root) NOPASSWD: USERADMINCMND

验证别名以及命令路径

注bug
sudo passwd root 测试

最后总结给宝子捋一下哈

Linux 里用户分三类:root(超管大佬)、普通用户(打工人)、程序用户(幕后工具人),组也有基本组(专属小窝)和附加组(临时组队)~
管理用户靠 useradd/usermod,组用 groupadd/groupdel,密码和账号信息藏在 passwd/shadow 文件里。文件权限 rwx(读 / 写 / 执行)像钥匙,chmod/chown 能配钥匙。想让普通用户干管理员活?就用 sudo!visudo 改配置文件,精准授权超安全~

这篇 Linux 用户权限小笔记就到这儿啦~其实这些操作看着多,练个两三遍就能上手!后续不管是管理自己的小服务器,还是处理工作里的账号权限,这些 “基本功” 都超实用~如果宝子们操作时碰到小问题,随时回来翻一翻,或者评论区一起唠唠~喜欢的点赞收藏呦~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值