/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk
505.1.13 by Teddy Hogeborn
Miscellaneous fixes prompted by lintian:
1
#!/bin/sh
185 by Teddy Hogeborn
* .bzr-builddeb/default.conf: New.
2
# This script can be called in the following ways:
3
#
4
# After the package was installed:
5
#       <postinst> configure <old-version>
6
#
7
#
8
# If prerm fails during upgrade or fails on failed upgrade:
9
#       <old-postinst> abort-upgrade <new-version>
10
#
11
# If prerm fails during deconfiguration of a package:
12
#       <postinst> abort-deconfigure in-favour <new-package> <version>
13
#                  removing <old-package> <version>
14
#
15
# If prerm fails during replacement due to conflict:
16
#       <postinst> abort-remove in-favour <new-package> <version>
17
967 by Teddy Hogeborn
Show debconf note about new TLS key IDs
18
. /usr/share/debconf/confmodule
19
505.1.13 by Teddy Hogeborn
Miscellaneous fixes prompted by lintian:
20
set -e
21
195 by Teddy Hogeborn
* debian/control (mandos, mandos-client): Depend on "adduser".
22
# Update the initial RAM file system image
185 by Teddy Hogeborn
* .bzr-builddeb/default.conf: New.
23
update_initramfs()
24
{
1127 by Teddy Hogeborn
Add dracut(8) support
25
    if command -v update-initramfs >/dev/null; then
1288 by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts
26
	update-initramfs -k all -u 1>&2
1127 by Teddy Hogeborn
Add dracut(8) support
27
    elif command -v dracut >/dev/null; then
28
	dracut_version="`dpkg-query --showformat='${Version}' --show dracut`"
29
	if dpkg --compare-versions "$dracut_version" lt 043-1 \
30
		&& bash -c '. /etc/dracut.conf; . /etc/dracut.conf.d/*; [ "$hostonly" != yes ]'; then
31
	    echo 'Dracut is not configured to use hostonly mode!' >&2
32
	    return 1
33
	fi
34
	# Logic taken from dracut.postinst
35
	for kernel in /boot/vmlinu[xz]-*; do
36
	    kversion="${kernel#/boot/vmlinu[xz]-}"
37
	    # Dracut preserves old permissions of initramfs image
38
	    # files, so we adjust permissions before creating new
39
	    # initramfs image containing secret keys.
1283 by Teddy Hogeborn
Fix file permissions when installing a new kernel, with dracut
40
	    if [ -e /boot/initrd.img-"$kversion" ]; then
41
		chmod go-r /boot/initrd.img-"$kversion"
42
	    else
43
		# An initrd image has not yet been created for this
44
		# kernel, possibly because this new kernel is about to
45
		# be, but has not yet been, installed.  In this case,
46
		# we create an empty file with the right permissions
47
		# so that Dracut will preserve those permissions when
48
		# it creates the real, new initrd image for this
49
		# kernel.
50
		install --mode=u=rw /dev/null \
51
			/boot/initrd.img-"$kversion"
52
	    fi
1127 by Teddy Hogeborn
Add dracut(8) support
53
	    if [ "$kversion" != "*" ]; then
1288 by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts
54
		/etc/kernel/postinst.d/dracut "$kversion" 1>&2
1127 by Teddy Hogeborn
Add dracut(8) support
55
	    fi
56
	done
57
    fi
237.2.21 by Teddy Hogeborn
* debian/mandos-client.postinst: Secure permissions of old
58
    
59
    if dpkg --compare-versions "$2" lt-nl "1.0.10-1"; then
60
        # Make old initrd.img files unreadable too, in case they were
61
        # created with mandos-client 1.0.8 or older.
237.2.22 by Teddy Hogeborn
* debian/mandos-client.postinst (update_initramfs): Bug fix: typo.
62
	find /boot -maxdepth 1 -type f -name "initrd.img-*.bak" \
63
	    -print0 | xargs --null --no-run-if-empty chmod o-r
237.2.21 by Teddy Hogeborn
* debian/mandos-client.postinst: Secure permissions of old
64
    fi
185 by Teddy Hogeborn
* .bzr-builddeb/default.conf: New.
65
}
66
190 by Teddy Hogeborn
* debian/mandos-client.postinst: Use "type" instead of "which". Split
67
# Add user and group
68
add_mandos_user(){
238 by Teddy Hogeborn
First version of a somewhat complete D-Bus server interface. Also
69
    # Rename old "mandos" user and group
348 by Teddy Hogeborn
* debian/mandos-client.postinst (configure): Don't look for user and
70
    if dpkg --compare-versions "$2" lt "1.0.3-1"; then
71
	case "`getent passwd mandos`" in
72
	    *:Mandos\ password\ system,,,:/nonexistent:/bin/false)
1288 by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts
73
		usermod --login _mandos mandos 1>&2
74
		groupmod --new-name _mandos mandos 1>&2
348 by Teddy Hogeborn
* debian/mandos-client.postinst (configure): Don't look for user and
75
		return
