Riny Qian writes: > Hi, > > I noticed there are a lot of SMF manifests (e.g. auditd.xml, > cron.xml, dbus.xml, hal.xml), which include the following > method_context for exec_method: > > <method_context> > <method_credential user='root' group='root' /> > </method_context> > > Is it really needed? Since the service is started by svc.startd(1M), > the method_context will be set to such (e.g. user='root') by default.
That's true. It isn't strictly needed as svc.startd launches services and legacy services as root. We did this to preserve compatibility with old init.d behaviour, and to make sure that folks who aren't bound by the ARCs additional requirements on manifest construction can create services that generally work without having to specify a bunch of extra execution context information. I believe the initial service authors who started this convention did so in order to explicitly state their service's requirements rather than rely on default behaviour of the restarter. Explicitly stating your service's requirements in the manifest is always a good way to go, so I belive this is good practice. It isn't practice I'd explicitly enforce, though. (Do note that the ARCs require that services are configured to run with the least possible privileges. But, if root/root is the least possible privilege for a service, I personally woudln't insist on the declaration.) Tangentially... Another example of explicitly stating requirements rather than relying on implicit behaviour is with dependencies. A well written service will explicitly depend on everything it requires. Some clever service authors have said "oh, but I already depend on system/system-log, and it depends on filesystem/local. Why should I put an explicit dependency on filesystem/local?". While that seems appropriate today, it doesn't actually bring any run-time benefit for performance and could possibly break in the future. Stating dependencies explicitly allows someone re-factoring the dependencies in the future (or exploring dependencies to understand the service better today) to tell that you explicitly rely on filesystem/local. liane