7-linux命令-用户管理

大纲

操作类型 命令示例 功能描述 关键选项说明
创建用户组 groupadd -g 1001 groupname 创建指定 GID 的用户组 -g 指定组 ID
创建用户 useradd -m -s /bin/bash username 创建用户并自动生成家目录,指定登录 Shell -m 创建家目录,-s 指定 Shell
设置密码 passwd username 为用户设置密码(需交互输入) 无选项直接修改,-l 锁定用户
修改用户信息 usermod -G group1,group2 username 将用户添加到附加组 -G 指定附加组,-a 保留原组
删除用户 userdel -r username 删除用户并同时删除家目录及邮箱 -r 递归删除用户数据
用户切换 su 用户 切换用户 -
用户权限 sudo 权限临时提升与精细控制

groupadd

  • 参数

    参数 作用
    -g 指定组ID(GID),需唯一(除非配合-o
    -r 创建系统组,GID默认小于500
    -o 允许GID不唯一
    -f 若组已存在,强制退出且不报错
  • 示例

    • 创建指定GID的普通组

      csharp 复制代码
      [root@localhost ~]# groupadd -g 1000 testgroup 
      # 作用:创建名为testgroup的组,GID设为1000
    • 创建系统组

      csharp 复制代码
      [root@localhost ~]# groupadd -r sysgroup 
      # 作用:创建系统组sysgroup,GID自动分配且小于500
  • 注意事项

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

      makefile 复制代码
      [root@localhost ~]# cat /etc/group
      格式为"组名:密码:GID:成员"
      testgroup:x:1000:
    • 避免使用-o随意创建重复GID,可能导致权限冲突。

useradd

  • 参数

    参数 功能描述 示例用法
    -g 指定用户主组(名称或ID) useradd -g developers john
    -d 设置用户主目录路径 useradd -d /home/john john
    -m 自动创建主目录(默认不创建) useradd -m john
    -s 指定登录shell(如/bin/bash) useradd -s /bin/bash john
    -r 创建系统用户(UID < 1000) useradd -r mysql
    -u 手动指定用户UID(需唯一) useradd -u 1005 john
    -G 添加用户到附加组(逗号分隔) useradd -G sudo,admins john
  • 示例

    • 创建普通用户并指定主组和家目录

      arduino 复制代码
      [root@localhost ~]# useradd -g testgroup -d /home/xiong -m xiong
      说明:创建用户xiong,属组为testgroup,主目录为/home/xiong(-m确保目录自动创建
    • 直接创建用户

      ini 复制代码
      # 啥都不指定,会自动创建主目录/home/xiong2,属组xiong2
      [root@localhost ~]# useradd xiong2
      [root@localhost ~]# ls /home/
      xiong  xiong2
      [root@localhost ~]# ls /home/xiong2
      [root@localhost ~]# id xiong
      uid=1000(xiong) gid=1000(testgroup) 组=1000(testgroup)
      [root@localhost ~]# id xiong2
      uid=1001(xiong2) gid=1001(xiong2) 组=1001(xiong2)
      [root@localhost ~]# tail -n 1 /etc/group
      xiong2:x:1001:
    • 创建系统用户并禁用登录shell

      ini 复制代码
      # 创建个 系统用户xiong3 , 不允许登陆 
      [root@localhost ~]# useradd -r -s /sbin/nologin xiong3
      [root@localhost ~]# id xiong3
      uid=997(xiong3) gid=993(xiong3) 组=993(xiong3)

passwd

  • 参数

    参数 功能描述 示例 权限要求
    无参数 修改当前用户密码 passwd 普通用户
    USERNAME 修改指定用户密码 passwd linuxtechi root
    -l 锁定用户账户(密码前加! passwd -l linuxtechi root
    -u 解锁用户账户 passwd -u linuxtechi root
    -d 删除用户密码(登录无需密码) passwd -d linuxtechi root
    -e 强制用户下次登录改密码 passwd -e linuxtechi root
    -S 显示用户密码状态 passwd -S linuxtechi root
    -x DAYS 设置密码最长有效期(天) passwd -x 90 linuxtechi root
    -n DAYS 设置密码最短修改间隔(天) passwd -n 7 linuxtechi root
    -w DAYS 设置密码过期前警告天数 passwd -w 7 linuxtechi root
  • 示例

    • 修改密码

      csharp 复制代码
      [root@localhost ~]# passwd xiong2    <-- 直接输
      更改用户 xiong2 的密码 。
      新的 密码:
      无效的密码: 密码少于 8 个字符
      重新输入新的 密码:
      passwd:所有的身份验证令牌已经成功更新。
    • 单用户非交互修改(passwd + echo)

      sql 复制代码
      [root@localhost ~]# echo "xiong" | passwd --stdin xiong3
      更改用户 xiong3 的密码 。
      passwd:所有的身份验证令牌已经成功更新。
    • 多用户批量修改(chpasswd + echo)

      swift 复制代码
      命令:echo -e "user1:pass1\nuser2:pass2" | chpasswd
      (-e启用转义符\n分隔用户)
      
      [root@localhost ~]# echo -e "xiong2:passwd1\xiong3:passwd1" | chpasswd 

usermod

  • 参数

    参数 功能描述 示例命令
    -l 修改用户名 usermod -l newname oldname
    -g 设置主要组 usermod -g staff user1
    -G 添加附加组 usermod -G sudo,dev user1
    -d 修改家目录 usermod -d /newhome user1
    -s 更改登录 Shell usermod -s /bin/zsh user1
    -L/-U 锁定/解锁账号 usermod -L user1 usermod -U user1
    -u 修改 UID usermod -u 1005 user1
  • 示例

    • 修改用户名

      ini 复制代码
      [root@localhost ~]# groupadd -g 1010 user1
      [root@localhost ~]# useradd -g 1010 -u 1010 user1
      
      [root@localhost ~]# usermod -l usern1 user1
      [root@localhost ~]# id usern1
      uid=1010(usern1) gid=1010(user1) 组=1010(user1)
      
      # 注意:需确保用户未登录,且手动更新家目录和邮件地址 
    • 管理用户组

      • 设主要组:usermod -g developers user1
      • 追加附加组:usermod -aG sudo user1(必须加 -a 避免覆盖原附加组)。

userdel

  • 参数

    参数 功能描述 注意事项
    -r 删除用户、家目录及邮件池 避免误删重要文件,建议先备份
    -f 强制删除用户(即使用户已登录) 可能导致系统状态不一致,谨慎使用
  • 仅删除用户账号

    csharp 复制代码
    [root@localhost ~]# userdel xiong2
    [root@localhost ~]# ls /home/
    user1  xiong  xiong2    <--  注意这样删除会保留/home/xiong2和/var/spool/mail/xiong2
  • 删除用户及家目录

    csharp 复制代码
    [root@localhost ~]# useradd xiogn2
    user1  xiogn2  xiong  xiong2
    [root@localhost ~]# userdel -r xiogn2
    [root@localhost ~]# ls /home/
    user1  xiong  xiong2  <-- /home/xiong2和/var/spool/mail/xiong2都会删除
  • 强制删除已登录用户

    csharp 复制代码
    [root@localhost ~]#  sudo userdel -f xiong4 
    # 即使 xiong4 当前在线,仍强制删除(但不终止其进程

su

  • 参数

    参数 功能描述 适用场景
    --l 切换用户并加载目标用户完整环境(HOME、PATH等),等同于重新登录 需完整权限操作时
    -c <命令> 以目标用户身份执行单个命令后返回原用户 临时执行高权限命令
    -s <shell> 指定切换后使用的shell环境(需目标用户shell允许) 调试或特殊shell需求
    -p-m 保留当前用户环境变量(HOME、PATH等不变) 需临时权限但保持当前环境时
  • 示例

    • 普通用户切换至root用户(完整环境)

      csharp 复制代码
      [root@localhost ~]# su - root  
      # 输入root密码后切换,工作目录变为/root,环境变量更新为root的配置 
    • 以root身份执行单命令

      csharp 复制代码
      [root@localhost ~]# su -c "ls -l " root  
      # 执行更新命令后自动返回原用户 

sudo

sudo(superuser do)的核心价值在于权限临时提升精细控制 ,无需暴露root密码即可让普通用户执行特定管理命令。其权限基于/etc/sudoers配置

  • 参数

    选项 功能描述 示例
    -l 列出当前用户可执行的sudo命令 sudo -l
    -u 指定执行命令的用户(默认root) sudo -u tom whoami
    -i 启动root登录shell(执行多个命令) sudo -i
    -v 延长sudo会话有效期(无需执行命令) sudo -v
    -k 立即终止当前sudo会话 sudo -k
  • 示例

    • 完整示例

      ruby 复制代码
      # 1. 使用root创建用户
      [root@localhost root]# useradd xiong4
      
      # 2. 赋予 xiong4 用户root权限
      [root@localhost root]# vim /etc/sudoers
      root    ALL=(ALL)       ALL
      xiong4 ALL=(ALL)       ALL    <-- xiong4设置为root权限
      # 保存
      
      # 3. 切换到 xiong4 用户登陆  
      [xiong4@localhost ~]$ sudo -l
      用户 xiong4 可以在 localhost 上运行以下命令:
          (ALL) ALL
      
      # 4. 每次执行sodu命令都需要输入用户密码才能执行,那怎么可以做到执行sudo不输入密码呢?
      xiong4  ALL=(ALL)       NOPASSWD:/usr/sbin/useradd

扩展

用户和组配置文件

  • /etc/passwd:用户及其属性信息(名称、UID、主组ID等)

    如root​ : x:0:0:root:/root:/bin/bash

    passwd文件 说明
    login name 登录用名(xiong)
    passwd 密码 (x)
    UID 用户身份编号 (1000)
    GID 登录默认所在组编号 (1000)
    GECOS 用户全名或注释
    home directory 用户主目录 (/home/xiong)
    shell 用户默认使用shell (/bin/bash)
  • /etc/group:组及其属性信息

  • /etc/shadow:用户密码及其相关属性

  • /etc/gshadow:组密码及其相关属性

相关推荐
江公望3 小时前
磁盘分区方案GPT和MBR的区别浅谈
linux
---学无止境---4 小时前
Linux中动态修改页面映射属性函数change_page_attr的实现
linux
gfdgd xi4 小时前
GXDE OS 25.2.1 更新了!引入 dtk6,修复系统 bug 若干
linux·运维·ubuntu·操作系统·bug·移植·桌面
qing222222224 小时前
Ubuntu:设置程序开机自启动
linux·运维·ubuntu
Eiceblue5 小时前
使用 Python 向 PDF 添加附件与附件注释
linux·开发语言·vscode·python·pdf
scilwb5 小时前
Ubuntu 22.04 搭建 ROS 2 Humble 环境与创建节点教程
linux
橘子135 小时前
Linux线程同步(四)
linux·c++
Xの哲學5 小时前
Linux Netlink全面解析:从原理到实践
linux·网络·算法·架构·边缘计算
yolo_guo6 小时前
opencv 学习: 04 通过ROI处理图片局部数据,以添加水印为例
linux·c++·opencv