Comandes LinuxInformació del sistema LinuxLinux

El fitxer /etc/services a Linux: noms de serveis i ports



A qualsevol sistema Unix o Linux hi ha un fitxer petit i discret que fa una feina molt concreta: /etc/services relaciona els noms dels serveis de xarxa amb el seu número de port i el seu protocol (TCP o UDP). Gràcies a ell, els programes poden dir ssh en lloc de 22, i tu pots llegir http en lloc de 80 a la sortida de moltes comandes.

Format del fitxer

Cada línia té aquesta estructura:

nom_servei    port/protocol    [àlies...]    [# comentari]
  • nom_servei: nom oficial del servei (http, ssh, domain…).
  • port/protocol: el número de port i el protocol, separats per una barra (80/tcp, 53/udp).
  • àlies: altres noms opcionals per al mateix servei.
  • comentari: tot el que hi ha després de #.

Si un servei fa servir el mateix port en TCP i en UDP, apareix en dues línies. Unes quantes entrades reals d’un Debian 13:

$ grep -E '^(ssh|domain|http|https|submissions)\s' /etc/services
ssh		22/tcp				# SSH Remote Login Protocol
domain		53/tcp				# Domain Name Server
domain		53/udp
http		80/tcp		www		# WorldWideWeb HTTP
https		443/tcp				# http protocol over TLS/SSL
https		443/udp				# HTTP/3
submissions	465/tcp		ssmtp smtps urd # Submission over TLS [RFC8314]

Fixa’t que http té l’àlies www, i que https ja apareix també en UDP per a HTTP/3, que va sobre QUIC (UDP).

A Debian i Ubuntu el fitxer el proporciona el paquet netbase i es basa en el registre oficial de ports de la IANA. No és exhaustiu (unes 365 línies a Debian 13): només inclou els serveis més habituals.

Per a què es fa servir

/etc/services no obre ni tanca cap port i no decideix a quin port escolta un servei: això ho mana la configuració de cada programa (per exemple, Port a /etc/ssh/sshd_config). És només una taula de traducció entre noms i números que fan servir:

  • Els programes, a través de les funcions estàndard de la biblioteca C (getservbyname(), getservbyport()), quan reben un nom de servei en lloc d’un número. Per exemple, pots escriure ssh com a port en moltes eines.
  • Les eines de diagnòstic, per mostrar noms en lloc de números. Compara la sortida de ss amb i sense l’opció -n:
$ ss -tl | grep ssh
LISTEN 0      128          0.0.0.0:ssh           0.0.0.0:*

$ ss -tln | grep ':22 '
LISTEN 0      128          0.0.0.0:22         0.0.0.0:*

Un navegador web, en canvi, no consulta aquest fitxer: ja sap que HTTP fa servir el port 80 i HTTPS el 443.

Compte: si canvies el port d’un servei (per exemple, SSH al 2222), no cal tocar /etc/services, i fer-ho no canviaria res. Només et cal si vols que les eines mostrin un nom per a un port propi.

Consultar-lo

La manera recomanada és getent, que consulta la base de dades de serveis tal com la veuen els programes:

$ getent services ssh
ssh                   22/tcp

$ getent services 443/tcp
https                 443/tcp

$ getent services www
http                  80/tcp www

O, simplement, amb grep:

grep -w 3306 /etc/services

Posts relacionats