Linux基础命令之用户管理——学会各种管理用户的命令,超两万字教学,全网最全,学就对了!!!(2)

前言

本篇文章将讲解Linux基础命令中与用户管理相关的命令,包括su、useradd、passwd、sudo、usermod、userdel、groupadd、chage等命令,从底层出发带领大家理解Linux系统运行命令的本质,全文超20000字,通过各种实操案例,帮助大家轻松学会这些命令,并实现举一反三。

1、切换用户(su)

标准方式:su - 用户名,如:su - root
一般方式:su 用户名,如:su root
Tips
当不指定用户名时,默认切换为root用户,如:su 或 su - ;从普通用户切换至其它用户必须输入密码,而从root用户切换至普通用户则不需要输入密码

案例演示:
在这里插入图片描述

注意:
我们在切换用户时一般采用标准方式,它会将用户的权限环境变量一起切换,而一般方式只会切换用户权限,而不会切换环境变量

扩展:环境变量

Linux环境变量是系统级的动态键值对,用于定义程序运行环境。它们存储配置信息,如路径、用户偏好或应用参数,供进程在运行时调用。例如,PATH变量指定可执行文件的搜索目录,LANG决定系统语言,HOME指向用户主目录。用户可通过终端临时设置(如export VAR=value)或写入配置文件(如~/.bashrc)永久生效。环境变量具有继承性,父进程设置的变量会被子进程继承,常用于区分开发/生产环境(如NODE_ENV)。全局变量(/etc/environment)影响所有用户,局部变量仅限当前会话。

在Linux系统中,若使用su命令切换用户时未加-参数(如su user而非su - user),仅切换用户权限而未加载目标用户的环境变量(如PATHHOME等),会导致以下问题:

  1. 路径与命令失效:因PATH未更新,可能无法访问目标用户的专属命令或脚本;
  2. 配置文件未加载:如.bashrc.profile中的自定义变量或别名不生效,影响程序运行;
  3. 权限冲突:临时文件或日志可能误写入原用户目录,导致权限错误;
  4. 安全风险:敏感环境变量未重置,可能泄露原用户配置或暴露不安全路径。

此类问题常见于脚本或服务调用时,推荐使用su -sudo -i以完整切换用户环境。

2、登出用户(exit)

命令:exit(快捷键:ctrl+d,不区分大小写)
一般用于切换用户后,回退至上一级用户,若多次登陆用户,执行exit 会依次登出,当回退至最初的用户时,再次输出exit,会直接关闭终端,返回桌面

案例演示:
在这里插入图片描述

注意:
我们在切换其它用户后,若想返回至上一级用户一般都会使用exit,虽然也可以通过su命令切换回去,但在Linux中使用su命令切换用户并不是返回至上一级用户,而是为该用户开辟一个新的环境变量,相当于不断地嵌套,这样就会不停地消耗资源,包括我们在关闭终端时最好也是用exit进行注销,而不是点击右上角的X号,这样可以完全关闭终端,避免资源消耗

Linux切换用户示意图:
在这里插入图片描述

3、创建用户(useradd)

3.1 基本语法

语法:useradd [选项] 用户名
useradd是Linux系统中用于创建新用户账户的基本命令。

常用选项

选项描述
-c “注释”添加用户备注信息
-d 目录指定用户主目录
-e 日期设置账户过期日期(YYYY-MM-DD)
-f 天数密码过期后多少天关闭账户
-g 组名指定主用户组
-G 组列表指定附加组(多个组用逗号分隔)
-m创建用户主目录(通常与-d一起使用)
-M不创建用户主目录
-p 密码设置加密后的密码(不推荐直接使用)
-s shell指定用户登录shell
-u UID指定用户ID
-k模板目录 指定骨架目录(默认/etc/skel)
-r创建系统账户(无主目录),UID通常小于1000

3.2 常用方法

  1. 创建普通用户:

    useradd -m username   # 这里 -m 选项可省略,默认会在 /home 下创建一个与用户名相同的家目录
    

    这会创建用户并自动创建 /home/username 目录

  2. 创建用户并指定主目录:

    useradd -m -d /path/to/home username
    

    这里会创建用户 username,其家目录为 /path/to/home,若指定目录不存在,会自动创建

  3. 创建用户并指定用户组:

    useradd -g primarygroup -G supplementarygroup1,supplementarygroup2 username
    

    这里会创建用户,-g 表示创建主用户组,并将该用户加入到改组中,若省略 -g 选项,系统会默认创建一个与用户名相同的主用户组;-G 表示创建附加组,并将用户加入到这些组中,用户只能加入一个主用户组,但可以加入多个附加组

  4. 创建系统账户:

    useradd -r systemuser
    

    这里会创建一个UID小于1000的用户systemuser

  5. 创建用户并指定shell:

    useradd -s /bin/bash username
    

    这里会创建用户并指定shell为 /bin/bash

  6. 创建用户并设置过期日期:

    useradd -e 2025-12-31 username  # 用户过期后便无法登陆
    
  7. 创建用户并设置密码:

    useradd -p 12345678 username   # 一般我们都是通过passwd命令设置密码,不会直接在创建用户时设置
    
  8. 查看默认设置

    useradd -D    
    

    这个命令会显示useradd的默认配置,如主目录位置、默认shell、账户过期时间等,如:
    在这里插入图片描述

