BBlack has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/349956 )
Change subject: [untested] keep CAP_SYS_NICE in varnishd worker child proc
......................................................................
[untested] keep CAP_SYS_NICE in varnishd worker child proc
Also requires linking against libcap2 (-lcap)
Change-Id: I69ed1f069ad731e0befb886a0d5d472e190d3bb1
---
M bin/varnishd/mgt/mgt_jail_unix.c
1 file changed, 33 insertions(+), 2 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/operations/debs/varnish4
refs/changes/56/349956/1
diff --git a/bin/varnishd/mgt/mgt_jail_unix.c b/bin/varnishd/mgt/mgt_jail_unix.c
index 3c9f658..df05f7b 100644
--- a/bin/varnishd/mgt/mgt_jail_unix.c
+++ b/bin/varnishd/mgt/mgt_jail_unix.c
@@ -44,6 +44,7 @@
#ifdef __linux__
#include <sys/prctl.h>
+#include <sys/capability.h>
#endif
static gid_t vju_mgr_gid;
@@ -217,13 +218,43 @@
AZ(setgroups(i, gid_list));
}
- if (vju_wrkuser != NULL &&
- (jse == JAIL_SUBPROC_VCLLOAD || jse == JAIL_SUBPROC_WORKER)) {
+ if (vju_wrkuser != NULL && jse == JAIL_SUBPROC_VCLLOAD) {
AZ(setuid(vju_wrkuid));
} else {
AZ(setuid(vju_uid));
}
+ if (jse == JAIL_SUBPROC_WORKER) {
+#ifdef __linux__
+ // This restricts our root privs down to just setuid + nice
+ const cap_value_t caps_nice_setuid[] = {
+ CAP_SYS_NICE,
+ CAP_SETUID,
+ };
+ cap_t caps_pre = cap_init();
+ assert(caps_pre != NULL);
+ AZ(cap_set_flag(caps_pre, CAP_PERMITTED, 2, caps_nice_setuid,
CAP_SET));
+ AZ(cap_set_flag(caps_pre, CAP_EFFECTIVE, 2, caps_nice_setuid,
CAP_SET));
+ AZ(cap_set_proc(caps_pre));
+ AZ(cap_free(caps_pre));
+ AZ(prctl(PR_SET_KEEPCAPS, 1)); // keep caps across setuid()
+#endif
+ if (vju_wrkuser != NULL) {
+ AZ(setuid(vju_wrkuid));
+ } else {
+ AZ(setuid(vju_uid));
+ }
+#ifdef __linux__
+ // Post-setuid, we restrict ourselves further to just nice
+ cap_t caps_post = cap_init();
+ assert(caps_post != NULL);
+ AZ(cap_set_flag(caps_post, CAP_PERMITTED, 1, cap_nice_setuid,
CAP_SET));
+ AZ(cap_set_flag(caps_post, CAP_EFFECTIVE, 1, cap_nice_setuid,
CAP_SET));
+ AZ(cap_set_proc(caps_post));
+ AZ(cap_free(caps_post));
+#endif
+ }
+
#ifdef __linux__
/*
* On linux mucking about with uid/gid disables core-dumps,
--
To view, visit https://gerrit.wikimedia.org/r/349956
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I69ed1f069ad731e0befb886a0d5d472e190d3bb1
Gerrit-PatchSet: 1
Gerrit-Project: operations/debs/varnish4
Gerrit-Branch: debian-wmf
Gerrit-Owner: BBlack <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits