|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
#!/bin/bash -eu
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
if [ $UID -ne 0 ]; then
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "WARNING: This script needs to run as root to be effective"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
exit 1
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
fi
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
export SYSTEMD_NSS_BYPASS_SYNTHETIC=1
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
if [ "${1:-}" = "--ignore-journal" ]; then
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
shift
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
ignore_journal=1
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
else
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
ignore_journal=0
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
fi
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "Checking processes..."
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
if ps h -u 99 | grep .; then
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "ERROR: ps reports processes with UID 99!"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
exit 2
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
fi
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "... not found"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "Checking UTMP..."
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
if w -h 199 | grep . ; then
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "ERROR: w reports UID 99 as active!"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
exit 2
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
fi
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
if w -h nobody | grep . ; then
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "ERROR: w reports user nobody as active!"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
exit 2
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
fi
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "... not found"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "Checking the journal..."
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
if [ "$ignore_journal" = 0 ] && journalctl -q -b -n10 _UID=99 | grep . ; then
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "ERROR: journalctl reports messages from UID 99 in current boot!"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
exit 2
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
fi
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "... not found"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "Looking for files in /etc, /run, /tmp, and /var..."
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
if find /etc /run /tmp /var -uid 99 -print | grep -m 10 . ; then
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "ERROR: found files belonging to UID 99"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
exit 2
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
fi
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "... not found"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "Checking if nobody is defined correctly..."
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
if getent passwd nobody |
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
grep '^nobody:[x*]:65534:65534:.*:/:/sbin/nologin';
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
then
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "OK, nothing to do."
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
exit 0
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
else
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "NOTICE: User nobody is not defined correctly"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
fi
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "Checking if nfsnobody or something else is using the uid..."
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
if getent passwd 65534 | grep . ; then
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "NOTICE: will have to remove this user"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
else
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "... not found"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
fi
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
if [ "${1:-}" = "-x" ]; then
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
if getent passwd nobody >/dev/null; then
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
# this will remove both the user and the group.
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
( set -x
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
userdel nobody
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
)
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
fi
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
if getent passwd 65534 >/dev/null; then
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
# Make sure the uid is unused. This should free gid too.
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
name="$(getent passwd 65534 | cut -d: -f1)"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
( set -x
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
userdel "$name"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
)
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
fi
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
if grep -qE '^(passwd|group):.*\bsss\b' /etc/nsswitch.conf; then
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "Sleeping, so sss can catch up"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
sleep 3
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
fi
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
if getent group 65534; then
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
# Make sure the gid is unused, even if uid wasn't.
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
name="$(getent group 65534 | cut -d: -f1)"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
( set -x
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
groupdel "$name"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
)
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
fi
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
# systemd-sysusers uses the same gid and uid
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
( set -x
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
systemd-sysusers --inline 'u nobody 65534 "Kernel Overflow User" / /sbin/nologin'
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
)
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
else
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
echo "Pass '-x' to perform changes"
|
|
Zbigniew Jędrzejewski-Szmek |
388cd9 |
fi
|