3.3 创建用户后的常见操作

  1. 设置密码:

    passwd username
    

    系统默认要求用户必须设置密码才能登陆,若没有设置密码,普通用户下无法切换至目标用户,root用户除外。

  2. 删除用户(使用userdel命令):

    userdel username   # 只删除用户
    userdel -r username # -r 选项表示删除用户及其家目录,一般使用改命令删除用户,以保证完全删除用户数据
    
  3. 查看用户信息(使用id命令)

    id  # 显示当前用户信息
    id username  # 显示指定用户信息
    

    示例:
    在这里插入图片描述

3.4 注意事项

  • 通常需要root权限(或使用sudo)来执行useradd命令,sudo表示以管理员权限执行该命令

  • 默认情况下,useradd会创建主目录(配置文件中已经默认设置好了),可以省略-m选项

  • 用户创建后,建议立即设置密码,系统默认要求用户必须设置密码才能登陆,当然root用户除外。

  • 不同的Linux发行版可能有不同的默认配置(如主目录位置、默认shell等)

  • 每个用户都必须加入一个用户组(私有组、主组、属组),一般创建用户时,不指认用户组,系统会默认创建以用户名命名的组;每个用户都可以加入多个组(属组)

  • 创建用户时,会默认给用户创建一个家目录作为用户的主目录,包括桌面及相关用户数据会默认存放在家目录中,其它用户一般没有权限访问他人的家目录

4、管理用户密码(passwd)

在Linux中,passwd命令用于管理用户密码,功能包括修改密码、锁定账户、设置密码策略等。

1、基本用法

  • 修改当前用户密码
    普通用户直接运行passwd,按提示输入旧密码和新密码:

    passwd
    
  • 管理员修改其他用户密码
    普通用户想要修改其它用户的密码,需要在命令前加上 sudo

    passwd username
    

2、账户锁定与解锁

  • 锁定用户账户
    用户无法通过密码登录(不影响其他登录方式如SSH密钥):

    passwd -l username  # 或 --lock
    
  • 解锁用户账户

    passwd -u username  # 或 --unlock
    

3、密码管理

  • 删除用户密码
    使该用户无需密码就可以直接登陆:

    passwd -d username  # 或 --delete
    
  • 强制用户下次登录修改密码

    passwd -e username  # 或 --expire
    

4、查看密码状态

  • 显示密码信息

    passwd -S username  # 或 --status
    

    示例输出:
    在这里插入图片描述
    lisi PS 2025-04-28 0 99999 7 -1
    依次为:用户密码已设置、最后修改日期、最短有效期、最长有效期、警告期等

5、密码有效期设置

  • 设置密码最短有效期(7天内不可修改)

    passwd -n 7 username  # 或 --mindays
    
  • 设置密码最长有效期(30天后过期)

    passwd -x 30 username  # 或 --maxdays
    

6、非交互式修改密码(脚本适用)

  • 方法1:通过管道设置密码(部分系统支持–stdin)

    echo "new_password" | sudo passwd --stdin username  # root用户可以不使用sudo
    

    new_password:表示你要设置的新密码
    username:表示要设置的用户

  • 方法2:使用chpasswd命令(更通用)

    echo "username:new_password" | sudo chpasswd  # root用户可以不使用sudo
    

    username:表示要设置的用户
    new_password:表示你要设置的新密码

注意:

  1. 普通用户没有权限修改他人的密码,修改自己的密码需要输入原密码,并且要符合密码难度策略
  2. 管理员可修改任何用户的密码,且不用输入原密码,不用遵守密码难度策略

总结:
通过 man passwd 命令可查看完整文档。注意权限管理,避免安全风险。

5、重要文件目录

5.1 用户账号文件(/etc/passwd)

/etc/passwd 文件用来存放和配置用户相关信息

1、文件内容格式及含义

  • 文件中每一行都是一个账户的基本信息,分别由7个字段组成,每个字段用 : 进行隔开,格式如下:
    在这里插入图片描述
    字段1:用户名称
    字段2:密码占位符"x",密码的明文信息不回直接在这里显示,通过"x"来表示密码
    字段3:用户帐号的UID号,在系统中的唯一身份,相当于身份证号
    字段4:用户的私有组ID
    字段5:用户描述信息,若没有描述信息,则这里为空
    字段6:用户的主目录
    字段7:登录Shell解释器信息,默认为/bin/bash,用于解释用户与系统之间的命令交互

  • 示例:我们通过命令: cat /etc/passwd 打印出文件内容,如下:
    在这里插入图片描述
    这里只展示了文件最后几行内容,可以看到最后一行就是我们创建的用户lisi的账户信息

