|
ssu
|
ssu offers the ability to run in a special RnD mode for use during development. The main features are:
The objectives for the the implementation are:
See the Client protocol definition for RnD ssu client protocol definition for protocol details.
The username may be sent together with a domain (like user@example), with the ssu backend in charge of mapping that domain to a different LDAP organization, accounts database, or anything else useful for the given organization. The domain will be stored on both device and ssu backend, and allows for using different repository configurations for members of different organizations as well as limiting repository access for some domains.
The client-side implementation for this is in libssu, available through the ssu CLI and the ssud DBUS API.
Zypper only allows using user/password pairs for authentication. To avoid patching zypper this method of authentication is used, the device retrieves authentication tokens from the ssu server after successfully authenticating there with the client certificate.
Additional benefits of this method are easier deployment of repositories – maintaining a huge list of individual credentials on the repository server can be tricky, especially on CDNs. Authenticating against a list of client certificates in such a scenario would be even more problematic.
The repository protection should change the passwords in regular intervals, and keep the passwords on the repository server and ssu backend in sync. Validity of old and new credentials should overlap slightly. As devices are sharing credentials for repository access this is the week point in this setup, so credentials should be changed often enough to make them useless before they are discovered/used on leaks.
Updating of on-device credentials happens within the URL resolver plugin for Zypper. On repository refresh,
The ssu backend checks if the user is still a valid (LDAP) user, and removes the registration for deleted/locked users. The device side removes on-device credentials if the ssu backend authentication fails.