65 lines
1.8 KiB
Bash
Executable File
65 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# OPSEC Hostname Randomization
|
|
# Config-aware: reads HOSTNAME_PATTERN and HOSTNAME_CUSTOM_PREFIX from /etc/opsec/opsec.conf
|
|
# Patterns: desktop (desktop-XXXX), random (8 random chars), custom (PREFIX-XXXX)
|
|
|
|
if [ "$EUID" -ne 0 ]; then
|
|
echo "Please run as root"
|
|
exit 1
|
|
fi
|
|
|
|
# Source config if available
|
|
OPSEC_LIB="/usr/local/lib/opsec/opsec-lib.sh"
|
|
if [ -f "$OPSEC_LIB" ]; then
|
|
. "$OPSEC_LIB"
|
|
opsec_load_config 2>/dev/null || true
|
|
else
|
|
opsec_green() { echo -e "\033[38;5;49m[+] $*\033[0m"; }
|
|
opsec_info() { echo -e "\033[38;5;39m[~] $*\033[0m"; }
|
|
opsec_dim() { echo -e "\033[38;5;244m $*\033[0m"; }
|
|
fi
|
|
|
|
# Config values with defaults
|
|
PATTERN="${HOSTNAME_PATTERN:-desktop}"
|
|
PREFIX="${HOSTNAME_CUSTOM_PREFIX:-}"
|
|
|
|
RAND_HEX=$(head -c 2 /dev/urandom | od -An -tx1 | tr -d ' ')
|
|
OLD_HOSTNAME=$(hostname)
|
|
|
|
case "$PATTERN" in
|
|
desktop)
|
|
NEW_HOSTNAME="desktop-${RAND_HEX}"
|
|
;;
|
|
random)
|
|
NEW_HOSTNAME=$(head -c 4 /dev/urandom | od -An -tx1 | tr -d ' ')
|
|
;;
|
|
custom)
|
|
NEW_HOSTNAME="${PREFIX}-${RAND_HEX}"
|
|
;;
|
|
*)
|
|
NEW_HOSTNAME="desktop-${RAND_HEX}"
|
|
;;
|
|
esac
|
|
|
|
opsec_info "Randomizing hostname..."
|
|
opsec_dim "Old: ${OLD_HOSTNAME}"
|
|
opsec_dim "New: ${NEW_HOSTNAME} (pattern: ${PATTERN})"
|
|
|
|
# Set hostname via hostnamectl (persistent)
|
|
hostnamectl set-hostname "$NEW_HOSTNAME" 2>/dev/null || {
|
|
echo "$NEW_HOSTNAME" > /etc/hostname
|
|
hostname "$NEW_HOSTNAME"
|
|
}
|
|
|
|
# Update /etc/hosts to match
|
|
if grep -q "$OLD_HOSTNAME" /etc/hosts 2>/dev/null; then
|
|
sed -i "s/$OLD_HOSTNAME/$NEW_HOSTNAME/g" /etc/hosts
|
|
fi
|
|
|
|
# Ensure localhost entries exist
|
|
if ! grep -q "127.0.0.1.*$NEW_HOSTNAME" /etc/hosts; then
|
|
sed -i "/127\.0\.0\.1/s/$/ $NEW_HOSTNAME/" /etc/hosts
|
|
fi
|
|
|
|
opsec_green "Hostname randomized to: ${NEW_HOSTNAME}"
|