2、文件的作用

从上面我们了解到了/etc/passwd文件的内容格式,以及各字段的含义。那么这个文件到底起什么作用,文件中的内容又是如何生成的呢?我们接着往下看:

  • 我们知道linux系统一切皆文件,而/etc/passwd文件是用于保存用户账号信息的,由此我们可以知道每当通过useradd命令创建新的用户时,系统就会在/etc/passwd末尾以指定格式追加一行该用户的账户信息,这样用户才算创建了一个新的用户

  • 当我们不使用命令,而是直接进入/etc/passwd文件中修改账户信息时,那么该账户的信息就会被永久修改。例如:我们将/etc/passwd文件中的用户名 lisi 修改为 zhangsan,那么系统中就会出现zhangsan这个用户,而lisi则会删除,新用户zhangsan则会继承lisi的所有身份信息,包括UID、家目录等,因为我们只是修改了用户名

5.2 用户组文件(/etc/group)

/etc/group 文件用于保存组的基本信息,便于管理相同权限的用户

1、文件内容格式及含义

  • 文件中每一行都代表着一个组的基本信息,分别由4个字段组成,每个字段用 : 隔开,如下:
    在这里插入图片描述
    字段1:组的名称
    字段2:密码占位符“x",组也可以进行登录
    字段3:组的ID号,与用户的UID号相同,两者不冲突
    字段4:组内的附属成员,表示该组是user1,user2和user3的附加组

  • 示例:我们通过命令:cat /etc/group 查看文件内容,如下:
    在这里插入图片描述
    这里展示文件最后几行信息,可以看到名称为 lisi 的组,它是在创建用户lisi时默认创建的组

2、 文件的作用

该文件用于保存组的基本信息,可以通过修改该文件来修改组的相关信息,如:组名、uid、组内成员

组的相关注意事项:

  • 用户必须属于一个组
  • 每一个组被分配一个独特的组ID(gid)
  • gid信息保存在/etc/group
  • 每一个用户都有自己的私有组
  • 可以将用户添加到别的组,该组称为用户的附加组
  • 同一个组中的所有用户能共享属于这个组的文件

5.3 用户密码文件(/etc/shadow)

在Linux系统中,/etc/shadow 是一个关键的安全文件,用于存储用户的加密密码及相关密码策略信息。它的存在是为了弥补传统 /etc/passwd 文件的不足(密码以明文或弱加密形式存储),通过更严格的权限控制提升系统安全性。

1、文件内容格式及含义

  • 文件中每一行都代表着一个用户密码的相关信息,由9个字段组成,每个字段用 : 分隔,格式如下:

    username:encryptedpassword:lastchange:minage:maxage:warning:inactive:expire:reserved
    

    字段1: 用户名
    字段2: 加密密码(! 或 * 表示账户被锁定)
    字段3: 上次修改密码的天数(从1970-1-1起算)
    字段4: 密码最短使用天数(0表示可随时修改)
    字段5: 密码最长有效期(99999表示永不过期)
    字段6: 密码过期前警告天数
    字段7: 密码过期后账户宽限期
    字段8: 账户绝对过期日期(YYYY-MM-DD)
    字段9: 保留字段

  • 示例:我们通过命令:cat /etc/shadow 查看文件内容,如下:
    在这里插入图片描述
    这里只展示了文件最后几行内容,可以看到最后一行就是用户 lisi 密码信息

2、文件的作用及注意事项

  1. 存储加密密码
    • 用户密码通过哈希算法(如SHA-512、bcrypt等)加密后存储,无法直接逆向破解。
    • 示例:
      lisi:$6$BGjQ2NVbr7$dP.Q6aCxTu7q9zxhYcTCUJL/SbK341HYXQipgAW6RIUlHCYMK5eG2AFin/8LNCduru8gKNazfLUYBt.al3mjB
      
      其中 $6$ 表示使用SHA-512加密,BGjQ2NVbr7$dP 是随机盐值,后面的内容则为加密后的密码。
  2. 不要手动编辑文件
    • 直接修改可能导致账户无法登录,建议使用 passwd、chage 等工具。
  3. /etc/shadow/etc/passwd 的关系
    • /etc/passwd 存储用户基本信息(UID、GID、Shell等),但密码字段为 x(实际密码在 /etc/shadow 中)。

    • 这种分离设计遵循了最小权限原则,减少密码泄露风险。

通过合理管理 /etc/shadow,可以有效提升系统的账户安全性。

6、其它相关命令介绍及使用

6.1 临时获取管理员权限(sudo)

sudo(Super User DO) 是Linux系统中一个非常重要的命令,它允许普通用户以超级用户(root)或其他用户的身份执行命令。

1、配置用户权限(sudoers文件)

