sp-hydra-veil-core/lib/steps/sudoers.sh

69 lines
No EOL
1.7 KiB
Bash

#!/bin/bash
# lib/steps/sudoers.sh — sudoers + directorios XDG
step_sudoers() {
print_section "Permissions & Directories"
log_step "sudoers + XDG directories" 6 $TOTAL_STEPS
_setup_sudoers
_create_directories
}
_setup_sudoers() {
local tmp
tmp=$(mktemp)
cat > "$tmp" << EOF
# hydraveil — generado por installer $(date '+%Y-%m-%d')
# NO editar manualmente
Defaults!${SINGBOX_WRAPPER} !requiretty
${USER} ALL=(root) NOPASSWD: ${SINGBOX_WRAPPER}
EOF
if ! sudo visudo -c -f "$tmp" &>/dev/null; then
rm -f "$tmp"
log_error "sudoers inválido — abortando para evitar lockout"
exit 1
fi
sudo cp "$tmp" "$SUDOERS_PATH"
sudo chmod 440 "$SUDOERS_PATH"
rm -f "$tmp"
log_ok "sudoers instalado → ${SUDOERS_PATH}"
}
_create_directories() {
local -a dirs=(
# XDG data
"$HV_DATA_DIR/configs"
"$HV_DATA_DIR/runtime"
"$HV_DATA_DIR/applications"
"$HV_DATA_DIR/profiles"
"$HV_DATA_DIR/ticket_data"
"$HV_DATA_DIR/incidents"
# XDG config
"$HV_CONFIG_DIR/profiles"
"$HV_CONFIG_DIR/ticketing"
# XDG state
"$HV_STATE_DIR/sessions"
"$HV_STATE_DIR/tor"
# XDG cache
"$HV_CACHE_DIR"
)
for dir in "${dirs[@]}"; do
mkdir -p "$dir"
chmod 700 "$dir"
log_ok "${dir}"
done
# Log file con permisos de usuario ANTES de que el wrapper lo toque
local log_file="$SINGBOX_LOG_FILE"
if [ ! -f "$log_file" ]; then
touch "$log_file"
chmod 600 "$log_file"
log_ok "Log file creado → ${log_file}"
else
log_ok "Log file ya existe → ${log_file}"
fi
}