153 lines
3.5 KiB
Bash
Executable File
153 lines
3.5 KiB
Bash
Executable File
#!/bin/sh
|
|
set -e
|
|
|
|
unset NO_CONFIRM
|
|
unset NO_REMOVE
|
|
unset REMOVE_REPORTS
|
|
unset REMOVE_LOGS
|
|
unset REMOVE_DB
|
|
unset REMOVE_KEYS
|
|
unset RM
|
|
|
|
UNAME=`uname`
|
|
|
|
help() {
|
|
cat >&2 << 'HELP'
|
|
|
|
tripwire_uninstall [-y] [-N] [ [-R] [-L] [-D] [-K] | [-A] ]
|
|
|
|
-y no confirmation (unattended operation)
|
|
-N dont remove binaries, docs and man pages
|
|
-A remove everything (logs, reports, db and keys)
|
|
-R remove reports
|
|
-L remove logs
|
|
-D remove db
|
|
-K remove keys
|
|
|
|
-N with -Y is valid
|
|
|
|
|
|
HELP
|
|
}
|
|
|
|
while [ "$#" != 0 ]; do
|
|
case "$1" in
|
|
-y) NO_CONFIRM=1 ;;
|
|
-N) NO_REMOVE=1 ;;
|
|
-L) REMOVE_LOGS=1 ;;
|
|
-D) REMOVE_DB=1 ;;
|
|
-K) REMOVE_KEYS=1 ;;
|
|
-A) REMOVE_LOGS=1
|
|
REMOVE_KEYS=1
|
|
REMOVE_DB=1
|
|
;;
|
|
*) help ; exit 1
|
|
esac
|
|
shift
|
|
done
|
|
|
|
secure_rm() {
|
|
case $UNAME in
|
|
Darwin)
|
|
/usr/bin/srm -vf -- "$@"
|
|
;;
|
|
Linux)
|
|
/usr/bin/shred -vfu -- "$@"
|
|
;;
|
|
FreeBSD|*)
|
|
# 3x wipe
|
|
for FILE in "$@"; do
|
|
/bin/dd if=/dev/random of="$FILE" bs=1 count=$(/usr/bin/wc -c < "$FILE" | /usr/bin/sed "s/[^0-9]//g")
|
|
/bin/dd if=/dev/random of="$FILE" bs=1 count=$(/usr/bin/wc -c < "$FILE" | /usr/bin/sed "s/[^0-9]//g")
|
|
/bin/dd if=/dev/random of="$FILE" bs=1 count=$(/usr/bin/wc -c < "$FILE" | /usr/bin/sed "s/[^0-9]//g")
|
|
done
|
|
rm -vf "$@"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
secure_rm_rf() {
|
|
case $UNAME in
|
|
Darwin)
|
|
/usr/bin/srm -vrf -- "$@"
|
|
;;
|
|
Linux)
|
|
/usr/bin/find "$@" -type f -exec /usr/bin/shred -vfu -- {} \;
|
|
rm -vrf "$@"
|
|
;;
|
|
FreeBSD|*)
|
|
# 3x wipe
|
|
/usr/bin/find "$@" -type f | xargs -I% sh -c '/bin/dd if=/dev/random of="%" bs=1 count=$(/usr/bin/wc -c < "%" | /usr/bin/sed "s/[^0-9]//g")'
|
|
/usr/bin/find "$@" -type f | xargs -I% sh -c '/bin/dd if=/dev/random of="%" bs=1 count=$(/usr/bin/wc -c < "%" | /usr/bin/sed "s/[^0-9]//g")'
|
|
/usr/bin/find "$@" -type f | xargs -I% sh -c '/bin/dd if=/dev/random of="%" bs=1 count=$(/usr/bin/wc -c < "%" | /usr/bin/sed "s/[^0-9]//g")'
|
|
rm -vrf "$@"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
|
|
if [ -n "$NO_CONFIRM" ]; then
|
|
:; # noop
|
|
else
|
|
printf "Uninstall tripwire ? [Yn] "
|
|
|
|
unset PROMPT
|
|
read PROMPT
|
|
|
|
if [ "$PROMPT" = 'y' ] || [ "$PROMPT" = 'Y' ]; then
|
|
:; # noop
|
|
else
|
|
echo "user cancelled" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ -z "$NO_REMOVE" ]; then
|
|
echo "removing tripwire binaries, scripts, docs and man pages" >&2
|
|
|
|
# binaries
|
|
secure_rm "TRIPWIRE_ROOT/sbin/siggen"
|
|
secure_rm "TRIPWIRE_ROOT/sbin/tripwire"
|
|
secure_rm "TRIPWIRE_ROOT/sbin/twadmin"
|
|
secure_rm "TRIPWIRE_ROOT/sbin/twprint"
|
|
|
|
# scripts
|
|
secure_rm "TRIPWIRE_ROOT/sbin/tripwire_"*
|
|
|
|
# docs
|
|
secure_rm_rf "TRIPWIRE_ROOT/doc/tripwire"
|
|
|
|
# man pages
|
|
secure_rm "TRIPWIRE_ROOT/share/man/man4/twconfig.4"
|
|
secure_rm "TRIPWIRE_ROOT/share/man/man4/twpolicy.4"
|
|
secure_rm "TRIPWIRE_ROOT/share/man/man5/twfiles.5"
|
|
secure_rm "TRIPWIRE_ROOT/share/man/man8/siggen.8"
|
|
secure_rm "TRIPWIRE_ROOT/share/man/man8/tripwire.8"
|
|
secure_rm "TRIPWIRE_ROOT/share/man/man8/twadmin.8"
|
|
secure_rm "TRIPWIRE_ROOT/share/man/man8/twintro.8"
|
|
secure_rm "TRIPWIRE_ROOT/share/man/man8/twprint.8"
|
|
fi
|
|
|
|
|
|
if [ -n "$REMOVE_REPORTS" ]; then
|
|
echo "removing tripwire reports" >&2
|
|
secure_rm "TRIPWIRE_ROOT/lib/tripwire/report"/*.twr
|
|
fi
|
|
|
|
if [ -n "$REMOVE_LOGS" ]; then
|
|
echo "removing tripwire logs" >&2
|
|
secure_rm "TRIPWIRE_LOG_DIR/tripwire_periodic_"*.log
|
|
fi
|
|
|
|
if [ -n "$REMOVE_DB" ]; then
|
|
echo "removing tripwire db" >&2
|
|
secure_rm "TRIPWIRE_ROOT/lib/tripwire"/*.twd*
|
|
fi
|
|
|
|
if [ -n "$REMOVE_KEYS" ]; then
|
|
echo "removing tripwire keys" >&2
|
|
secure_rm "TRIPWIRE_ROOT/etc"/*.key
|
|
fi
|
|
|
|
echo "finished removing tripwire" >&2
|