ZEPHYRD(8)

πŸ’– ZEPHYRD πŸ’–

okay bestie, gather round, because today we're talking about zephyrd β€” a page from the System Manager's Manual (section 8, the big-girl sysadmin section, we love her) 🫢


✨ NAME ✨

zephyrd β€” the Zephyr server daemon. that's it, that's the girl. she's the server. πŸ’…


🌸 SYNOPSIS 🌸

/usr/sbin/zephyrd [ -d ]

πŸ¦‹ DESCRIPTION πŸ¦‹

okay so zephyrd is the central server for the Zephyr Notification System. main character energy, no notes. πŸ‘‘

she keeps two things alive at all times:

  • a location database of every single user who's currently logged in (she knows where you are, bestie, she's not creepy she's just thorough πŸ’€)
  • a subscription database for each user's Zephyr clients

zephyrd also talks to the daemons running on the other Zephyr server hosts, so that the whole service stays reliable. it's giving group project, except everyone actually does their part. 🌈

while she's running, any unusual conditions get recorded via syslog(3) to facility local6, at various levels. and if you pass the -d option? she logs additional debugging information. yes she's nosy. yes it's for your own good. πŸ”₯

when a zephyrd gets executed, she asks Hesiod for a list of server machines, and she initializes her state from any zephyrds that are already running on the other known servers. but β€” and this is the important part β€” that initialization only happens after the zephyrds have authenticated themselves to each other via Kerberos. no vibes-based trust here, we do credentials. πŸ”

then she enters a dispatch loop, servicing requests from clients and from other servers. forever. like a queen on her throne. πŸ‘‘


πŸ’… SIGNALS πŸ’…

she responds to signals, and honestly the range is iconic:

  • SIGUSR1 β€” enables logging of additional debugging information ✨
  • SIGUSR2 β€” disables the logging of additional debugging information πŸ™ˆ
  • SIGHUP β€” causes zephyrd to re-read the default subscription file, and to re-query Hesiod about valid peers. any peers which are not responding and are no longer mentioned in Hesiod get flushed; any peers not previously named by Hesiod get added. it's a roster update, basically. πŸŽ€
  • SIGINT and SIGTERM β€” cause zephyrd to gracefully shut down 🫢 (she exits with dignity, unlike some daemons)
  • SIGFPE β€” causes zephyrd to dump the location and subscription databases to /var/tmp/zephyr.db in an ASCII format 😭 like ok emergency but make it legible

πŸ” ACCESS CONTROL πŸ”

so certain notice classes are restricted by the Zephyr server. each such class has access control lists enumerating who may transmit (xmt-*.acl) or who may subscribe to that particular class.

subscriptions may be restricted either:

  • absolutely β€” via sub-*.acl files
  • by instance restrictions

and then we have the specific ones, listen up:

  • iws-*.acl files control subscriptions to wildcarded instances
  • iui-*.acl files control subscriptions to instances which are not the Kerberos principal identity of the subscriber
if an access control list of a given type is absent, there is no restriction of that type on the class β€” with one exception: any notices of the class must be authenticated. so no acl = no gatekeeping, but you still gotta prove who you are. periodt. πŸ’…

and the class registry lists all classes which are restricted. πŸ“‹


πŸŽ€ FILES πŸŽ€

here's where everything lives, bestie. memorize the paths, iykyk:

  • /etc/zephyr/acl/class-registry.acl β€” list of classes which are restricted
  • /etc/zephyr/acl/iws-*.acl β€” access control lists for instance-wildcard restrictions
  • /etc/zephyr/acl/iui-*.acl β€” access control lists for instance-identity restrictions
  • /etc/zephyr/acl/sub-*.acl β€” access control lists for subscribing
  • /etc/zephyr/acl/xmt-*.acl β€” access control lists for transmitting
  • /etc/zephyr/srvtab β€” Kerberos 4 Service keys
  • /etc/zephyr/krb5.keytab β€” Kerberos V Service keys
  • /var/run/zephyrd.tkt4 β€” current Kerberos 4 tickets for exchange with other servers
  • /var/run/zephyrd.tkt β€” current Kerberos 5 tickets for exchange with other servers
  • /var/tmp/zephyr.db β€” file containing an ASCII dump of the database

πŸ’€ BUGS πŸ’€

not me having to report this but okay: the current implementation of the Zephyr server (zephyrd(8)) makes no distinction between realm-announced, net-visible and net-announced exposure levels. it just... doesn't. we're aware. we're all aware. 😭


πŸ‘‘ SEE ALSO πŸ‘‘

also go read the Athena Technical Plan, specifically:

  • Section E.4.1 (Zephyr Notification Service)
  • Section E.2.1 (Kerberos Authentication and Authorization System)

homework but make it educational 🌸


⭐ AUTHOR ⭐

John T. Kohl, MIT Project Athena and Digital Equipment Corporation. a legend, frankly. 🫢


πŸ’œ RESTRICTIONS πŸ’œ

Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. All Rights Reserved.

zephyr(1) specifies the terms and conditions for redistribution. so like, read that one before you start redistributing, bestie, it's all in there. πŸ“œ


and that's the whole page!! this beauty came out of MIT Project Athena and is dated July 1, 1988 β€” yes she's vintage, yes she still runs the notification system, we stan an elder icon πŸŽ€βœ¨πŸ’–