Linux rwho命令详解

rwho 命令用于显示局域网中所有运行了 rwhod 守护进程的主机上当前登录用户的信息。它类似于 who 命令,但可以提供整个局域网的登录用户概览。

注意:由于安全考虑,现代Linux系统中rwho服务默认不启用。它使用UDP广播,可能存在安全隐患。

1. 安装与配置

1.1 安装rwhod服务

大多数Linux发行版需要手动安装rwhod包:

Debian/Ubuntu系统:

sudo apt-get update
sudo apt-get install rwho

RHEL/CentOS/Fedora系统:

# CentOS/RHEL 7及以下
sudo yum install rwho

# CentOS/RHEL 8及以上
sudo dnf install rwho

# Fedora
sudo dnf install rwho

1.2 配置和启动rwhod服务

启动rwhod服务:

# 手动启动
sudo systemctl start rwhod

# 设置开机自启
sudo systemctl enable rwhod

# 检查服务状态
sudo systemctl status rwhod

配置防火墙(如果需要):

# 开放UDP 513端口(rwhod默认端口)
sudo firewall-cmd --add-port=513/udp --permanent
sudo firewall-cmd --reload

2. 命令语法

rwho [选项]

3. 命令选项

选项 说明
-a 显示所有用户,包括闲置时间超过1小时的用户
无选项 仅显示在过去1小时内有活动的用户

4. 基本使用示例

4.1 查看当前局域网活动用户

rwho

示例输出:

alice    server1:console     Jan 12 09:30  5:30
bob      workstation2:pts/0  Jan 12 10:15  0:45
charlie  laptop3:tty1        Jan 12 08:00  7:00
输出字段说明:
  • 第一列:登录用户名
  • 第二列:主机名和终端号
  • 第三列:登录日期和时间
  • 第四列:用户登录时长(小时:分钟)

4.2 显示所有用户(包括闲置用户)

rwho -a

显示局域网中所有登录用户,无论是否闲置超过1小时。

5. 实际应用场景

场景1:监控小型办公网络

管理员可以定期运行rwho命令查看哪些用户在线:

# 每日上午9点查看登录情况
rwho

# 结合grep筛选特定用户
rwho | grep alice

场景2:检查服务器负载分布

# 查看哪些服务器上有用户登录
rwho | awk '{print $2}' | cut -d: -f1 | sort | uniq -c

# 按主机统计用户数
echo "=== 各主机登录用户统计 ==="
rwho | awk '{host=$2; sub(/:.*/, "", host); count[host]++} END {for (h in count) print h ": " count[h] " users"}'

场景3:自动通知功能

#!/bin/bash
# 监控特定用户登录并发送通知
TARGET_USER="admin"

while true; do
    if rwho | grep -q "^$TARGET_USER "; then
        echo "$(date): $TARGET_USER 已登录到局域网" | mail -s "用户登录通知" admin@example.com
        break
    fi
    sleep 300  # 每5分钟检查一次
done

6. 数据文件和目录

rwho命令依赖以下文件和目录:

文件/目录 用途
/var/spool/rwho/ 存储各主机状态信息的目录
/var/spool/rwho/rwhod.* 各主机的状态数据文件
/usr/sbin/rwhod rwhod守护进程
/usr/bin/rwho rwho客户端程序

7. 相关命令对比

命令 功能 范围 特点
rwho 查看局域网用户 整个局域网 需要rwhod服务支持
who 查看本地登录用户 本地主机 默认可用,无需额外服务
w 查看本地用户及进程 本地主机 显示更详细信息
finger 查看用户详细信息 本地/远程 可查看用户个人信息
last 查看登录历史 本地主机 历史记录查询

示例对比输出:

# rwho - 局域网用户
$ rwho
john     server1:console     Jan 12 09:00  4:30

# who - 本地用户
$ who
john     tty1         2024-01-12 09:00
jane     pts/0        2024-01-12 10:15

# w - 详细用户信息
$ w
 10:25:15 up 4:30,  2 users,  load average: 0.15, 0.10, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
john     tty1     -                09:00    4:30m  0.10s  0.10s -bash
jane     pts/0    192.168.1.100    10:15    0.00s  0.05s  0.00s w

8. 安全注意事项

安全警告

rwho服务存在以下安全隐患:

  1. 信息泄露:向局域网广播用户登录信息
  2. 无认证:任何主机都可以发送rwho数据包
  3. 拒绝服务:可能被滥用于伪造大量用户数据
  4. 网络流量:定期广播会产生网络流量

8.1 替代方案

考虑使用更安全的替代方案:

# 1. 使用SSH + who组合
ssh user@remote-host who

# 2. 使用LDAP或Active Directory查询
# 3. 使用专门的监控系统(如Zabbix、Nagios)
# 4. 使用自定义脚本(基于lastlog或wtmp)

8.2 安全配置建议

# 1. 限制广播范围(如果支持)
# 编辑 /etc/default/rwhod 或类似配置文件

# 2. 使用防火墙限制访问
sudo firewall-cmd --remove-port=513/udp --permanent
sudo firewall-cmd --reload

# 3. 仅在内网可信环境中使用
# 4. 定期监控rwhod日志

9. 故障排除

问题1:rwho命令无输出

可能的原因和解决方法:

# 1. 检查rwhod服务是否运行
sudo systemctl status rwhod

# 2. 检查网络连接和广播设置
ping -c 3 192.168.1.255  # 替换为您的广播地址

# 3. 检查防火墙设置
sudo iptables -L | grep 513

# 4. 检查数据文件
ls -la /var/spool/rwho/

问题2:看不到其他主机的用户

# 确保所有主机都运行了rwhod服务
# 检查主机间的时间同步
date
sudo ntpdate -u pool.ntp.org

# 检查网络广播是否正常工作
sudo tcpdump -i eth0 udp port 513 -vv

10. 现代化替代工具

推荐替代方案
1. Ansible Ad-hoc命令
# 在多台主机上执行who命令
ansible all -i inventory.ini -m command -a "who"
2. ClusterSSH
# 同时查看多台主机
cssh server1 server2 server3
# 然后在每个窗口执行who命令
3. 自定义监控脚本
#!/bin/bash
# 多主机用户监控脚本
HOSTS="server1 server2 server3"

for host in $HOSTS; do
    echo "=== $host ==="
    ssh $host "echo -n 'Users: '; who | wc -l"
done

使用建议

  • 仅在小规模、可信的局域网环境中使用rwho
  • 考虑使用SSH+脚本组合作为替代方案
  • 定期检查rwhod服务日志
  • 在生产环境中使用前进行安全评估
  • 对于大型网络,考虑使用专业的监控系统