FreeBSD The Power to Serve

Login Classes Fixes and Improvements

Contact: Olivier Certner <olce.freebsd.statusreports@certner.fr>

Context

Login classes are a mechanism mainly used to set various process properties and attributes at login, depending on the user logging in and the login class he is a member of. A login class typically specifies resource limits, environment variables and process properties such as scheduling priority and umask. See login.conf(5) for more information.

Changes

The priority and umask capabilities now accept the inherit special value to explicitly request property inheritance from the login process. This is useful, e.g., when temporarily logging in as another user from a process with a non-default priority to ensure that processes launched by this user still have the same priority level.

Users can now override the global setting for the priority capability (in /etc/login.conf) in their local configuration file (~/.login_conf). Note however that they cannot increase their priority if they are not privileged, and that using inherit in this context makes no sense, since the global setting is always applied first.

Fixes:

  • Fix a bug where, when the priority capability specifies a realtime priority, the final priority used was off-by-one (and the numerically highest priority in the real time class (31) could never be set).

  • Security: Prevent a setuid/setgid process from applying directives from some user’s ~/.login_conf (directives there that cannot be applied because of a lack of privileges could suddenly become applicable in such a process).

We have also updated the relevant manual pages to reflect the new functionality, and improved the description of the priority and umask capabilities in login.conf(5).

Status

Some of the patches in the series have been reviewed thanks to Konstantin Belousov and Warner Losh. Other patches are waiting for reviews (and reviewers, volunteers welcome!), which are not expected to be labored.

We plan to improve consistency by deprecating the priority reset to 0 when no value for the capability priority is explicitly specified, which has been the case for umask for 15+ years.

Sponsor: Kumacom SAS (for development work)
Sponsor: The FreeBSD Foundation (for some reviews)


Last modified on: October 2, 2023 by Graham Perrin