76
		;;
77
	esac
78
    fi
238 by Teddy Hogeborn
First version of a somewhat complete D-Bus server interface. Also
79
    # Create new user and group
80
    if ! getent passwd _mandos >/dev/null; then
81
	adduser --system --force-badname --quiet --home /nonexistent \
82
	    --no-create-home --group --disabled-password \
1288 by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts
83
	    --gecos "Mandos password system" _mandos 1>&2
190 by Teddy Hogeborn
* debian/mandos-client.postinst: Use "type" instead of "which". Split
84
    fi
85
}
86
962 by Teddy Hogeborn
Add support for using raw public keys in TLS (RFC 7250)
87
# Create client key pairs
88
create_keys(){
89
    # If the OpenPGP key files do not exist, generate all keys using
90
    # mandos-keygen
91
    if ! [ -r /etc/keys/mandos/pubkey.txt \
92
	      -a -r /etc/keys/mandos/seckey.txt ]; then
1288 by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts
93
	mandos-keygen 1>&2
94
	gpg-connect-agent KILLAGENT /bye 1>&2 || :
962 by Teddy Hogeborn
Add support for using raw public keys in TLS (RFC 7250)
95
	return 0
96
    fi
97
971 by Teddy Hogeborn
Bug fix: Only create TLS key with certtool, and read correct key file
98
    # Remove any bad TLS keys by 1.8.0-1
99
    if dpkg --compare-versions "$2" eq "1.8.0-1" \
100
       || dpkg --compare-versions "$2" eq "1.8.0-1~bpo9+1"; then
101
	# Is the key bad?
102
	if ! certtool --password='' \
103
	     --load-privkey=/etc/keys/mandos/tls-privkey.pem \
104
	     --outfile=/dev/null --pubkey-info --no-text \
1288 by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts
105
	      1>&2 2>/dev/null; then
973 by Teddy Hogeborn
Bug fix: Ignore some failures to remove files.
106
	    shred --remove -- /etc/keys/mandos/tls-privkey.pem \
107
		  2>/dev/null || :
108
	    rm --force -- /etc/keys/mandos/tls-pubkey.pem
971 by Teddy Hogeborn
Bug fix: Only create TLS key with certtool, and read correct key file
109
	fi
110
    fi
111
962 by Teddy Hogeborn
Add support for using raw public keys in TLS (RFC 7250)
112
    # If the TLS keys already exists, do nothing
113
    if [ -r /etc/keys/mandos/tls-privkey.pem \
114
	    -a -r /etc/keys/mandos/tls-pubkey.pem ]; then
115
	return 0
116
    fi
117
971 by Teddy Hogeborn
Bug fix: Only create TLS key with certtool, and read correct key file
118
    # Try to create the TLS keys
119
120
    TLS_PRIVKEYTMP="`mktemp -t mandos-client-privkey.XXXXXXXXXX`"
121
122
    if certtool --generate-privkey --password='' \
123
		--outfile "$TLS_PRIVKEYTMP" --sec-param ultra \
1288 by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts
124
		--key-type=ed25519 --pkcs8 --no-text 1>&2 \
125
		2>/dev/null; then
971 by Teddy Hogeborn
Bug fix: Only create TLS key with certtool, and read correct key file
126
127
	local umask=$(umask)
128
	umask 077
129
	cp --archive "$TLS_PRIVKEYTMP" /etc/keys/mandos/tls-privkey.pem
973 by Teddy Hogeborn
Bug fix: Ignore some failures to remove files.
130
	shred --remove -- "$TLS_PRIVKEYTMP" 2>/dev/null || :
971 by Teddy Hogeborn
Bug fix: Only create TLS key with certtool, and read correct key file
131
132
	# First try certtool from GnuTLS
133
	if ! certtool --password='' \
134
	     --load-privkey=/etc/keys/mandos/tls-privkey.pem \
135
	     --outfile=/etc/keys/mandos/tls-pubkey.pem --pubkey-info \
1288 by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts
136
	     --no-text 1>&2 2>/dev/null; then
971 by Teddy Hogeborn
Bug fix: Only create TLS key with certtool, and read correct key file
137
	    # Otherwise try OpenSSL
138
	    if ! openssl pkey -in /etc/keys/mandos/tls-privkey.pem \
1288 by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts
139
		 -out /etc/keys/mandos/tls-pubkey.pem -pubout \
140
		 1>&2; then
971 by Teddy Hogeborn
Bug fix: Only create TLS key with certtool, and read correct key file
141
		rm --force /etc/keys/mandos/tls-pubkey.pem
142
		# None of the commands succeded; give up
143
		umask $umask
144
		return 1
145
	    fi
146
	fi
147
	umask $umask
148
149
	key_id=$(mandos-keygen --passfile=/dev/null \
150
		     | grep --regexp="^key_id[ =]")
151
152
	db_version 2.0
153
	db_fset mandos-client/key_id seen false
154
	db_reset mandos-client/key_id
155
	db_subst mandos-client/key_id key_id $key_id
156
	db_input critical mandos-client/key_id || true
157
	db_go
158
	db_stop
159
    else
973 by Teddy Hogeborn
Bug fix: Ignore some failures to remove files.
160
	shred --remove -- "$TLS_PRIVKEYTMP" 2>/dev/null || :
971 by Teddy Hogeborn
Bug fix: Only create TLS key with certtool, and read correct key file
161
    fi
190 by Teddy Hogeborn
* debian/mandos-client.postinst: Use "type" instead of "which". Split
162
}
163
765 by Teddy Hogeborn
Install client Diffie-Hellman parameters into initramfs.
164
create_dh_params(){
766 by Teddy Hogeborn
Rename the "client-dhparams.pem" file to simply "dhparams.pem".
165
    if [ -r /etc/keys/mandos/dhparams.pem ]; then
765 by Teddy Hogeborn
Install client Diffie-Hellman parameters into initramfs.
166
	return 0
167
    fi
168
    # Create a Diffe-Hellman parameters file
169
    DHFILE="`mktemp -t mandos-client-dh-parameters.XXXXXXXXXX.pem`"
170
    # First try certtool from GnuTLS
171
    if ! certtool --generate-dh-params --sec-param high \
1288 by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts
172
	 --outfile "$DHFILE" 1>&2; then
765 by Teddy Hogeborn
Install client Diffie-Hellman parameters into initramfs.
173
	# Otherwise try OpenSSL
174
	if ! openssl genpkey -genparam -algorithm DH -out "$DHFILE" \
1288 by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts
175
	     -pkeyopt dh_paramgen_prime_len:3072 1>&2; then
765 by Teddy Hogeborn
Install client Diffie-Hellman parameters into initramfs.
176
	    # None of the commands succeded; give up
1288 by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts
177
	    rm --force -- "$DHFILE"
765 by Teddy Hogeborn
Install client Diffie-Hellman parameters into initramfs.
178
	    return 1
179
	fi
180
    fi
181
    sed --in-place --expression='0,/^-----BEGIN DH PARAMETERS-----$/d' \
182
	"$DHFILE"
183
    sed --in-place --expression='1i-----BEGIN DH PARAMETERS-----' \
184
	    "$DHFILE"
766 by Teddy Hogeborn
Rename the "client-dhparams.pem" file to simply "dhparams.pem".
185
    cp --archive "$DHFILE" /etc/keys/mandos/dhparams.pem
1288 by Teddy Hogeborn
Fix #1079588 by not outputting to stdout in maintainer scripts
186
    rm --force -- "$DHFILE"
765 by Teddy Hogeborn
Install client Diffie-Hellman parameters into initramfs.
187
}
188
185 by Teddy Hogeborn
* .bzr-builddeb/default.conf: New.
189
case "$1" in
190
    configure)