普通用户想要使用sudo命令,需要先对 /etc/sudoers 文件进行一些配置

  1. 编辑sudoers文件
    在root用户下使用 visudo 命令打开sudoers文件(安全且会检查语法):
    visudo
    
  2. 常见配置规则(在sudoers文件末尾加入下面语句)
    • 允许用户执行所有命令:
      username ALL=(ALL:ALL) ALL
      
    • 允许用户免密执行特定命令:
      username ALL=(ALL) NOPASSWD: /usr/bin/apt
      
      username:用户名
      /usr/bin/apt:允许用户使用apt命令,linux中的命令本质上也是一个文件,平时我们使用的命令其实是通过硬/软链接指向/usr/bin目录下的命令文件,因此这里需要输入命令文件的完整路径
    • 允许用户组使用sudo(如sudo组或wheel组),系统默认配置,不需要修改:
      %sudo ALL=(ALL:ALL) ALL   # Ubuntu默认配置
      %wheel ALL=(ALL) ALL      # CentOS/RHEL默认配置
      

示例:/etc/sudoers文件末尾添加下面语句,允许lisi用户可以执行所有命令
在这里插入图片描述

2、基本用法

在上面我们为指定用户配置好/etc/sudoers文件后,该用户就可以使用sudo命令了

  1. 执行单条命令
    在命令前加sudo,输入当前用户的密码(非root密码)即可临时获得root权限:

    sudo useradd username  # 使用root权限创建用户
    
  2. 以其他用户身份执行命令
    使用 -u 选项指定用户:

    sudo -u username ls  # 以username的身份执行命令 ls
    
  3. 常用选项:

    选项说明
    -s启动root的shell环境(保留当前用户环境变量)
    -i模拟root登录(加载root的环境变量和配置文件)
    -l列出当前用户可执行的命令列表
    -k重置密码缓存(下次使用需重新输入密码)
    !!快捷方式:用sudo重新执行上一条命令

    示例:

    sudo -i      # 切换到root用户(需密码)
    sudo !!      # 用sudo执行上一条命令
    

3、高级技巧

  1. 环境变量保留
    默认情况下,sudo会重置环境变量。使用 -E 保留当前用户环境:
    sudo -E command   # command:表示要执行的命令
    
  2. 修改密码缓存时间
    /etc/sudoers文件中设置timestamp_timeout(单位:分钟):
    Defaults timestamp_timeout=30  # 30分钟后需重新输入密码
    
  3. 日志审计
    sudo操作记录在系统日志中(通常位于/var/log/auth.log文件中)。


4、常见问题

  1. 用户不在sudoers文件中

    • 用root用户执行 visudo,添加用户或用户组。

    • 若无法使用root,需通过恢复模式或单用户模式修复。

  2. sudo提示找不到命令

    • 使用绝对路径:sudo /usr/sbin/command
    • 在sudoers中配置secure_path。


5、安全建议

  • 最小权限原则:仅授予必要的命令权限。

  • 避免滥用NOPASSWD:仅在必要时允许免密操作。

  • 定期审计日志:监控可疑的sudo操作。

总结: 通过合理配置sudo,可以在保障系统安全的同时,灵活管理用户权限。

6.2 用户唯一标识符(UID)

在 Linux 系统中,UID(User Identifier,用户标识符) 是用于唯一标识用户的数字标识。每个用户都有一个独立的 UID,系统通过 UID 管理用户权限、资源访问等操作。

1、UID的含义

  1. 核心作用
    UID 是 Linux 用户身份的核心标识,决定了用户的权限范围和资源所有权。系统通过 UID(而非用户名)进行权限验证。
  2. UID 分配规则
    • 0:root 用户的 UID,拥有最高权限。

    • 1~999(系统用户):通常分配给系统服务或守护进程(如 www-data、mysql),不同发行版范围略有差异(如 RHEL/CentOS 用 1-999,Ubuntu 用 1-999 或 1-499)。

    • 1000+(普通用户):普通登录用户的 UID 从此范围分配。

2、UID 的用途

  1. 权限控制

    • 文件/目录的权限通过 UID 和 GID(组标识符)管理。例如,chown user:group file 实际修改的是 UID 和 GID。

    • 进程运行时,以启动用户的 UID 决定其权限(如能否访问特定文件)。

  2. 系统管理

    • root 特权:UID 0 的用户可绕过所有权限限制。

    • 服务运行:系统服务以特定 UID 运行(如 Nginx 以 www-data 用户运行),提高安全性。

  3. 跨系统一致性

    • 在容器或分布式系统中,UID 用于保持用户身份的一致性(如 Docker 容器与宿主机用户映射)。


3、查看用户UID

  1. 查看当前用户

    id -u   # 显示当前用户的 UID
    
  2. 查看指定用户

    id -u username  # 如 id -u root 返回 0
    

4、特殊 UID

  • UID 0root 用户,拥有系统完全控制权。
    ⚠️ 若普通用户 UID 被改为 0,则获得 root 权限(高风险操作!)。

  • UID 65534:通常代表 nobody 用户,用于低权限运行进程。

