On 9/29/2014 12:57 PM, James Peach wrote:
Hi all,

I've been looking at the way Traffic Server elevated privilege, and it's quite 
inconsistent right now, and it doesn't work correctly in all configurations. I 
am working on making this consistent. Here is the behavior I plan to implement:

     1. traffic_manager runs with real root credentials, but
        effective credentials as given by proxy.config.admin.user_id.
        It will elevate back to root to perform privileged operations.

     2. traffic_server is started with real root credentials,
        but attempts to permanently drop to an unprivileged user early
        in the startup process. The unprivileged user account for
        traffic_server is also given by proxy.config.admin.user_id.
        when traffic_server drops privilege, it does so permanently.

     3. traffic_server may elevate privilege depending on the
        value of proxy.config.ssl.cert.load_elevated and
        proxy.config.plugin.load_elevated. This elevation will only
        be supported on platforms that have per-thread capabilities.
        traffic_server will check at startup whether to retain
        sufficient capabilities to allow it to elevate later. This
        means that the *.load_elevated configurations will not be
        reloadable.

Must keep CAP_NET_ADMIN for outbound transparent as well. Initiating a connection from a foreign address requires privilege.

From a support perspective, we need to make sure the error messages are clear to the user when they try to run outbound transparent (or other privileged op) and fail due to lack of privilege. Perhaps the error could suggest libcap?


     4. After traffic_server drops privilege, we will continue to abort
        with a fatal error if the real or effective user ID is root. This
        behavior can be avoided by defining BIG_SECURITY_HOLE=1 at build
        time.

Note that people on #traffic-server seemed to agree that we should move away 
from allowing traffic_server to retain privilege. I the future, I hope that we 
can call up to traffic_manager to perform any privileged operations, and stop 
supporting root privileges fot plugins.

cheers,
James

Which platforms do not support libcap? netbsd, osx, and omniOS? Are there least privilege alternative mechanisms on those platforms?

Certainly documenting the privilege requirements/architecture as you've started here seems like a very good idea.

At some point would be it worthwhile to go through the least privilege exercise on traffic_manager too? For example, I assume that traffic_manager would not need DAC override privilege.

Reply via email to