/etc/services文件用于标准化记录网络服务名、端口号及协议,供应用程序查表解析,不控制服务运行或端口开放;其核心作用是提供权威映射参考,辅助配置核查、异常排查与安全审计。

/etc/services 文件本身不决定服务是否运行,也不控制端口开放状态,但它确实是网络基础中唯一标准化的本地服务名与端口/协议映射参考源。要“精准核对系统内置服务与网络端口的映射规范”,关键不是依赖它做管控,而是把它当作权威对照表来验证配置一致性、排查异常监听、辅助审计。
以下是你实际可操作的核对方法和要点:
用 /etc/services 查标准端口定义
该文件由 IANA 维护,Linux 发行版同步更新,记录了公认的服务名、端口号、协议(tcp/udp)及别名。例如:
客服回复模板。售前咨询、售后处理、退换货、投诉回复、好评引导、升级处理、行业FAQ、满意度挽回。Customer service reply templates for pre-sale, after-sale, returns, complaints, escalation, FAQ generation, s...
http 80/tcp www www-http # WorldWideWeb HTTP ssh 22/tcp # Secure Shell Login rsync 873/tcp # rsync daemon
-
grep http /etc/services可快速查 HTTP 对应的端口和协议 -
awk '$2 ~ /\/tcp$/ {print $1,$2}' /etc/services | head -10能列出前10个 TCP 服务及其端口 - 注意:同一端口可能有多个服务名(如
www和http),同一服务也可能支持多协议(如ftp 21/tcp和ftp 21/udp)
结合 ss 或 netstat 检查真实监听情况
/etc/services 是“约定”,而 ss -tuln 显示的是“现实”。精准核对需两步比对:
- 先查哪些端口正在监听:
ss -tuln | awk '{print $5}' | cut -d':' -f2 | sort -u - 再查这些端口在
/etc/services中对应什么服务:for port in $(ss -tuln | awk '$5 ~ /:[0-9]+$/ {gsub(/.*:/,"",$5); print $5}' | sort -u); do grep -E "^.*[[:space:]]${port}/(tcp|udp)[[:space:]]" /etc/services | head -1 done 2>/dev/null - 若某端口(如
3306)未在/etc/services中登记,但mysqld正在监听,说明这是自定义部署——需人工确认是否合理,避免端口冲突或隐蔽后门
识别异常或高危端口映射
对照 /etc/services 可快速发现潜在风险:
- 监听了
23/tcp(telnet),但系统未启用telnetd→ 可能是未知进程或恶意软件 -
22/tcp被sshd占用正常,但如果ss -tulnp | grep :22显示非sshd进程(如python3),就需深入调查 -
139/tcp、445/tcp(samba)在非文件服务器上监听 → 违反最小化原则
辅助配置与审计时的注意事项
- 修改
/etc/services不影响服务行为,但可提升团队协作清晰度:添加自定义服务如myapi 5001/tcp,避免多人重复使用同一端口 - 避免删除或注释标准条目(如
ssh 22/tcp),否则ss -tulnp会显示:22而非ssh,降低可读性 - 审计脚本中可将
/etc/services作为白名单基线,比对lsof -iTCP -sTCP:LISTEN输出,标记未登记却活跃的端口
它不是防火墙,也不是启动开关,但它是你理解“这个端口本该跑什么”的第一手依据。用对了,就是一张干净、可信、可追溯的网络服务地图。










