blob: c3ee307463a37121e00486838c56cd0eb5435a13 [file] [log] [blame]
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
bad_bin_owner_check() {
# Warn about globally-installed executables (in /bin, /usr/bin, /sbin,
# /usr/sbin, or /opt/bin) that are owned by a nonzero UID.
# This check doesn't work on non-root prefix installations at
# the moment, because every executable therein is owned by a
# nonzero UID.
[[ "${EUID}" -ne "0" || "${PORTAGE_INST_UID}" -ne "0" ]] && return
local d f found=()
for d in "${ED%/}/opt/bin" "${ED%/}/bin" "${ED%/}/usr/bin" \
"${ED%/}/sbin" "${ED%/}/usr/sbin"; do
[[ -d "${d}" ]] || continue
# Read the results of the "find" command into the "found" bash array.
#
# Use -L to catch symlinks whose targets are owned by a non-root user,
# even though it won't catch ABSOLUTE symlinks until the package
# is RE-installed (the first time around, the target won't exist).
#
# We do want to list non-superuser setuid executables, because
# they can be exploited. The owner can simply wipe the setuid
# bit, and then alter the contents of the file. The superuser
# will then have a time bomb in his $PATH.
while read -r -d '' f; do
found+=( "${f}" )
done < <(find -L "${d}" \
-maxdepth 1 \
-type f \
! -uid 0 \
-print0)
done
if [[ ${found[@]} ]]; then
eqawarn "system executables owned by nonzero uid:"
for f in "${found[@]}"; do
# Strip off the leading destdir before outputting the path.
eqawarn " ${f#${D%/}}"
done
fi
}
bad_bin_owner_check
: