「Linux命令基础」查看用户和用户组状态

用户状态查看基础

了解当前系统用户状态是Linux系统管理的基本功。当多个用户同时登录系统时,管理员需要清楚谁在系统中、他们在做什么以及他们拥有什么权限。这些信息对于系统安全审计和故障排查都至关重要。

系统提供了多种命令来获取用户信息。whoami简单直接,告诉你当前用户的身份;id命令更详细,显示用户UID、GID以及所属的所有组;whow命令则展示当前登录系统的所有用户,包括他们的登录时间和活动状态。掌握这些命令的组合使用,可以全面了解系统用户状态。

用户身份切换实战

使用su切换用户

su命令是切换用户身份的基本工具。 任务要求:以root用户登录进行测试运行,①创建deng用户;②切换到deng用户并加载其环境变量;③查看当前的工作目录;④登出deng用户;⑤不加载环境变量的切换到deng用户;⑥再次查看当前的工作目录

bash 复制代码
useradd deng    # ①创建deng用户
su - deng   # ②切换到deng用户并加载其环境变量
[deng@localhost ~]$ pwd # ③ 查看当前的工作目录
# **运行结果示例**
# /home/deng
[deng@study ~]$ exit    # ④登出deng用户
su deng # ⑤不加载环境变量的切换到deng用户
[deng@study root]$ pwd
# **运行结果示例**
# /root

功能解析

  • su - deng:完整登录到用户 deng 的会话,完整登录到用户 deng 的会话,完整登录到用户 deng 的会话。
  • su deng:完整登录到用户 deng 的会话,只切换用户身份(UID 和 GID),不加载目标用户的配置文件和环境变量,不改变当前工作目录

使用sudo授权特定命令

sudo机制提供了更精细的权限控制,避免直接分享root密码: 任务要求:以root用户登录进行测试运行。①创建lina用户;②授权lina用户无需密码执行useradd命令;③切换到lina用户并加载其环境变量;④添加new_user用户;⑤查看/etc/passwd文件中new_user用户的信息。

bash 复制代码
useradd lina    # ①创建lina用户

# ②授权lina用户无需密码执行useradd命令
visudo
# 按`i`进入编辑模式,将光标移动在文件末尾,添加:
lina ALL=(ALL) NOPASSWD: /usr/sbin/useradd
# 按`Esc`退出编辑模式,输入`:wq`保存并退出文件编辑

su - lina   # ③切换到lina用户并加载其环境变量
[lina@localhost ~]$ sudo useradd new_user   # ④添加new_user用户
grep new_user /etc/passwd  # ⑤查看/etc/passwd文件中new_user用户的信息
# **运行结果示例**
# new_user:x:1002:1002::/home/new_user:/bin/bash

安全实践 :生产环境中应该限制sudo权限仅授予必要的命令,并尽可能指定参数范围。比如/usr/sbin/useradd -g dev*只允许创建dev开头的组用户。

查看用户登录状态

了解当前登录用户情况有助于系统监控: 任务要求:继续上一案例。①查看当前登录信息;②查看详细活动信息;③退出deng账号回到root用户

bash 复制代码
# ①查看当前登录信息
[lina@study ~]$ who
# **运行结果示例**
# root     pts/0        2023-03-15 09:30 (192.168.1.100)
# deng     pts/1        2023-03-15 10:15 (192.168.1.101)

# ②查看详细活动信息
[lina@study ~]$ w
# **运行结果示例**
#  22:03:07 up  1:01,  2 users,  load average: 0.00, 0.01, 0.05
# USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
# root     tty1                      146月25 38days  0.02s  0.02s -bash
# root     pts/0    192.168.226.1    21:21    3.00s  0.03s  0.01s w
[lina@study ~]$ exit    # ③退出deng账号回到root用户

信息解读who命令显示基本的登录会话信息,而w命令额外提供了用户正在执行的命令和系统负载情况,对排查系统性能问题很有帮助。

案例与代码解析

su 的基本用法

任务要求:继续上一案例。①设置deng用户额密码;②切换到deng用户并加载其环境变量;③切换到root用户并加载其环境变量;④显示当前登录的用户;⑤退出root用户;⑥以root身份执行单条命令(不切换用户);⑦切换到deng用户并加载其环境变量;⑧显示当前登录的用户

bash 复制代码
passwd deng # ①设置deng用户额密码
新的 密码:******
重新输入新的 密码:******
su - deng   # ②切换到deng用户并加载其环境变量
su - root   # ③切换到root用户并加载其环境变量
密码:******    # 输入root用户的登录密码
whoami  # ④显示当前登录的用户   # 输出:root
exit               # ⑤退出root用户
# ⑥以root身份执行单条命令(不切换用户)
[deng@study ~]$ su -c "ls /root"
密码:******    # 输入root用户的登录密码    # 输出:anaconda-ks.cfg
[deng@study ~]$ su - deng   # ⑦切换到deng用户并加载其环境变量
密码: ******   # 输入deng用户的密码
[deng@study ~]$ whoami  # ⑧显示当前登录的用户   # 输出:deng

解析

  • su - root:加载 root 的环境变量(如 $PATH)。
  • exit:退出当前用户会话。
  • su -c "命令":直接执行命令后退出,无需手动退出。

sudo 的基本用法与权限配置

任务要求 :继续上一案例。①以root身份执行命令ls -l /root;②切换到root用户并加载其环境变量;③配置deng用户sudo权限;④切换到deng用户并加载其环境变量;⑤以root身份执行命令ls -l /root

