Package: dpkg
Version: 1.17.13
Severity: normal

Dear Maintainer,

If the options --umask and --make-pidfile are both used when calling 
start-stop-daemon --start, the umask is set before the pidfile is created. If 
this umask is restrictive (e.g. 0007) then this leads to a pidfile being 
created that is not even readable by unprivileged users. This means that only 
root will be able to successfully check the status of a service with a command 
like "service foo status". 

Since it is easy for any user to find the PID of any running process (with 
ps), I don't think there is any security issue with making all pidfiles 
world-readable. Indeed, a quick check of both my Debian systems reveals that, 
other than the one offending service that caused me to notice this problem 
(deluged*), all other pidfiles in /run have permissions of 0644, consistent 
with the default umask of 0022. 

A quick look at the source of start-stop-daemon reveals that the umask is 
applied immediately before calling "create-pidfile". Simply changing the order 
of these two blocks of code fixes the problem. For your convenience, I have 
attached a patch that does this. 


* The deluged package just got a shiny new init-script in a recent Debian 
package version, and there are a couple of issues with the script, one of 
which is its overly-paranoid default umask. I am filing a bug with that 
package about those issues as well, but clearly the root of this bug is in 
start-stop-daemon. 


*** Please consider answering these questions, where appropriate ***

   * What led up to the situation?
   * What exactly did you do (or not do) that was effective (or
     ineffective)?
   * What was the outcome of this action?
   * What outcome did you expect instead?

*** End of the template - remove these lines ***


-- System Information:
Debian Release: 7.6
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: i386 (i686)

Kernel: Linux 3.12-0.bpo.1-686-pae (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages dpkg depends on:
ii  libbz2-1.0   1.0.6-4
ii  libc6        2.13-38+deb7u3
ii  liblzma5     5.1.1alpha+20120614-2
ii  libselinux1  2.1.9-5
ii  tar          1.26+dfsg-0.1
ii  zlib1g       1:1.2.7.dfsg-13

dpkg recommends no packages.

Versions of packages dpkg suggests:
ii  apt  0.9.7.9+deb7u2

-- no debconf information
diff -rupN dpkg-1.17.13/utils/start-stop-daemon.c dpkg-1.17.13-new/utils/start-stop-daemon.c
--- dpkg-1.17.13/utils/start-stop-daemon.c	2014-08-19 11:12:18.000000000 -0700
+++ dpkg-1.17.13-new/utils/start-stop-daemon.c	2014-09-01 14:47:12.000000000 -0700
@@ -1780,11 +1780,11 @@ do_start(int argc, char **argv)
 		set_proc_schedule(proc_sched);
 	if (io_sched)
 		set_io_schedule(io_sched);
-	if (umask_value >= 0)
-		umask(umask_value);
 	if (mpidfile && pidfile != NULL)
 		/* User wants _us_ to make the pidfile. */
 		write_pidfile(pidfile, getpid());
+	if (umask_value >= 0)
+		umask(umask_value);
 	if (changeroot != NULL) {
 		if (chdir(changeroot) < 0)
 			fatal("unable to chdir() to %s", changeroot);

Reply via email to