5、注意事项

  1. 唯一性: 同一系统内 UID 必须唯一,重复可能导致权限混乱。

  2. 系统依赖: ·某些服务依赖特定 UID(如 MySQL 默认使用 UID mysql),随意修改会导致服务故障。

  3. 配置文件:

    • /etc/login.defs:定义 UID 分配范围(如 UID_MIN 1000)。
    • /etc/passwd:存储用户与 UID 的映射关系。

总结:
UID 是 Linux 用户管理的基石,直接影响权限控制和系统安全。合理分配和修改 UID 能优化权限管理,但在操作时需谨慎,避免破坏现有服务或文件权限。

6.3 修改账户属性(usermod)

usermod命令是Linux系统中用于修改用户账户属性的实用工具。系统管理员可以使用它来更改用户的各类设置,如用户组、家目录、登录shell等。

1、基本语法

usermod [选项] 用户名


2、常用选项

  1. 用户组相关

    • -g--gid:修改用户的主组(primary group)
      usermod -g 新主组名 用户名
      
    • -G--groups:修改用户的附加组(supplementary groups)
      usermod -G 组1,组2,组3 用户名
      
    • -a--append:将用户追加到附加组中(不覆盖原有附加组)
      usermod -a -G 组名 用户名
      
  2. 账户信息相关

    • -l--login:修改用户名
      usermod -l 新用户名 旧用户名
      
    • -d--home:修改用户家目录
      usermod -d 新家目录路径 用户名
      
    • -m--move-home:与-d一起使用,移动原家目录内容到新位置
      usermod -d 新家目录路径 -m 用户名
      
    • -s--shell:修改用户默认shell
      usermod -s /bin/bash 用户名
      
  3. 账户状态相关

    • -L--lock:锁定用户账户
      usermod -L 用户名
      
    • -U--unlock:解锁用户账户
      usermod -U 用户名
      
    • -e--expiredate:设置账户过期日期(YYYY-MM-DD格式)
      usermod -e 2023-12-31 用户名
      
  4. 其他选项

    • -u--uid:修改用户UID
      usermod -u 新UID 用户名
      
    • -c--comment:修改用户备注信息(通常是全名)
      usermod -c "张三" zhangsan
      

3、使用示例

  1. 将用户john添加到sudo组中:

    usermod -aG sudo john
    
  2. 修改用户mary的家目录并移动原有文件:

    usermod -d /home/mary_new -m mary
    
  3. 更改用户tom的登录名和家目录:

    usermod -l tom_new -d /home/tom_new -m tom
    
  4. 锁定用户test的账户:

    usermod -L test
    

4、注意事项

  1. 执行usermod命令需要root权限,通常使用sudo

  2. 修改用户属性时,该用户不应处于登录状态,否则可能导致不可预知的问题。

  3. 修改UID时,需要手动更改用户文件的所属权。

  4. 修改用户名不会自动更改家目录名称,需要配合-d-m选项使用。

  5. 某些修改可能需要用户重新登录才能生效。

6.4 删除用户(userdel)


1、userdel 命令的基本用法

语法:userdel [选项] 用户名
userdel 用于删除用户账户及其相关文件(如家目录、邮件池等)。

常用选项:

  • -r:删除用户的同时,删除其家目录和邮件池(通常位于 /home/用户名 和 /var/mail/用户名)。

  • -f:强制删除用户(即使用户已登录或存在未完成的进程)。

2、常用方法示例:

  1. 删除用户但保留家目录:

    userdel username
    

    仅删除用户账户,/home/username 目录会保留。

  2. 删除用户并同时删除家目录:

    userdel -r username
    

    彻底删除用户及其家目录和邮件池。

  3. 强制删除用户(即使该用户已登录):

    userdel -f username
    

    谨慎使用,可能导致数据或进程异常。

3、注意事项

  1. 需要 root 权限:必须使用 sudo 或以 root 用户运行。

  2. 用户正在登录时:若用户当前已登录或存在未结束的进程,直接删除可能失败。可以:

    • 先强制注销用户(pkill -u usernameskill -KILL -u username)。

    • 使用 -f 强制删除(不推荐生产环境使用)。

  3. 关联文件userdel 默认不会删除用户在其他位置创建的文件(如 /var/www/ 下的文件),需手动清理。

  4. 用户组:如果用户是某个组的唯一成员,该组不会被自动删除(需手动用 groupdel 删除)。

6.5 创建用户组(groupadd)

groupadd命令用于在Linux系统中创建新的用户组。

1、基本语法

groupadd [选项] 组名

常用选项:

选项描述
-g GID指定新用户组的组ID (GID)
-o允许创建有重复GID的组
-f 如果组已存在则强制成功退出
-r创建一个系统组 (GID小于1000)
-K KEY=VALUE覆盖/etc/login.defs中的默认值
-p为新组设置加密密码(不常用)


2、常用方法使用示例

  1. 创建基本用户组

    groupadd developers
    
  2. 创建指定GID的用户组

    groupadd -g 1005 testers
    
  3. 创建系统组

    groupadd -r systemgroup
    
  4. 强制创建组(如果已存在则忽略错误)

    groupadd -f existinggroup
    
  5. 创建有密码的组(较少使用)

    groupadd -p encrypted_password securegroup
    

