On the Localizer

2020/04/08

One of NetAuth’s primary goals has always been authentication and identity for Linux servers. For many servers, this means PAM and NSS. While these are both widespread they are not particularly easy to interact with.

For example, NSS has no concept of a failure during processing. This largely precludes on-line lookups, and even in the offline case the lookup path needs to be bulletproof. Bugs in NSS handlers can quickly turn into security incidents by nature of the information that NSS handles. PAM isn’t much better, depending on being able to load shared objects into the target’s address space. This is in stark contrast to the bsdauth system where a program is executed in a highly restricted context and its return code checked for whether authentication succeeded.

Over time, its become desirable to support systems where NSS and PAM are not available. Where can one find such systems you ask? The very popular Alpine Linux ships with this configuration. There is no NSS available because that is simply not a part of the musl design specification, and there is no PAM because it is often unnecessary.

NetAuth will solve this with a pair of new projects. The first one, the localizer, will replace the entire NSS integration path for standard purposes. It will be able to directly modify the passwd, group, and shadow files to update users that the system is aware of. Additional planned functionality beyond the initial release includes writing autofs mount maps, and even a plugin to the NetAuth server which would permit synchronizing shadow hashes directly to targeted machines in environments where PAM is unacceptable.

In environments where PAM is acceptable, the existing pam_netauth will be replaced with a shim executable that can be consumed by pam_exec.so. This will allow cleaner integration and unit testing by being able to drop CGO compilation options. It will also dramatically simplify the story of running a PAM integration on non-GLibc systems, where Go’s shared object compilation is not supported.

Look forward to both of these new components in the coming months. The original NSS integration will be maintained on a best effort basis moving forwards, and the original pam_netauth will be retired entirely due to its limited support and security critical function.

>> Home