linux ftpwho命令

Linux ftpwho命令用于显示当前连接到FTP服务器的用户信息和状态,类似于who命令但专门用于FTP服务。

提示: ftpwho命令通常与wu-ftpd或类似的FTP服务器一起使用,用于实时监控FTP服务器的连接活动。

语法格式

ftpwho [选项]

常用选项

选项 说明
-v 显示详细信息
-V 显示版本信息
-h 显示帮助信息
--help 显示帮助信息

使用示例

示例1:基本使用 - 查看FTP连接

# 查看当前FTP服务器上的所有连接
ftpwho

# 输出示例:
# Service class all:
# 10477 ?        S       0:00 ftpd: 192.168.1.100: anonymous/alice@example.com: IDLE
# 10478 ?        S       0:00 ftpd: 192.168.1.101: bob: RETR file.txt
# -
#    2 users (no maximum)

# 解释:
# 第一列:进程ID
# 第二列:终端
# 第三列:状态
# 第四列:运行时间
# 第五列:连接详细信息(客户端IP、用户名、当前操作)

示例2:显示详细信息

# 显示详细的连接信息
ftpwho -v

# 输出可能包含更多字段,如:
# - 文件传输进度
# - 连接时间
# - 数据传输速率
# - 命令历史

示例3:监控特定FTP服务器

# 如果系统运行多个FTP服务器实例,可能需要指定配置文件
ftpwho -c /etc/ftpaccess

# 或指定PID文件
ftpwho -p /var/run/ftpd.pid

示例4:在脚本中统计连接数

#!/bin/bash
# 统计FTP服务器当前连接数的脚本

# 获取连接总数
TOTAL_CONNECTIONS=$(ftpwho | grep -c "^[0-9]")

# 获取匿名连接数
ANONYMOUS_CONNECTIONS=$(ftpwho | grep -c "anonymous")

# 获取活跃传输数
ACTIVE_TRANSFERS=$(ftpwho | grep -c -E "(RETR|STOR|STOU|APPE)")

echo "FTP连接统计报告"
echo "================="
echo "总连接数: $TOTAL_CONNECTIONS"
echo "匿名连接: $ANONYMOUS_CONNECTIONS"
echo "活跃传输: $ACTIVE_TRANSFERS"
echo "生成时间: $(date)"

# 如果连接数超过阈值,发送警告
MAX_CONNECTIONS=50
if [ "$TOTAL_CONNECTIONS" -gt "$MAX_CONNECTIONS" ]; then
    echo "警告:连接数超过阈值 ($MAX_CONNECTIONS)!"
    # 这里可以添加发送邮件或其他通知的代码
fi

示例5:监控特定用户的连接

# 查找特定用户的FTP连接
ftpwho | grep "alice"

# 监控多个用户
ftpwho | grep -E "(alice|bob|charlie)"

# 排除匿名用户
ftpwho | grep -v "anonymous"

示例6:实时监控FTP活动

# 每5秒刷新一次FTP连接状态
watch -n 5 ftpwho

# 使用循环实现类似效果
while true; do
    clear
    echo "FTP连接监控 - $(date)"
    echo "=========================="
    ftpwho
    sleep 5
done

示例7:结合其他命令进行分析

# 查找占用资源最多的FTP连接
ftpwho | sort -k4 -rn | head -5

# 统计每个IP的连接数
ftpwho | awk '{print $5}' | awk -F: '{print $2}' | sort | uniq -c | sort -rn

# 生成连接时间报告
ftpwho | awk '{print $4}' | awk -F: '{print $1*60+$2}' | sort -n | head -1

ftpwho输出字段说明

字段 说明 示例
PID 进程ID 10477
TTY 终端设备 ?(无终端)
STAT 进程状态
S: 休眠
R: 运行
Z: 僵尸
S
TIME CPU时间(分:秒) 0:00
COMMAND 连接详细信息 ftpd: 192.168.1.100: anonymous/alice@example.com: IDLE

COMMAND字段详细解析

ftpd: [客户端IP]: [用户名/认证信息]: [当前状态]

