538 lines
13 KiB
Bash
Executable File
538 lines
13 KiB
Bash
Executable File
#!/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
|
|
|