72 lines
2.0 KiB
Bash
Executable File
72 lines
2.0 KiB
Bash
Executable File
#!/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"
|