3、注意事项

  1. 通常需要root权限才能执行groupadd命令,所以前面要加sudo

  2. 默认情况下,新组的GID从1000开始(非系统组)

  3. 组信息存储在/etc/group文件中

  4. 可以使用getent group 组名来验证组是否创建成功

创建组后,您可以使用usermod命令将用户添加到新创建的组中。

6.6 删除用户组(groupdel)

groupdel 是 Linux 系统中用于删除用户组的命令。

1、基本语法

groupdel [选项] 组名

常用选项:

  • -f, --force:强制删除组,即使它是某个用户的主组
  • -h, --help:显示帮助信息
  • -R, --root CHROOT_DIR:在指定的 CHROOT_DIR 目录中应用更改

2、常用方法使用示例

  1. 删除普通用户组:

    groupdel developers
    

    这将删除名为 “developers” 的组。

  2. 强制删除组(即使它是某个用户的主组):

    groupdel -f testgroup
    

3、注意事项

  1. 需要 root 权限才能执行此命令,因此通常需要使用 sudo

  2. 不能删除包含用户的组(除非使用 -f 选项):

    • 如果一个组是某个用户的主组(在 /etc/passwd 中指定),默认情况下不能删除

    • 如果一个组是某个用户的附加组(在 /etc/group 中列出),可以删除

  3. 删除组前,建议先检查该组是否存在:

    grep groupname /etc/group
    
  4. 删除组后,所有属于该组的文件将保留其 GID,直到手动更改它们。

4、实际应用场景

# 1、检查组是否存在
grep testgroup /etc/group

# 2、删除组
sudo groupdel testgroup

# 3、验证是否删除成功
grep testgroup /etc/group

使用 groupdel 命令时要谨慎,确保不会影响系统上运行的服务或应用程序。

6.7 管理用户组成员(groupmems)

groupmems是Linux系统中用于管理用户组成员的命令,它允许管理员或组管理员(group administrator)管理一个组的成员列表,而无需root权限(前提是有相应权限)。

1、基本语法

groupmems [选项] [动作]

常用动作:

  • -a, --add USERNAME:将指定用户添加到组中

  • -d, --delete USERNAME:从组中删除指定用户

  • -l, --list:列出组的所有成员

  • -p, --purge:清空组的所有成员

常用选项:

  • -g, --group GROUPNAME:指定要操作的组(默认为调用者的主组)

  • -R, --root CHROOT_DIR:在指定的chroot目录中应用更改

2、常用方法使用示例

  1. 列出当前用户主组的成员

    groupmems -l
    
  2. 列出指定组的成员

    groupmems -g developers -l
    
  3. 添加用户到组

    groupmems -g developers -a johndoe
    
  4. 从组中删除用户

    groupmems -g developers -d johndoe
    
  5. 清空组的所有成员

    groupmems -g developers -p
    