bash 复制代码
[deng@study ~]$ sudo ls -l /root    # ①以root身份执行命令`ls -l /root`
[sudo] deng 的密码:******  # 输入deng用户密码,不能执行deng用户①以root身份执行命令没有sudo权
[deng@study ~]$ su - root   # ②切换到root用户并加载其环境变量
密码:******    # root用户的密码

# ③配置deng用户sudo权限
sudo visudo        # 编辑/etc/sudoers文件
# 按`i`进入编辑模式,将光标移动在文件末尾,添加:
deng ALL=(ALL) NOPASSWD:ALL  # 允许demo_user无需密码执行所有命令
# 按`Esc`退出编辑模式,输入`:wq`保存并退出文件编辑

su - deng   # ④切换到deng用户并加载其环境变量
[deng@study ~]$ sudo ls -l /root    # ⑤以root身份执行命令`ls -l /root`  # 输出:-rw-------. 1 root root 1228 8月  26 2021 anaconda-ks.cfg

解析

  • visudo:安全编辑 /etc/sudoers,避免语法错误导致 sudo 不可用。
  • NOPASSWD:ALL:允许用户免密执行命令(需谨慎使用)。

常见问题解决方案

  1. su认证失败

    makefile 复制代码
    su: 认证失败

    解决 :确认目标用户存在且密码正确;检查/etc/shadow中用户密码状态,确保未被锁定;尝试用root用户切换(无需密码)

  2. sudo命令找不到

    bash 复制代码
    sudo: useradd: command not found

    解决 :使用完整路径sudo /usr/sbin/useradd;检查visudo配置中是否指定了正确路径;确认该命令在PATH环境变量中

  3. 权限不足 lina is not in the sudoers file. 解决 :root用户需要先用visudo命令将lina添加到sudoers文件;或临时用su切换到root用户操作

  4. 环境变量错误 ~/.bashrc: Permission denied 解决 :使用su -完全切换用户;检查目标用户家目录权限是否正确(应为755);确认.bashrc文件属主正确

实战练习

理论题

  1. 解释su -su的区别 答案su -会完全模拟目标用户登录,加载其环境变量和工作目录;而su仅切换用户身份,保留原用户的环境设置
  2. 如何配置才能使lina用户无需密码执行/sbin/shutdown命令? 答案 :在sudoers文件中添加lina ALL=(ALL) NOPASSWD: /sbin/shutdown,使用visudo命令编辑确保语法正确
  3. w命令输出中的"JCPU"和"PCPU"分别表示什么? 答案:JCPU是该终端所有进程使用的CPU时间,PCPU是当前活动进程使用的CPU时间

实操题

  1. 当前是root用户,请完成:①切换到用户deng并加载完整环境;②验证当前用户和工作目录;③返回root用户 操作步骤

    bash 复制代码
    su - deng    # ①切换到用户deng并加载完整环境
    whoami && pwd    # ②验证当前用户和工作目录
    exit # ③返回root用户
  2. 当前是root用户,请完成:①创建testuser用户;②允许testuser用户执行useradd、userdel、usermod命令。 操作步骤

    bash 复制代码
    useradd testuser # ①创建testuser用户
    # ②允许testuser用户执行useradd、userdel、usermod命令
    visudo
    # 添加:
    testuser ALL=(ALL) /usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/usermod
  3. 当前是root用户,请完成:①显示当前登录用户;②显示用户活动详情;③显示自己的UID和所有组

    操作步骤

    bash 复制代码
    who  # ①显示当前登录用户
    w    # ②显示用户活动详情
    id   # ③显示自己的UID和所有组

总结

用户状态查看和身份切换是Linux系统管理的日常操作。su命令适合需要完全切换身份的场合,而sudo提供了更精细的临时权限提升。实际工作中,应该遵循最小权限原则,仅授予必要的sudo权限。查看用户状态时,w命令比who提供更多有用信息,特别是在排查系统负载问题时。环境变量问题经常困扰新手,记住su -su的区别能避免很多麻烦。安全无小事,每次授予sudo权限前都应该仔细考虑可能带来的风险。良好的用户权限管理习惯,是维护系统安全的重要保障。

相关推荐
花下的晚风22 分钟前
如何搭建Linux环境下的flink本地集群
linux·flink
RainbowSea40 分钟前
用户中心项目部署上线03
linux·服务器·spring boot
Gss7771 小时前
Vim 编辑器全模式操作指南
linux·编辑器·vim
sagima_sdu1 小时前
银河麒麟安装软件商店方法
linux·运维·服务器
Gene_20224 小时前
Ubuntu 22.04 使用 Issac Gym 进行人形强化学习训练
linux·运维·ubuntu
快乐肚皮4 小时前
Zookeeper学习专栏(十):核心流程剖析之服务启动、请求处理与选举协议
linux·学习·zookeeper·源码
toradexsh5 小时前
Yocto meta-toradex-security layer 使用 TI AM62 安全启动功能
linux·安全·arm·ti·am62
程序员JerrySUN7 小时前
Linux 内核基础统简全解:Kbuild、内存分配和地址映射
java·linux·运维·服务器·嵌入式硬件·缓存·文件系统
努力做小白8 小时前
Linux驱动19 --- FFMPEG
linux·运维·驱动开发·单片机·嵌入式硬件·ffmpeg
果子⌂13 小时前
Kubernetes 服务发布进阶
linux·运维·服务器·云原生·容器·kubernetes·云计算