[systemd-devel] best way to enable dynamicuser on a large custom application

Topi Miettinen toiwoton at gmail.com
Fri Feb 12 18:21:32 UTC 2021


On 12.2.2021 4.31, Davis Roman wrote:
> Hello,
> 
> I've been tasked to take a large application mostly written in C which 
> had previously always run as root and now run it under dynamic user.
> 
> My goal is to follow the "principle of least privilege" and figure out 
> all the necessary individual privileges I need to provide so that it 
> continues to work normally as before.
> 
> I'm sure I can use a trial and error approach that would involve running 
> the unprivileged application, inspecting error, granting needed 
> privilege, rinse, wash and repeat until all errors are resolved
> but I'm wondering if there is a more systematic approach that involves 
> inspecting the code base and figuring out all needed privileges needed 
> to get the application to work properly?

Code base inspection may not present the complete picture easily since 
libraries may also invoke privileges and they may also call further 
libraries, plugins etc. Test-based approach is not great either, since 
if the test run misses a use case, the privileges for that may be left out.

Once upon time, I tried to automate generating systemd configuration 
from test runs with some help from kernel using SystemTap. It may need 
some updating:
https://github.com/topimiettinen/systemd-settings-generator.git

But a problem with kernel's debugging interfaces is that they don't seem 
to remain very stable and for some interfaces, performance may not be 
good enough. Maybe a more stable and performant model would be to 
intercept the LSM interface directly. This "systemd-lsm" could store the 
state inside the kernel (no need for I/O) and it could produce systemd 
configuration after the service finished with netlink (for speed) or 
/proc interface (for text).

-Topi


More information about the systemd-devel mailing list