#!/bin/bash # # Script helper pentru administrare UnderChat IRCd # Limba: Română # # Culori VERDE='\033[0;32m' GALBEN='\033[1;33m' ALBASTRU='\033[0;34m' ROSU='\033[0;31m' NC='\033[0m' PREFIX="${PREFIX:-$HOME/ircd}" IRCD_BIN="$PREFIX/bin/ircd" UMKPASSWD_BIN="$PREFIX/bin/umkpasswd" CONFIG_FILE="${PREFIX}/etc/ircd.conf" LOG_FILE="${PREFIX}/log/ircd.log" # Meniu principal show_menu() { clear # Verifică dacă config există if [ ! -f "$CONFIG_FILE" ]; then echo -e "${ROSU}" echo "╔════════════════════════════════════════╗" echo "║ AVERTISMENT: Config nu găsit! ║" echo "╚════════════════════════════════════════╝" echo -e "${NC}" echo "" echo -e "${GALBEN}Fișierul de configurare nu există la:${NC}" echo " $CONFIG_FILE" echo "" echo -e "${GALBEN}Opțiuni:${NC}" echo " 1) Creare automat config standard" echo " 2) Continue fără config (recomandă-se fix 1)" echo "" read -p "Alege [1-2]: " config_choice if [ "$config_choice" = "1" ]; then create_default_config fi fi echo -e "${ALBASTRU}" echo "╔════════════════════════════════════════╗" echo "║ Administrator UnderChat IRCd ║" echo "║ Versiune: v1.0.1 ║" echo "╚════════════════════════════════════════╝" echo -e "${NC}" echo "" echo -e "${GALBEN}Opțiuni disponibile:${NC}" echo " 1) Pornire server" echo " 2) Oprire server" echo " 3) Restart server" echo " 4) Verifica status" echo " 5) Editare configurare" echo " 6) Vizionare log-uri" echo " 7) Generare parola operator" echo " 8) Test sintaxă configurare" echo " 9) Iesire" echo "" echo -n -e "${GALBEN}Alege opțiune [1-9]:${NC} " } # Funcție pentru creare config standard create_default_config() { echo -e "${ALBASTRU}[+] Creare config standard...${NC}" # Crează directoarele dacă nu există mkdir -p "$(dirname "$CONFIG_FILE")" mkdir -p "$PREFIX/log" mkdir -p "$PREFIX/var" # Crează un config de bază cat > "$CONFIG_FILE" << 'EOFCONFIG' # UnderChat IRCd - Configurare Standard # Generated automat - Please customize! General { name = "irc.underchat.org"; vhost = "127.0.0.1"; description = "UnderChat IRCd Server"; numeric = 1; dns server = "8.8.8.8"; dns server = "1.1.1.1"; }; Admin { Location = "UnderChat Network"; Location = "Underchat Edition"; Contact = "admin@underchat.org"; }; Class { name = "Server"; pingfreq = 1 minutes 30 seconds; connectfreq = 5 minutes; maxlinks = 1; sendq = 9000000; }; Class { name = "Local"; pingfreq = 1 minutes 30 seconds; sendq = 160000; maxlinks = 100; usermode = "+iw"; }; Class { name = "Other"; pingfreq = 1 minutes 30 seconds; sendq = 160000; maxlinks = 2048; usermode = "+ix"; }; Class { name = "Opers"; pingfreq = 1 minutes 30 seconds; sendq = 160000; maxlinks = 20; local = no; freeform = yes; show_invis = yes; see_chan = yes; usermode = "+W"; }; Client { host = "*@*"; ip = "*@*"; class = "Other"; maxlinks = 6; }; Jupe { nick = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"; nick = "ChanServ,NickServ"; }; Port { vhost = "127.0.0.1" 4400; server = yes; hidden = yes; }; Port { vhost = "127.0.0.1" 6667; hidden = yes; }; Port { vhost = "127.0.0.1" 6697; ssl = yes; hidden = yes; }; Operator { name = "root"; password = "$PLAIN$password"; host = "*@*"; class = "Opers"; admin = yes; }; features { "NETWORK" = "underchat.org"; "DOMAINNAME" = "underchat.org"; "LOG" = "SYSTEM" "FILE" "EOFCONFIG_PREFIX/log/ircd.log"; "LOG" = "SYSTEM" "LEVEL" "CRIT"; "HUB" = "FALSE"; "RELIABLE_CLOCK" = "FALSE"; "WALLOPS_OPER_ONLY" = "TRUE"; "HOST_HIDING" = "TRUE"; "HIDDEN_HOST" = "users.underchat.org"; "MAXCHANNELSPERUSER" = "60"; "NICKLEN" = "12"; "PINGFREQUENCY" = "120"; "SETHOST" = "TRUE"; }; EOFCONFIG # Setează permisiuni chmod 600 "$CONFIG_FILE" echo -e "${VERDE}[+] Config standard creat: $CONFIG_FILE${NC}" echo -e "${GALBEN}[!] IMPORTANT: Editează config și schimbă parola operator!${NC}" echo -e "${GALBEN} 1. Deschide config: nano $CONFIG_FILE${NC}" echo -e "${GALBEN} 2. Schimbă parola: $PREFIX/bin/umkpasswd${NC}" } # Pornire server start_server() { echo -e "${VERDE}[+] Pornire server...${NC}" # Verifica dacă config există if [ ! -f "$CONFIG_FILE" ]; then echo -e "${ROSU}[-] Config nu găsit!${NC}" echo -e "${GALBEN}[!] Creează config cu admin.sh opțiune 5${NC}" echo "" echo -n "Apasa Enter pentru a continua..." read return 1 fi if ! [ -x "$IRCD_BIN" ]; then echo -e "${ROSU}[-] Executabil ircd nu găsit la: $IRCD_BIN${NC}" echo "" echo -n "Apasa Enter pentru a continua..." read return 1 fi # Verifica dacă e deja pornit if pgrep -f "$IRCD_BIN" > /dev/null; then echo -e "${ROSU}[-] Server deja pornit!${NC}" echo "" echo -n "Apasa Enter pentru a continua..." read return 1 fi # Porneste server în background nohup "$IRCD_BIN" -f "$CONFIG_FILE" > "$LOG_FILE" 2>&1 & sleep 2 if pgrep -f "$IRCD_BIN" > /dev/null; then echo -e "${VERDE}[+] Server pornit cu succes (PID: $(pgrep -f "$IRCD_BIN"))${NC}" echo "" echo -n "Apasa Enter pentru a continua..." read return 0 else echo -e "${ROSU}[-] Eșec la pornirea serverului!${NC}" echo "" echo -e "${GALBEN}Ultimele 10 rânduri din log:${NC}" tail -10 "$LOG_FILE" echo "" echo -n "Apasa Enter pentru a continua..." read return 1 fi } # Oprire server stop_server() { echo -e "${VERDE}[+] Oprire server...${NC}" local pid=$(pgrep -f "$IRCD_BIN") if [ -z "$pid" ]; then echo -e "${ROSU}[-] Server nu este pornit!${NC}" echo "" echo -n "Apasa Enter pentru a continua..." read return 1 fi kill "$pid" sleep 2 if ! pgrep -f "$IRCD_BIN" > /dev/null; then echo -e "${VERDE}[+] Server oprit cu succes${NC}" echo "" echo -n "Apasa Enter pentru a continua..." read return 0 else echo -e "${GALBEN}[*] Forțare oprire...${NC}" kill -9 "$pid" sleep 1 echo -e "${VERDE}[+] Server oprit forțat${NC}" echo "" echo -n "Apasa Enter pentru a continua..." read return 0 fi } # Restart server restart_server() { echo -e "${VERDE}[+] Restart server...${NC}" stop_server sleep 2 start_server # Pauza este gestionată deja de funcțiile stop_server și start_server } # Status server check_status() { echo -e "${VERDE}[+] Status server:${NC}" echo "" local pid=$(pgrep -f "$IRCD_BIN") if [ -z "$pid" ]; then echo -e "${ROSU}Status: OPRIT${NC}" echo "" echo -n "Apasa Enter pentru a continua..." read return 1 fi echo -e "${VERDE}Status: PORNIT${NC}" echo "PID: $pid" # Informații proces echo "" echo -e "${GALBEN}Detalii proces:${NC}" ps aux | grep "$pid" | grep -v grep | awk '{print " CPU: " $3 "% | RAM: " $6 " KB | Timp: " $11}' # Porturi ascultare echo "" echo -e "${GALBEN}Porturi ascultate:${NC}" netstat -tlnp 2>/dev/null | grep "$pid" | awk '{print " Port " $4 " (" $1 ")"}' # Log ultimele linii echo "" echo -e "${GALBEN}Ultimele intrări în log:${NC}" tail -5 "$LOG_FILE" | sed 's/^/ /' echo "" echo -n "Apasa Enter pentru a continua..." read return 0 } # Editare configurare edit_config() { echo -e "${VERDE}[+] Editare configurare...${NC}" if [ ! -f "$CONFIG_FILE" ]; then echo -e "${ROSU}[-] Fișier configurare nu găsit: $CONFIG_FILE${NC}" echo "" echo -n "Apasa Enter pentru a continua..." read return 1 fi # Backup înainte de editare cp "$CONFIG_FILE" "${CONFIG_FILE}.bak.$(date +%s)" echo -e "${GALBEN}[*] Backup creat: ${CONFIG_FILE}.bak${NC}" # Deschide editor ${EDITOR:-nano} "$CONFIG_FILE" # Test sintaxă echo "" echo -e "${GALBEN}[*] Testare sintaxă...${NC}" if "$IRCD_BIN" -c -f "$CONFIG_FILE" 2>&1 | head -20; then echo -e "${VERDE}[+] Sintaxă OK${NC}" else echo -e "${ROSU}[-] Erori în configurare!${NC}" echo -e "${GALBEN}[*] Poți restaura backup-ul:${NC}" echo " cp ${CONFIG_FILE}.bak.* $CONFIG_FILE" fi echo "" echo -n "Apasa Enter pentru a continua..." read return 0 } # Vizionare log-uri view_logs() { echo -e "${VERDE}[+] Opțiuni log-uri:${NC}" echo " 1) Ultimele 20 de rânduri" echo " 2) Urmărire live (Ctrl+C pentru ieșire)" echo " 3) Căutare text" echo " 4) Înapoi" echo "" echo -n -e "${GALBEN}Alege [1-4]:${NC} " read choice case $choice in 1) echo "" echo -e "${ALBASTRU}Ultimele 20 de rânduri:${NC}" tail -20 "$LOG_FILE" echo "" echo -n "Apasa Enter pentru a continua..." read ;; 2) echo "" echo -e "${ALBASTRU}Urmărire live (apasa Ctrl+C pentru ieșire):${NC}" tail -f "$LOG_FILE" echo "" echo -n "Apasa Enter pentru a continua..." read ;; 3) echo "" read -p "$(echo -e ${GALBEN}Cuvânt cheie de căutare:${NC} )" search_term echo "" echo -e "${ALBASTRU}Rezultate:${NC}" grep -i "$search_term" "$LOG_FILE" | tail -20 echo "" echo -n "Apasa Enter pentru a continua..." read ;; 4) return 0 ;; *) echo -e "${ROSU}Opțiune necunoscută!${NC}" echo "" echo -n "Apasa Enter pentru a continua..." read ;; esac } # Generare parola generate_password() { echo -e "${VERDE}[+] Generator parola operator${NC}" echo "" if [ ! -x "$UMKPASSWD_BIN" ]; then echo -e "${ROSU}[-] Utilitar umkpasswd nu găsit!${NC}" echo -e "${GALBEN}[*] Asigură-te că ai rulat install.sh${NC}" echo "" echo -n "Apasa Enter pentru a continua..." read return 1 fi echo -e "${GALBEN}Utilizează utilarul umkpasswd:${NC}" "$UMKPASSWD_BIN" echo "" echo -e "${GALBEN}[*] Copiază hash-ul și actualizează config:${NC}" echo " nano $CONFIG_FILE" echo " # Cauta secțiunea Operator și înlocuiește password" echo "" echo -n "Apasa Enter pentru a continua..." read return 0 } # Test configurare test_config() { echo -e "${VERDE}[+] Test sintaxă configurare...${NC}" echo "" if [ ! -f "$CONFIG_FILE" ]; then echo -e "${ROSU}[-] Fișier configurare nu găsit: $CONFIG_FILE${NC}" echo "" echo -n "Apasa Enter pentru a continua..." read return 1 fi if [ ! -x "$IRCD_BIN" ]; then echo -e "${ROSU}[-] Executabil ircd nu găsit!${NC}" echo "" echo -n "Apasa Enter pentru a continua..." read return 1 fi echo -e "${GALBEN}Testare fișier: $CONFIG_FILE${NC}" echo "" if "$IRCD_BIN" -c -f "$CONFIG_FILE" 2>&1; then echo "" echo -e "${VERDE}[+] Configurare validă!${NC}" echo "" echo -n "Apasa Enter pentru a continua..." read return 0 else echo "" echo -e "${ROSU}[-] Erori în configurare detectate!${NC}" echo "" echo -n "Apasa Enter pentru a continua..." read return 1 fi } # Funcție principală main() { while true; do show_menu read choice case $choice in 1) start_server ;; 2) stop_server ;; 3) restart_server ;; 4) check_status ;; 5) edit_config ;; 6) view_logs ;; 7) generate_password ;; 8) test_config ;; 9) echo -e "${VERDE}La revedere!${NC}" exit 0 ;; *) echo -e "${ROSU}Opțiune necunoscută!${NC}" echo "" echo -n "Apasa Enter pentru a continua..." read ;; esac done } # Lansare main