894576 fix order of setuid/setgid and drop additional groups
This commit is contained in:
parent
643ff5c20d
commit
a6ea15418c
@ -0,0 +1,68 @@
|
|||||||
|
From 3cac85a3f97d0a22270166f428209f873b58c319 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chris Leech <cleech@redhat.com>
|
||||||
|
Date: Tue, 11 Jun 2013 11:25:27 -0700
|
||||||
|
Subject: [PATCH] iscsid: fix order of setting uid/gid and drop supplementary
|
||||||
|
groups
|
||||||
|
|
||||||
|
If using the user and group ID settings together the existing order of
|
||||||
|
calling setuid first will almost always cause the setgid call to fail,
|
||||||
|
assuming the new effective user id does not have the CAP_SETGID
|
||||||
|
capability. The effective group ID needs to change first.
|
||||||
|
|
||||||
|
While we're at it, if iscsid is started as root it should drop any
|
||||||
|
inherited supplementary group permissions.
|
||||||
|
|
||||||
|
And if anyone is actually using this to try and isolate capabilities,
|
||||||
|
they probably care enough to want to known that it is failing. Make
|
||||||
|
iscsid startup fail instead of just calling perror.
|
||||||
|
|
||||||
|
Signed-off-by: Chris Leech <cleech@redhat.com>
|
||||||
|
---
|
||||||
|
usr/iscsid.c | 23 +++++++++++++++++++----
|
||||||
|
1 file changed, 19 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/usr/iscsid.c b/usr/iscsid.c
|
||||||
|
index b4bb65b..c0ea6fa 100644
|
||||||
|
--- a/usr/iscsid.c
|
||||||
|
+++ b/usr/iscsid.c
|
||||||
|
@@ -27,6 +27,7 @@
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <signal.h>
|
||||||
|
+#include <grp.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include <sys/utsname.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
@@ -477,11 +478,25 @@ int main(int argc, char *argv[])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (uid && setuid(uid) < 0)
|
||||||
|
- perror("setuid\n");
|
||||||
|
+ if (gid && setgid(gid) < 0) {
|
||||||
|
+ log_error("Unable to setgid to %d\n", gid);
|
||||||
|
+ log_close(log_pid);
|
||||||
|
+ exit(ISCSI_ERR);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- if (gid && setgid(gid) < 0)
|
||||||
|
- perror("setgid\n");
|
||||||
|
+ if ((geteuid() == 0) && (getgroups(0, NULL))) {
|
||||||
|
+ if (setgroups(0, NULL) != 0) {
|
||||||
|
+ log_error("Unable to drop supplementary group ids\n");
|
||||||
|
+ log_close(log_pid);
|
||||||
|
+ exit(ISCSI_ERR);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (uid && setuid(uid) < 0) {
|
||||||
|
+ log_error("Unable to setuid to %d\n", uid);
|
||||||
|
+ log_close(log_pid);
|
||||||
|
+ exit(ISCSI_ERR);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
memset(&daemon_config, 0, sizeof (daemon_config));
|
||||||
|
daemon_config.pid_file = pid_file;
|
||||||
|
--
|
||||||
|
1.8.1.4
|
||||||
|
|
@ -43,6 +43,7 @@ Patch59: 0059-iscsiuio-systemd-unit-files.patch
|
|||||||
Patch60: 0060-use-systemctl-to-start-iscsid.patch
|
Patch60: 0060-use-systemctl-to-start-iscsid.patch
|
||||||
Patch61: 0061-resolve-565245-multilib-issues-caused-by-doxygen.patch
|
Patch61: 0061-resolve-565245-multilib-issues-caused-by-doxygen.patch
|
||||||
Patch62: 0062-Don-t-check-for-autostart-sessions-if-iscsi-is-not-u.patch
|
Patch62: 0062-Don-t-check-for-autostart-sessions-if-iscsi-is-not-u.patch
|
||||||
|
Patch63: 0063-fix-order-of-setting-uid-gid-and-drop-supplementary-.patch
|
||||||
# iscsiuio patches
|
# iscsiuio patches
|
||||||
Patch71: 0071-iscsiuio-0.7.4.3.patch
|
Patch71: 0071-iscsiuio-0.7.4.3.patch
|
||||||
Patch72: 0072-iscsiuio-0.7.6.1.patch
|
Patch72: 0072-iscsiuio-0.7.6.1.patch
|
||||||
@ -112,6 +113,7 @@ mv iscsiuio-%{iscsiuio_version} iscsiuio
|
|||||||
%patch60 -p1
|
%patch60 -p1
|
||||||
%patch61 -p1
|
%patch61 -p1
|
||||||
%patch62 -p1
|
%patch62 -p1
|
||||||
|
%patch63 -p1
|
||||||
# iscsiuio patches
|
# iscsiuio patches
|
||||||
cd iscsiuio
|
cd iscsiuio
|
||||||
%patch71 -p1
|
%patch71 -p1
|
||||||
@ -274,6 +276,7 @@ fi
|
|||||||
* Tue Jun 11 2013 Chris Leech <cleech@redhat.com> - 6.2.0.873-7
|
* Tue Jun 11 2013 Chris Leech <cleech@redhat.com> - 6.2.0.873-7
|
||||||
- Use the systemd tmpfiles service to recreate lockfiles in /var/lock
|
- Use the systemd tmpfiles service to recreate lockfiles in /var/lock
|
||||||
- 955167 build as a position independent executable
|
- 955167 build as a position independent executable
|
||||||
|
- 894576 fix order of setuid/setgid and drop additional groups
|
||||||
|
|
||||||
* Tue May 28 2013 Chris Leech <cleech@redhat.com> - 6.2.0.873-6
|
* Tue May 28 2013 Chris Leech <cleech@redhat.com> - 6.2.0.873-6
|
||||||
- Don't have iscsiadm scan for autostart record if node db is empty (bug #951951)
|
- Don't have iscsiadm scan for autostart record if node db is empty (bug #951951)
|
||||||
|
Loading…
Reference in New Issue
Block a user