Hi phk,

I like your thoughts, but with Solaris privileges and Linux capabilities, I do
see some additional aspects to consider (I will refer to both as "privileges"
below):

* With a privilege aware process, the ability to switch uids does not imply
  any other super cow powers.

* varnish should not require the file_chown/CAP_CHOWN (chown files owned by
  other users) nor file_chown_self (solaris "giveaway") privileges.

I think the varnishd master process (level#0) should continue to run as a
different $master_user (root) than $user (varnish) in order to tie elevated
privileges (opening reserved ports, setuid, fork, etc.) to that user and not
require them for the varnish $user [even if the user is root, least privileges
may be in effect and the master process may start with a reduced privilege set].

In this scenario...

On 11/02/15 10:39, Poul-Henning Kamp wrote:
> 
> -n directory:                 755 $user:$group
>       _.vsm           640 $user:$group_vsm    (!feature::public_vsm)
>       _.vsm           644 $user:$group_vsm    (feature::public_vsm)
>       _.secret        640 $user:$group
>       vcl.*.c         660 $user:$group        (temporary file)
>       vcl.*.so        440 $user:$group

$master_user (root) would not be able to open any of these files (or only _.vsm
for feature::public_vsm), unless it was also a member of $group and/or
$group_vsm. I don't want my root user to be a member of the varnish $group.

Creating them as $master_user (root) and giving them away would be an option
requiring one or the other chown privilege, which I think we can avoid:

I suggest to have a configurable $vcc_dir which defaults to sit next to the -n
directory (so by default it gets created in the same parent directory). The
master process would create the -n directory, the vcc subprocesses would create
the $vcc_dir. No chown involved. We'd end up with the following permissions:


# e.g. /tmp/varnish_name

-n directory:           755 $master_user:$group
        _.vsm           640 $master_user:$group_vsm     (!feature::public_vsm)
        _.vsm           644 $master_user:$group_vsm     (feature::public_vsm)
        _.secret        640 $master_user:$group

# e.g. /tmp/varnish_name.vcc

$vcc_dir:               750 $user:$group
        vcl.*.c         660 $user:$group        (temporary file)
        vcl.*.so        440 $user:$group

mode 750 of $vcc_dir would add marginal security (avoiding unprivileged users to
get to know about vcl names).

As is the case now, the WORKER subprocess would inherit the _.vsm mmapped, so it
wouldn't need write permission to the file.


On 11/02/15 10:39, Poul-Henning Kamp wrote:>     $group_cc
>       Platform dependent group added to the CC subprocess for
>       access to C-compiler bits.  (default: empty)

can you elaborate on this? Can you give an example what this is to be used for?
How would you "add" the group to the subprocess?

Nils

_______________________________________________
varnish-dev mailing list
[email protected]
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev

Reply via email to