237.2.21 by Teddy Hogeborn
* debian/mandos-client.postinst: Secure permissions of old
191
	add_mandos_user "$@"
962 by Teddy Hogeborn
Add support for using raw public keys in TLS (RFC 7250)
192
	create_keys "$@"
765 by Teddy Hogeborn
Install client Diffie-Hellman parameters into initramfs.
193
	create_dh_params "$@" || :
237.2.21 by Teddy Hogeborn
* debian/mandos-client.postinst: Secure permissions of old
194
	update_initramfs "$@"
860 by Teddy Hogeborn
Fix permissions of /etc/mandos/plugin-helpers.
195
	if dpkg --compare-versions "$2" lt-nl "1.7.10-1"; then
836 by Teddy Hogeborn
Client: Fix permissions on plugin helper directory.
196
	    PLUGINHELPERDIR=/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null)/mandos/plugin-helpers
197
	    if ! dpkg-statoverride --list "$PLUGINHELPERDIR" \
198
		 >/dev/null 2>&1; then
199
		chmod u=rwx,go= -- "$PLUGINHELPERDIR"
200
	    fi
839 by Teddy Hogeborn
Client: Make plugin helper override directory mode u=rwx,go=
201
	    if ! dpkg-statoverride --list /etc/mandos/plugin-helpers \
202
		 >/dev/null 2>&1; then
203
		chmod u=rwx,go= -- /etc/mandos/plugin-helpers
204
	    fi
836 by Teddy Hogeborn
Client: Fix permissions on plugin helper directory.
205
	fi
185 by Teddy Hogeborn
* .bzr-builddeb/default.conf: New.
206
	;;
207
    abort-upgrade|abort-deconfigure|abort-remove)
208
	;;
209
210
    *)
275 by Teddy Hogeborn
* debian/mandos-client.postinst: Converted to Bourne shell. Also
211
	echo "$0 called with unknown argument '$1'" 1>&2
185 by Teddy Hogeborn
* .bzr-builddeb/default.conf: New.
212
	exit 1
213
	;;
214
esac
215
216
#DEBHELPER#
217
218
exit 0