/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to initramfs-tools-hook

  • Committer: Teddy Hogeborn
  • Date: 2015-03-10 18:03:38 UTC
  • Revision ID: teddy@recompile.se-20150310180338-pcxw6r2qmw9k6br9
Add ":!RSA" to GnuTLS priority string, to disallow non-DHE kx.

If Mandos was somehow made to use a non-ephemeral Diffie-Hellman key
exchange algorithm in the TLS handshake, any saved network traffic
could then be decrypted later if the Mandos client key was obtained.
By default, Mandos uses ephemeral DH key exchanges which does not have
this problem, but a non-ephemeral key exchange algorithm was still
enabled by default.  The simplest solution is to simply turn that off,
which ensures that Mandos will always use ephemeral DH key exchanges.

There is a "PFS" priority string specifier, but we can't use it because:

1. Security-wise, it is a mix between "NORMAL" and "SECURE128" - it
   enables a lot more algorithms than "SECURE256".

2. It is only available since GnuTLS 3.2.4.

Thanks to Andreas Fischer <af@bantuX.org> for reporting this issue.

Show diffs side-by-side

added added

removed removed

Lines of Context:
70
70
CONFDIR="/conf/conf.d/mandos"
71
71
MANDOSDIR="/lib/mandos"
72
72
PLUGINDIR="${MANDOSDIR}/plugins.d"
73
 
PLUGINHELPERDIR="${MANDOSDIR}/plugin-helpers"
74
73
HOOKDIR="${MANDOSDIR}/network-hooks.d"
75
74
 
76
75
# Make directories
77
76
install --directory --mode=u=rwx,go=rx "${DESTDIR}${CONFDIR}" \
78
77
        "${DESTDIR}${MANDOSDIR}" "${DESTDIR}${HOOKDIR}"
79
78
install --owner=${mandos_user} --group=${mandos_group} --directory \
80
 
        --mode=u=rwx "${DESTDIR}${PLUGINDIR}" \
81
 
        "${DESTDIR}${PLUGINHELPERDIR}"
 
79
    --mode=u=rwx "${DESTDIR}${PLUGINDIR}"
82
80
 
83
81
# Copy the Mandos plugin runner
84
82
copy_exec "$libdir"/mandos/plugin-runner "${MANDOSDIR}"
100
98
    esac
101
99
done
102
100
 
103
 
# Copy the packaged plugin helpers
104
 
for file in "$libdir"/mandos/plugin-helpers/*; do
105
 
    base="`basename \"$file\"`"
106
 
    # Is this plugin overridden?
107
 
    if [ -e "/etc/mandos/plugin-helpers/$base" ]; then
108
 
        continue
109
 
    fi
110
 
    case "$base" in
111
 
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-bak|*.dpkg-new|*.dpkg-divert)
112
 
            : ;;
113
 
        "*") : ;;
114
 
        *) copy_exec "$file" "${PLUGINHELPERDIR}" ;;
115
 
    esac
116
 
done
117
 
 
118
101
# Copy any user-supplied plugins
119
102
for file in /etc/mandos/plugins.d/*; do
120
103
    base="`basename \"$file\"`"
126
109
    esac
127
110
done
128
111
 
129
 
# Copy any user-supplied plugin helpers
130
 
for file in /etc/mandos/plugin-helpers/*; do
131
 
    base="`basename \"$file\"`"
132
 
    case "$base" in
133
 
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-bak|*.dpkg-new|*.dpkg-divert)
134
 
            : ;;
135
 
        "*") : ;;
136
 
        *) copy_exec "$file" "${PLUGINHELPERDIR}" ;;
137
 
    esac
138
 
done
139
 
 
140
112
# Get DEVICE from initramfs.conf and other files
141
113
. /etc/initramfs-tools/initramfs.conf
142
114
for conf in /etc/initramfs-tools/conf.d/*; do
186
158
            copy_exec /usr/bin/gpgconf
187
159
        fi
188
160
        gpg="`/usr/bin/gpgconf|sed --quiet --expression='s/^gpg:[^:]*://p'`"
189
 
        gpgagent="`/usr/bin/gpgconf|sed --quiet --expression='s/^gpg-agent:[^:]*://p'`"
190
 
        # Newer versions of GnuPG 2 requires the gpg-agent binary
191
 
        if [ -e "$gpgagent" ] && [ ! -e "${DESTDIR}$gpgagent" ]; then
192
 
            copy_exec "$gpgagent"
193
 
        fi
194
161
    fi
195
162
elif dpkg --compare-versions "$libgpgme11_version" ge 1.4.1-0.1; then
196
163
    gpg=/usr/bin/gpg2
224
191
    if [ -d "$file" ]; then
225
192
        continue
226
193
    fi
227
 
    case "$file" in
228
 
        *~|.*|\#*\#|*.dpkg-old|*.dpkg-bak|*.dpkg-new|*.dpkg-divert)
229
 
            : ;;
230
 
        "*") : ;;
231
 
        *)
232
 
            cp --archive --sparse=always "$file" \
233
 
               "${DESTDIR}${CONFDIR}"
234
 
            chown ${mandos_user}:${mandos_group} \
235
 
                  "${DESTDIR}${CONFDIR}/`basename \"$file\"`"
236
 
            ;;
237
 
    esac
 
194
    cp --archive --sparse=always "$file" "${DESTDIR}${CONFDIR}"
 
195
    chown ${mandos_user}:${mandos_group} \
 
196
        "${DESTDIR}${CONFDIR}/`basename \"$file\"`"
238
197
done
239
 
# Use Diffie-Hellman parameters file if available
240
 
if [ -e "${DESTDIR}${CONFDIR}"/dhparams.pem ]; then
241
 
    sed --in-place \
242
 
        --expression="1i--options-for=mandos-client:--dh-params=${CONFDIR}/dhparams.pem" \
243
 
        "${DESTDIR}/${CONFDIR}/plugin-runner.conf"
244
 
fi
245
198
 
246
199
# /lib/mandos/plugin-runner will drop priviliges, but needs access to
247
200
# its plugin directory and its config file.  However, since almost all
271
224
done
272
225
for dir in "${DESTDIR}"/lib* "${DESTDIR}"/usr/lib*; do
273
226
    if [ -d "$dir" ]; then
274
 
        find "$dir" \! -perm -u+rw,g+r -prune -or \! -type l -print0 \
275
 
            | xargs --null --no-run-if-empty chmod a+rX --
 
227
        find "$dir" \! -perm -u+rw,g+r -prune -or -print0 \
 
228
            | xargs --null --no-run-if-empty chmod a+rX
276
229
    fi
277
230
done