debian-cis/lib/common.sh

153 lines
3.2 KiB
Bash
Raw Normal View History

# shellcheck shell=bash
# CIS Debian Hardening common functions
# run-shellcheck
2016-04-04 15:05:10 +02:00
#
# File Backup functions
#
backup_file() {
FILE=$1
if [ ! -f "$FILE" ]; then
2016-04-04 15:05:10 +02:00
crit "Cannot backup $FILE, it's not a file"
FNRET=1
else
TARGET=$(echo "$FILE" | sed -s -e 's/\//./g' -e 's/^.//' -e "s/$/.$(date +%F-%H_%M_%S)/")
2016-04-04 15:05:10 +02:00
TARGET="$BACKUPDIR/$TARGET"
debug "Backuping $FILE to $TARGET"
cp -a "$FILE" "$TARGET"
2020-12-07 14:53:10 +01:00
# shellcheck disable=2034
2016-04-04 15:05:10 +02:00
FNRET=0
fi
}
#
2016-04-01 16:48:31 +02:00
# Logging functions
2016-04-04 15:05:10 +02:00
#
2016-04-01 16:48:31 +02:00
case $LOGLEVEL in
silent)
MACHINE_LOG_LEVEL=0
;;
2020-12-04 14:08:01 +01:00
error)
MACHINE_LOG_LEVEL=1
;;
warning)
MACHINE_LOG_LEVEL=2
;;
ok)
MACHINE_LOG_LEVEL=3
;;
info)
MACHINE_LOG_LEVEL=4
;;
debug)
MACHINE_LOG_LEVEL=5
;;
*)
MACHINE_LOG_LEVEL=4 ## Default loglevel value to info
;;
2016-04-01 16:48:31 +02:00
esac
_logger() {
COLOR=$1
shift
test -z "$SCRIPT_NAME" && SCRIPT_NAME=$(basename "$0")
builtin echo "$*" | /usr/bin/logger -t "CIS_Hardening[$$] $SCRIPT_NAME" -p "user.info"
SCRIPT_NAME_FIXEDLEN=$(printf "%-25.25s" "$SCRIPT_NAME")
cecho "$COLOR" "$SCRIPT_NAME_FIXEDLEN $*"
2016-04-01 16:48:31 +02:00
}
becho() {
toprint=$(echo "$*" | /usr/bin/tr '\n' ' ')
builtin echo "$toprint" | /usr/bin/logger -t "CIS_Hardening[$$]" -p "user.info"
builtin echo "$toprint"
}
2020-12-04 14:08:01 +01:00
cecho() {
2016-04-01 16:48:31 +02:00
COLOR=$1
shift
builtin echo -e "${COLOR}$*${NC}"
2016-04-01 16:48:31 +02:00
}
2020-12-04 14:08:01 +01:00
crit() {
if [ "${BATCH_MODE:-0}" -eq 1 ]; then
BATCH_OUTPUT="$BATCH_OUTPUT KO{$*}"
else
2020-12-10 09:50:33 +01:00
if [ "$MACHINE_LOG_LEVEL" -ge 1 ]; then _logger "$BRED" "[ KO ] $*"; fi
fi
2016-04-17 23:10:47 +02:00
# This variable incrementation is used to measure failure or success in tests
2020-12-04 14:08:01 +01:00
CRITICAL_ERRORS_NUMBER=$((CRITICAL_ERRORS_NUMBER + 1))
2016-04-01 16:48:31 +02:00
}
2020-12-04 14:08:01 +01:00
warn() {
if [ "${BATCH_MODE:-0}" -eq 1 ]; then
BATCH_OUTPUT="$BATCH_OUTPUT WARN{$*}"
else
2020-12-10 09:50:33 +01:00
if [ "$MACHINE_LOG_LEVEL" -ge 2 ]; then _logger "$BYELLOW" "[WARN] $*"; fi
fi
2016-04-01 16:48:31 +02:00
}
2020-12-04 14:08:01 +01:00
ok() {
if [ "${BATCH_MODE:-0}" -eq 1 ]; then
BATCH_OUTPUT="$BATCH_OUTPUT OK{$*}"
else
2020-12-10 09:50:33 +01:00
if [ "$MACHINE_LOG_LEVEL" -ge 3 ]; then _logger "$BGREEN" "[ OK ] $*"; fi
fi
2016-04-04 11:23:03 +02:00
}
2020-12-04 14:08:01 +01:00
info() {
if [ "$MACHINE_LOG_LEVEL" -ge 4 ]; then _logger '' "[INFO] $*"; fi
2016-04-01 16:48:31 +02:00
}
2020-12-04 14:08:01 +01:00
debug() {
if [ "$MACHINE_LOG_LEVEL" -ge 5 ]; then _logger "$GRAY" "[DBG ] $*"; fi
}
exception() {
# Trap exit code is the same as the trapped one unless we call an explicit exit
TRAP_CODE=$?
if [ "$ACTIONS_DONE" -ne 1 ]; then
if [ "$BATCH_MODE" -eq 1 ]; then
BATCH_OUTPUT="KO $SCRIPT_NAME $BATCH_OUTPUT KO{Unexpected exit code: $TRAP_CODE}"
becho "$BATCH_OUTPUT"
else
crit "Check failed with unexpected exit code: $TRAP_CODE"
fi
exit 1 # Means critical status
fi
}
#
# sudo wrapper
# issue crit state if not allowed to perform sudo
# for the specified command
#
sudo_wrapper() {
2020-12-04 14:08:01 +01:00
if sudo -l "$@" >/dev/null 2>&1; then
sudo -n "$@"
else
crit "Not allowed to \"sudo -n $*\" "
fi
}
#
# Math functions
#
div() {
local _d=${3:-2}
local _n=0000000000
_n=${_n:0:$_d}
if (($1 == 0)); then
echo "0"
return
fi
if (($2 == 0)); then
echo "N.A"
return
fi
local _r=$(($1$_n / $2))
_r=${_r:0:-$_d}.${_r: -$_d}
echo $_r
}