3、注意事项

  1. 只有root用户或组管理员才能使用此命令修改组成员

  2. 如果未指定-g选项,默认操作当前用户的主组

  3. 此命令通常用于管理次要组(secondary groups),而不是主组(primary group

  4. 要成为组管理员,可以使用gpasswd命令设置:

    gpasswd -A username groupname
    

groupmems提供了一种更精细的方式来管理组成员,特别适合需要委派组管理权限的场景。

6.8 管理组密码和组成员(gpasswd)

gpasswd命令是Linux系统中用于管理组密码和组成员的重要工具。它允许管理员控制哪些用户可以成为组的成员或者获得组的管理权限。

1、基本语法

gpasswd [选项] 组名

常用选项:

选项描述
-a 用户名将用户添加到组中
-d 用户名从组中移除用户
-r移除组的密码
-R限制只有组成员才能用newgrp加入该组
-A 用户名,...设置组管理员列表
-M 用户名,...设置组成员列表(会覆盖现有成员)


2、常用方法示例

  1. 将用户添加到组中

    gpasswd -a username groupname
    
  2. 从组中移除用户

    gpasswd -d username groupname
    
  3. 设置组密码

    gpasswd groupname
    

    执行后会提示输入密码

  4. 移除组密码

    gpasswd -r groupname
    
  5. 设置组管理员

    gpasswd -A admin1,admin2 groupname
    
  6. 批量设置组成员(会覆盖现有成员)

    gpasswd -M user1,user2,user3 groupname
    

3、注意事项

  • 只有root用户或组管理员才能使用gpasswd命令

  • 组密码允许非组成员通过newgrp命令临时加入该组

  • 使用-R选项后,即使知道密码,非组成员也无法通过newgrp加入该组

  • 修改组成员后,用户需要重新登录才能使更改生效

通过合理使用gpasswd命令,可以有效地管理Linux系统中的组权限和成员关系。

6.9 临时切换用户组(newgrp)

newgrp命令在Linux系统中用于切换用户的当前组身份,允许用户在不注销的情况下临时切换到其他用户组。

1、基本语法

newgrp [group]

主要功能:

  1. 临时将用户的当前组更改为指定的组

  2. 创建一个新的shell环境,在该环境中用户具有新的组权限

  3. 退出该shell环境后(输入exit或按Ctrl+d),用户将恢复原来的组身份

2、常用方法使用示例

  1. 切换到另一个组:

    newgrp developers
    

    这将把当前用户的组切换为"developers"组

  2. 查看当前组:
    切换后可以使用以下命令验证:

    groups
    

    id -gn
    
  3. 退出新组环境:

    exit # 或 ctrl+d
    

    这将返回到原来的组环境

3、注意事项

  1. 用户必须是要切换组的成员才能使用newgrp命令

  2. 如果组有密码,系统会提示输入密码(除非用户是root或组管理员)

  3. 该命令会启动一个新的shell,所以退出时需要退出这个shell

  4. 环境变量(如HOME, SHELL, USER, LOGNAME等)保持不变

  5. 工作目录保持不变

4、实际应用场景

  • 当用户需要临时访问某个组的文件权限时

  • 当用户需要以不同组身份执行某些命令时

  • 在多组环境中快速切换工作身份

6.10 修改用户组属性(groupmod)

groupmod命令用于修改Linux系统中已存在的用户组信息。

1、基本语法

groupmod [选项] 组名

常用选项:

选项描述
-g GID修改组的GID(组ID)
-n 新组名修改组的名称
-o允许使用重复的GID(通常不推荐)


2、常用方法使用示例

  1. 修改组名(将oldgroup改名为newgroup):

    groupmod -n newgroup oldgroup
    
  2. 修改组ID(将组group1的GID改为1005):

    groupmod -g 1005 group1
    
  3. 同时修改组名和GID:

    groupmod -g 1006 -n newgroup oldgroup
    

3、注意事项

  • 执行groupmod命令需要root权限,所以通常需要加上sudo

  • 修改组名或GID后,与该组相关的文件权限可能需要更新

  • 某些服务如果使用了特定的组名或GID,修改后可能导致服务异常

  • 修改GID时,新GID通常应在1000-60000范围内(系统组通常使用0-999

4、查看修改结果

修改后可以使用以下命令验证:

getent group 组名

grep 组名 /etc/group

6.11 管理用户密码和账户的有效期(chage)

chage 是 Linux 系统中用于管理用户密码过期和账户有效期的命令。它可以设置密码的最后修改日期、密码过期时间、账户失效时间等。

1、基本语法

chage [选项] 用户名

常用选项:

选项描述
-d 天数或日期设置密码最后修改日期(例如 YYYY-MM-DD 或从 1970-1-1 起的天数)。
-E 日期或天数设置账户过期日期(YYYY-MM-DD 或天数),过期后用户无法登录。
-I 天数密码过期后的宽限天数(若未修改密码,账户会被锁定)。
-l列出用户的密码和账户过期信息。
-m 天数密码最短使用天数(在此期间不能修改密码)。
-M 天数密码最长使用天数(到期后必须修改密码)。
-W 天数密码到期前的警告天数(提前提醒用户)。


2、常用方法使用示例

  1. 查看用户的密码有效期信息

    chage -l username
    

    输出示例:
    在这里插入图片描述

  2. 设置密码最长有效期(90 天后过期)

    chage -M 90 username
    
  3. 设置密码最短修改间隔(7 天内不能改密码)

    chage -m 7 username
    
  4. 强制用户下次登录时修改密码

    chage -d 0 username
    
  5. 设置账户过期日期(例如 2025-12-31)

    chage -E 2025-12-31 username
    

    或使用天数(从 1970-1-1 起):

    chage -E $(date -d "2025-12-31" +%s) username
    
  6. 禁用账户过期(设为 -1)

    chage -E -1 username
    
  7. 设置密码到期前 7 天警告

    chage -W 7 username
    

3、注意事项

  • 需要 root 权限 或 sudo 才能修改其他用户的设置。

  • 日期格式可以是 YYYY-MM-DD 或从 1970-1-1 起的天数。

  • 使用 chage -l 可以验证修改后的结果。

4、实际场景示例

目标:创建一个临时账户 tempuser,设置其密码 30 天后过期,并在到期前 5 天提醒用户。

# 创建用户
useradd tempuser
passwd tempuser

# 设置密码策略
chage -M 30 -W 5 -I 7 tempuser

# 验证设置
chage -l tempuser

通过 chage,管理员可以灵活管理用户密码和账户的生命周期,增强系统安全性。

7、创建一个用户的系统工作流程

在linux中创建用户,通常都是使用命令:useradd 用户名 ,那么在运行该命令后,系统在后台是如何工作的呢?我们接着往下看:

创建一个用户:useradd lisi,工作流程如下:

  1. 运行命令后,系统会在/etc/passwd文件中添加用户lisi相关信息,同时在/etc/group文件中添加组的相关信息

    • /etc/passwd文件,如下:
      在这里插入图片描述
    • /etc/group文件,如下:
      在这里插入图片描述
  2. 如果使用passwd命令为用户创建了密码,密码则会以密文的形式保存在/etc/shadow

    • /etc/shadow文件,如下:
      在这里插入图片描述
  3. 默认会为用户创建一个家目录:/home/lisi,并修改家目录的所属人和所属组为lisi,其控制权限也会开放给lisi
    在这里插入图片描述

  4. /etc/skel目录中 .bash 开头的文件复制到 /home/lisi(家目录)中,这些.bash文件是调用解释器工作的脚本文件或程序

    /etc/skel目录中的文件都是隐藏文件,需要使用命令:ls -a 才能显示,如下:
    在这里插入图片描述

总结:
从上面我们了解了使用useradd命令后,系统创建用户的一个完整流程。因此;当我们不使用命令,需要手动创建一个用户时,就必须遵循上述流程,依次完善每个文件内容,才能创建一个可登录、拥有shell环境的用户,缺少任何一个环节,都不能创建出一个完整的用户。

8、知识扩展

8.1 实现任何用户免密码登录(包括root)


1、方法1:通过passwd命令实现免密码登录

passwd -d 用户名

root用户下,通过上述命令可以删除任何用户的密码,包括root,删除密码后,在切换用户时不用输入密码,即可立即登录该用户,若需要恢复密码,重新通过passwd命令设置即可

2、方法2:通过修改/etc/passwd文件实现免密码登录

  • 通过命令:vim /etc/passwd 编辑文件内容,将需要修改的用户那一行的密码占位符 x 删除,这样密码就无法定向到加密文件 /etc/shadow,从而实现免密登录,如下:
    在这里插入图片描述
    将上面lisi用户的密码占位符x删除后,即可实现免密登录lisi用户,同理删除其它用户的x,也可实现免密登录,若想恢复密码登录,同样通过passwd命令重新设置即可,重新设置密码后,/etc/passwd文件中的用户会重新生成密码占位符x

8.2 用户名与主机名的区别?

在Linux系统中,用户名(Username)主机名(Hostname)是两个不同的概念,分别用于标识用户和计算机本身。

1、 用户名(Username)

  • 作用: 标识系统中的用户账户,用于登录、权限管理和资源访问控制。

  • 特点:

    • 每个用户有唯一的用户名(如 root、alice)。

    • 与用户ID(UID)绑定,系统内部通过UID识别用户。

    • 存储在 /etc/passwd 文件中。

    • 用于登录系统(如 ssh username@hostname)。

  • 示例:

    whoami      # 查看当前用户名
    id          # 查看当前用户信息
    

    在这里插入图片描述

2、主机名(Hostname)

  • 作用: 标识网络中的计算机(主机),用于区分不同的设备。

  • 特点:

    • 每台计算机有唯一的主机名(如 localhost、my-pc)。

    • 用于网络通信(如SSH连接、局域网识别)。

    • 存储在 /etc/hostname 文件中,可通过 hostnamectl 命令修改。

    • 通常显示在终端提示符中(如 user@hostname:~$)。

  • 查看和修改主机名:

    • 查看当前主机名

      hostname  # 只显示主机名
      hostnamectl  # 显示主机名、 系统类型、系统ID、系统名称等信息
      cat /etc/hostname  # 查看主机名文件,该文件用于存放主机名
      
    • 修改主机名

      • 临时修改主机名(重启后失效)

        hostname 新主机名   # 运行命令后,重新打开终端,即可显示新的主机名,重启系统后失效,恢复为默认主机名
        
      • 永久修改主机名

        方法1: 使用hostnamectl命令修改

        hostnamectl set-hostname 新主机名  # 重新打开终端即可显示新的主机名,重启后不会失效
        

        方法2: 手动修改/etc/hostname 文件

        vim /etc/hostname   # 用该命令打开文件,修改主机名
        

        如下:修改其中的主机名,保存退出即可,重新打开终端即可显示新的主机名
        在这里插入图片描述

      总结:
      通过上述方法,你可以永久修改 Linux 系统的主机名称。推荐使用 hostnamectl,因为它是最简单且兼容性最好的方式。

3、用户名与主机名的关键区别

特性用户名主机名
用途标识用户标识计算机(主机)
存储位置/etc/passwd/etc/hostname
修改命令usermod、useraddhostnamectl、hostname
网络作用仅本地系统使用局域网/网络通信中可见
显示位置终端提示符(user@部分)终端提示符(@hostname部分)

示例: 从下面可以看到,@前面的是 用户名(root)@后面的是 主机名(localhost)
在这里插入图片描述


总结:

  • 用户名 = 你是谁(用户身份)。

  • 主机名 = 你在哪台机器上(设备身份)。

两者共同构成Linux系统和网络中的唯一标识(如 user@hostname)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盲敲代码的阿豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值