[Pkg-shadow-devel] initscripts use unsafe `: >` shell command to create files

Dmitry Bogatov KAction at debian.org
Thu May 2 16:03:37 BST 2019


Package: initscripts
Severity: wishlist
Followup-For: Bug #923478

[ Moving discussion to separate bug ]
[ Please, drop #923478 on reply ]

[2019-04-29 02:44] Chris Hofstaedtler <zeha at debian.org>
> part       text/plain                 517
> * Dmitry Bogatov <KAction at debian.org> [190429 01:14]:
> > [2019-04-26 13:17] Chris Hofstaedtler <zeha at debian.org>
> > > > According my experiments, it will. Even if I remove this code, something
> > > > (login/getty, maybe?) still creates /var/run/utmp, root:root.
> > >
> > > Which init was used in your experiments?
> > 
> > sysvinit-core.
>
> https://sources.debian.org/src/sysvinit/2.93-8/src/init.c/?hl=2797#L2797
>
> Note that the comment citing the preconditions is not telling the
> entire story on modern systems.

Thank you very much, Chris. I should have found it myself.

Then creating /var/run/utmp is needed, since "runit-init" would not
create it itself: it relies on initscripts. Based on patch of Christian,
I propose following patch. Dear sysvinit folks, opinions?

From ce3417109303bafbc771f40428579e6691a436df Mon Sep 17 00:00:00 2001
From: Dmitry Bogatov <KAction at debian.org>
Date: Wed, 1 May 2019 23:43:13 +0000
Subject: [PATCH] Error handle redirection used to truncate /var/run/wtmp

Signed-off-by: Cristian Ionescu-Idbohrn <cii at axis.com>
Signed-off-by: Dmitry Bogatov <KAction at debian.org>
---
 debian/src/initscripts/etc/init.d/bootmisc.sh | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/debian/src/initscripts/etc/init.d/bootmisc.sh b/debian/src/initscripts/etc/init.d/bootmisc.sh
index 06facc2f..461b7472 100755
--- a/debian/src/initscripts/etc/init.d/bootmisc.sh
+++ b/debian/src/initscripts/etc/init.d/bootmisc.sh
@@ -12,6 +12,7 @@
 
 PATH=/sbin:/usr/sbin:/bin:/usr/bin
 [ "$DELAYLOGIN" ] || DELAYLOGIN=yes
+. /lib/lsb/init-functions
 . /lib/init/vars.sh
 
 do_start () {
@@ -25,18 +26,20 @@ do_start () {
 		;;
 	esac
 
-	# Create /var/run/utmp so we can login.
-	true > /var/run/utmp
-	if grep -q ^utmp: /etc/group
-	then
-		chmod 664 /var/run/utmp
-		chgrp utmp /var/run/utmp
-	fi
-
 	# Remove bootclean's flag files.
 	# Don't run bootclean again after this!
 	rm -f /tmp/.clean /run/.clean /run/lock/.clean
 	rm -f /tmp/.tmpfs /run/.tmpfs /run/lock/.tmpfs
+
+	readonly utmp='/var/run/utmp'
+	if > "${utmp}" ; then
+		chmod 644  "${utmp}" || log_warning_msg "failed to chmod ${utmp}"
+		chgrp utmp "${utmp}" || log_warning_msg "failed to chgrp ${utmp}"
+		return 0
+	else
+		log_failure_msg "failed to truncate ${utmp}"
+		return 1
+	fi
 }
 
 case "$1" in


-- 
        Note, that I send and fetch email in batch, once every 24 hours.
                 If matter is urgent, try https://t.me/kaction
                                                                             --



More information about the Pkg-shadow-devel mailing list