# 各部分说明:
# ftpd:            FTP守护进程
# 客户端IP:        连接客户端的IP地址
# 用户名:          登录用户名(anonymous表示匿名用户)
# 认证信息:        匿名用户的邮箱或其他认证信息
# 当前状态:        当前操作状态,常见值:
#   - IDLE:        空闲
#   - RETR:        下载文件
#   - STOR:        上传文件
#   - STOU:        唯一文件名上传
#   - APPE:        追加到文件
#   - LIST:        列出目录
#   - NLST:        名称列表
#   - RNFR/RNTO:   重命名
#   - DELE:        删除文件
#   - MKD:         创建目录
#   - RMD:         删除目录
注意:
  • ftpwho命令需要相应的权限才能查看FTP服务器进程信息
  • 不同FTP服务器(wu-ftpd、vsftpd、proftpd)的输出格式可能略有不同
  • 如果FTP服务器未运行或没有活动连接,ftpwho可能不显示任何输出
  • ftpwho命令通常与wu-ftpd一起使用,其他FTP服务器可能有不同的监控工具
  • 对于现代FTP服务器,可能需要使用其他工具(如ftpcount或服务器特定工具)
  • 输出中的进程状态可能因系统而异
  • 监控FTP服务器时应考虑性能影响,特别是在高负载时

ftpwho与相关命令的配合

ftpcount命令

# ftpcount显示连接数统计(通常与ftpwho一起安装)
ftpcount

# 输出示例:
# Service class all                   -    2 users (no maximum)
# 显示当前连接数和最大允许连接数

系统进程管理命令

# 使用ps命令查看FTP进程
ps aux | grep ftpd

# 使用netstat查看FTP连接
netstat -tpn | grep :21

# 使用ss命令(现代替代netstat)
ss -tpn | grep :21

FTP服务器日志

# 查看FTP服务器日志(位置因服务器而异)
tail -f /var/log/xferlog          # 传输日志
tail -f /var/log/vsftpd.log       # vsftpd日志
tail -f /var/log/proftpd/access.log  # proftpd访问日志

安装和配置

安装wu-ftpd和ftpwho

# Ubuntu/Debian系统
sudo apt-get update
sudo apt-get install wu-ftpd

# CentOS/RHEL系统(可能需要EPEL仓库)
sudo yum install epel-release
sudo yum install wu-ftpd

# 验证安装
which ftpwho
ftpwho --version

配置wu-ftpd以启用详细日志

# 编辑wu-ftpd配置文件
sudo nano /etc/wu-ftpd/ftpaccess

# 确保以下配置启用(示例)
log commands real
log transfers anonymous,real inbound,outbound
log syslog
log security

# 重启FTP服务器使配置生效
sudo systemctl restart wu-ftpd

故障排除

问题:ftpwho无输出

可能原因: FTP服务器未运行或没有活动连接

解决: 检查FTP服务器状态

# 检查FTP服务器是否运行
systemctl status wu-ftpd
# 或检查进程
ps aux | grep ftpd
问题:权限被拒绝

解决: 使用sudo或以root用户运行

# 使用sudo运行
sudo ftpwho
# 或切换到root用户
sudo su -
ftpwho
问题:输出格式异常

可能原因: FTP服务器类型不同

解决: 查看对应FTP服务器的文档

# 检查FTP服务器类型
ps aux | grep ftpd | grep -v grep
# 根据服务器类型使用相应的监控工具
问题:命令未找到

解决: 安装wu-ftpd软件包

# Ubuntu/Debian
sudo apt-get install wu-ftpd
# CentOS/RHEL
sudo yum install wu-ftpd

现代替代方案

对于现代FTP服务器,可能有不同的监控工具:

  • vsftpd: 使用systemctl status vsftpd和日志文件
  • proftpd: 使用ftptopftpwho(proftpd版本)
  • pure-ftpd: 使用pure-ftpwho
  • 通用方法: 使用netstatsslsof查看连接
  • 日志分析: 分析FTP服务器日志文件
  • Web界面: 许多FTP服务器提供Web管理界面

使用通用工具监控FTP连接

# 使用netstat查看FTP连接
netstat -tpn | grep :21

# 使用ss查看FTP连接
ss -tpn | grep :21

# 使用lsof查看FTP相关进程
lsof -i :21

# 查看FTP数据传输端口(被动模式)
netstat -tpn | grep -E ':(20|1024-65535)' | grep ftp

安全注意事项

  • 定期监控FTP服务器连接,检查异常活动
  • 限制匿名用户的权限和连接数
  • 使用防火墙限制FTP访问来源
  • 定期审查FTP服务器日志
  • 禁用不需要的FTP服务
  • 考虑使用SFTP替代FTP以提高安全性

相关命令

  • ftpcount - 显示FTP服务器连接计数
  • ftpshut - 计划关闭FTP服务器
  • ftprestart - 重启FTP服务器
  • who - 显示当前登录系统的用户
  • w - 显示当前登录用户及其活动
  • last - 显示用户登录历史