#!/bin/bash # grant-dev.sh - Donne les droits de dev au current user via ACL # Usage: sudo ./grant-dev.sh [town] [nation] set -euo pipefail if [[ $EUID -ne 0 ]]; then echo "ERROR: Must be run with sudo." >&2 exit 1 fi # --- Ensure setfacl is installed --- if ! command -v setfacl &>/dev/null; then echo "[INFO] setfacl not found. Installing acl..." if command -v apt &>/dev/null; then apt update -qq && apt install -y acl elif command -v dnf &>/dev/null; then dnf install -y acl elif command -v yum &>/dev/null; then yum install -y acl elif command -v apk &>/dev/null; then apk add acl else echo "ERROR: Cannot detect package manager. Install 'acl' manually." >&2 exit 1 fi echo "[INFO] acl package installed." fi # --- Detect developer user --- DEV_USER="${SUDO_USER:-$USER}" if [[ -z "$DEV_USER" || "$DEV_USER" == "root" ]]; then echo "ERROR: Could not detect developer user." >&2 exit 1 fi echo "[INFO] Granting dev access to: $DEV_USER" # --- Target --- NODEPATH_BASE="/opt/apxtowns" DATAPATH_BASE="/var/lib/apxtowns" apply_acl() { local path="$1" echo " → $path" setfacl -R -m "u:${DEV_USER}:rwx" "$path" setfacl -R -d -m "u:${DEV_USER}:rwx" "$path" } if [[ $# -eq 2 ]]; then TOWN="$1" NATION="$2" NODEPATH="${NODEPATH_BASE}/${TOWN}.${NATION}" DATAPATH="${DATAPATH_BASE}/${TOWN}.${NATION}" apply_acl "$NODEPATH" [[ -d "$DATAPATH" ]] && apply_acl "$DATAPATH" else echo "[INFO] No town/nation specified, applying to all instances..." for dir in "$NODEPATH_BASE"/*.*/; do [[ -d "$dir" ]] || continue instance=$(basename "$dir") town="${instance%%.*}" nation="${instance##*.}" echo "[${town}.${nation}]" apply_acl "$NODEPATH_BASE/$instance" [[ -d "$DATAPATH_BASE/$instance" ]] && apply_acl "$DATAPATH_BASE/$instance" done fi echo "" echo "Done. $DEV_USER can now edit files." echo "Verify: getfacl ${NODEPATH_BASE}/*/ 2>/dev/null | head -20"