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 escriuresshcom a port en moltes eines. - Les eines de diagnòstic, per mostrar noms en lloc de números. Compara la sortida de
ssamb 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