Linux系统用户信息查看:5种实用命令与安全实践

发布时间:2026/7/17 11:48:22
Linux系统用户信息查看:5种实用命令与安全实践 1. 系统用户信息查看的必要性与场景在Linux系统管理中了解当前登录用户信息是日常运维的基础操作。无论是排查异常登录、统计在线用户还是进行系统维护前的通知掌握这些信息都至关重要。服务器管理员经常需要确认哪些用户正在使用系统用户从哪个终端/IP登录登录时间和持续时长用户正在执行的进程这些信息能帮助我们判断是否存在异常登录行为或者在系统维护前通知活跃用户保存工作。下面介绍5种最实用的查看方法涵盖不同场景下的需求。2. 基础命令w与who2.1 w命令最全面的用户活动概览w命令是我日常使用频率最高的用户监控工具。执行简单的w命令你会看到类似这样的输出10:30:45 up 15 days, 3:12, 3 users, load average: 0.08, 0.03, 0.01 USER TTY FROM LOGIN IDLE JCPU PCPU WHAT root pts/0 192.168.1.100 09:15 5.00s 0.05s 0.00s w user1 pts/1 203.0.113.45 10:20 1:15 0.10s 0.10s -bash user2 pts/2 198.51.100.22 10:25 0.00s 0.20s 0.15s top输出分为两部分首行显示系统运行时间、用户数和负载情况表格详细列出每个用户登录终端TTY来源IPFROM登录时间LOGIN空闲时间IDLE进程CPU时间JCPU/PCPU当前命令WHAT提示w命令的FROM字段特别有用当发现未知IP时可以立即采取安全措施。2.2 who命令简洁的用户登录列表相比w命令who的输出更为简洁root pts/0 2023-08-15 09:15 (192.168.1.100) user1 pts/1 2023-08-15 10:20 (203.0.113.45) user2 pts/2 2023-08-15 10:25 (198.51.100.22)关键字段包括用户名终端设备登录时间来源IP括号内who命令适合快速查看当前登录用户特别是在脚本中处理时更为方便。我常用who | wc -l来统计当前登录用户数。3. 历史登录记录查询3.1 last命令完整的登录历史last命令从/var/log/wtmp文件读取历史登录记录显示所有用户的登录/登出历史user1 pts/0 192.168.1.100 Tue Aug 15 09:15 still logged in user2 pts/1 203.0.113.45 Tue Aug 15 10:20 - 10:25 (00:05) root pts/2 198.51.100.22 Mon Aug 14 15:30 - 17:45 (02:15)每行记录包含用户名终端来源IP登录时间登出时间或still logged in会话时长注意/var/log/wtmp会轮转归档较旧的记录可能被压缩为wtmp.1.gz等格式需要用last -f /var/log/wtmp.1查看。3.2 lastlog命令用户最后登录时间lastlog报告所有用户的最后一次登录情况Username Port From Latest root pts/0 192.168.1.100 Tue Aug 15 09:15:01 0800 2023 user1 pts/1 203.0.113.45 Tue Aug 15 10:20:22 0800 2023 user2 pts/2 198.51.100.22 Tue Aug 15 10:25:15 0800 2023 nobody **Never logged in**这个命令特别适合检查长期未登录的账户安全审计确认服务账户是否被误用如nobody统计用户活跃度4. 进阶技巧与实用组合4.1 查看特定用户的活动组合使用grep过滤特定用户w | grep username last | grep username4.2 统计登录用户数who | wc -l # 当前登录用户数 last | grep still logged in | wc -l # 另一种统计方式4.3 检测异常登录这个脚本可以检查非常用IP的登录#!/bin/bash NORMAL_IPS192.168.1. 10.0.0. last | awk {print $3} | grep -E [0-9]\.[0-9]\.[0-9]\.[0-9] | sort | uniq | while read ip; do match0 for range in $NORMAL_IPS; do [[ $ip $range* ]] match1 done [ $match -eq 0 ] echo 异常IP登录: $ip done5. 用户信息查看的安全实践5.1 日志文件权限管理关键日志文件/var/run/utmp (当前登录信息)/var/log/wtmp (历史登录记录)/var/log/btmp (失败登录尝试)建议权限设置chmod 644 /var/log/wtmp chmod 600 /var/log/btmp chown root:utmp /var/run/utmp5.2 监控用户登录的实用方法设置登录提醒# 在/etc/profile.d/login-alert.sh添加 echo 用户 $(whoami) 从 $(echo $SSH_CONNECTION | awk {print $1}) 登录到 $(hostname) 于 $(date) | \ mail -s 登录提醒 adminexample.com使用fail2ban防御暴力破解# /etc/fail2ban/jail.local [sshd] enabled true maxretry 35.3 用户会话管理技巧强制注销用户pkill -KILL -u username # 强制终止用户所有进程 skill -KILL -t pts/1 # 终止特定终端会话查看用户进程pgrep -u username # 列出用户所有进程ID ps -u username # 显示用户进程详情6. 常见问题排查6.1 命令显示不完整或异常可能原因日志文件被轮转使用last -f /var/log/wtmp.1查看归档日志权限不足需要root或utmp组权限读取某些文件日志服务未运行检查syslog/rsyslog服务状态6.2 如何清除特定用户的登录记录注意修改系统日志涉及安全审计应谨慎操作使用utmpdump工具编辑日志utmpdump /var/log/wtmp wtmp.txt # 编辑文件后 utmpdump -r wtmp.txt /var/log/wtmp对于当前登录记录# 清除特定终端记录 echo /var/run/utmp6.3 用户登录时间显示异常可能原因及解决时区不一致检查/etc/timezone和/etc/localtime系统时间不同步配置ntp服务日志文件损坏尝试从备份恢复7. 扩展应用场景7.1 自动化监控脚本示例每日登录报告脚本#!/bin/bash REPORT/tmp/login-report-$(date %F).txt echo 每日登录统计 $REPORT echo 当前登录用户: $REPORT w $REPORT echo -e \n 最近登录 $REPORT last -n 20 $REPORT echo -e \n 失败登录尝试 $REPORT lastb -n 10 $REPORT mail -s 每日登录报告 $(hostname) adminexample.com $REPORT7.2 结合其他系统信息获取完整用户会话信息for user in $(who | awk {print $1} | sort | uniq); do echo 用户: $user echo 登录IP: $(who | grep $user | awk {print $5}) echo 进程数: $(pgrep -u $user | wc -l) echo CPU使用: $(ps -u $user -o %cpu --no-headers | awk {sum$1} END {print sum})% echo 内存使用: $(ps -u $user -o %mem --no-headers | awk {sum$1} END {print sum})% echo ----- done7.3 安全加固建议限制root直接登录# /etc/ssh/sshd_config PermitRootLogin no设置登录超时# /etc/profile export TMOUT1800 # 30分钟无操作自动注销监控敏感账户# 每天检查root登录 last root | mail -s Root登录记录 adminexample.com