From: "Zack Weinberg" <zackw@panix.com>
To: linux-kernel@vger.kernel.org
Subject: RFC PATCH: apply security_syslog() only to the syslog() syscall, not to /proc/kmsg
Date: Tue, 7 Nov 2006 20:16:55 -0800 [thread overview]
Message-ID: <eb97335b0611072016y51e1625hcd6504fddfe9aa6c@mail.gmail.com> (raw)
Presently, the security checks for syslog(2) apply also to access to
/proc/kmsg, because /proc/kmsg's file_operations functions just call
do_syslog, and the call to security_syslog is in do_syslog, not
sys_syslog. [The only callers of do_syslog are sys_syslog and
kmsg_{read,poll,open,release}.] This has the effect, with the default
security policy, that no matter what the file permissions on
/proc/kmsg are, only a process with CAP_SYS_ADMIN can actually open or
read it. [Yes, if you open /proc/kmsg as root and then drop
privileges, subsequent reads on that fd fail.] In consequence, if one
wishes to run klogd as an unprivileged user, one is forced to jump
through awkward hoops - for example, Ubuntu's /etc/init.d/klogd
interposes a root-privileged "dd" process and a named pipe between
/proc/kmsg and the actual klogd.
I propose to move the security_syslog() check from do_syslog to
sys_syslog, so that the syscall remains restricted to CAP_SYS_ADMIN in
the default policy, but /proc/kmsg is governed by its file
permissions. With the attached patch, I can run klogd as an
unprivileged user, having changed the ownership of /proc/kmsg to that
user before starting it, and it still works. Equally, I can leave the
ownership alone but modify klogd to get messages from stdin, start it
with stdin open on /proc/kmsg (again unprivileged) and it works.
I think this is safe in the default security policy - /proc/kmsg
starts out owned by root and mode 400 - but I am not sure of the
impact on SELinux or other alternate policy frameworks.
Patch versus 2.6.19-rc4; please consider for the next release.
zw
Signed-off-by: Zack Weinberg <zackw@panix.com>
--- kernel/printk.c.unmod 2006-11-06 15:00:44.000000000 -0800
+++ kernel/printk.c 2006-11-06 15:01:51.000000000 -0800
@@ -187,10 +187,6 @@ int do_syslog(int type, char __user *buf
char c;
int error = 0;
- error = security_syslog(type);
- if (error)
- return error;
-
switch (type) {
case 0: /* Close log */
break;
@@ -317,6 +313,10 @@ out:
asmlinkage long sys_syslog(int type, char __user *buf, int len)
{
+ int error = security_syslog(type);
+ if (error)
+ return error;
+
return do_syslog(type, buf, len);
}
next reply other threads:[~2006-11-08 4:16 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-08 4:16 Zack Weinberg [this message]
2006-11-08 10:20 ` Chris Wright
2006-11-08 12:42 ` Sergey Vlasov
2006-11-08 12:45 ` [RFC PATCH 1/2] sys_syslog: check open permission for reading and getting unread count Sergey Vlasov
2006-11-08 12:45 ` [RFC PATCH 2/2] security: allow reads from an open /proc/kmsg fd by unprivileged processes Sergey Vlasov
2006-11-09 4:14 ` RFC PATCH: apply security_syslog() only to the syslog() syscall, not to /proc/kmsg Chris Wright
2006-11-09 14:50 ` Stephen Smalley
2006-11-09 16:08 ` Zack Weinberg
2006-11-09 16:40 ` Stephen Smalley
2006-11-09 17:39 ` Zack Weinberg
2006-11-09 20:53 ` Stephen Smalley
2006-11-10 0:40 ` Zack Weinberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=eb97335b0611072016y51e1625hcd6504fddfe9aa6c@mail.gmail.com \
--to=zackw@panix.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®