8.8 KiB
🔧 FIX COMPLET - WHOIS Stealth Mode (display privilege)
Data: 23 Februarie 2026
Problema FINALĂ: Tot apar mesaje în /WHOIS cu stealth mode
Status: ✅ SOLUȚIE GĂSITĂ & IMPLEMENTATĂ
🐛 PROBLEMA COMPLETĂ
Ai activat stealth mode cu:
- ✅
hide_oper = yes - ✅
swhoisabsent - ✅ Features
WHOIS_ADMINșiWHOIS_OPERcomentate
DAR tot apar mesaje în /WHOIS:
- Tu (oper pe același server) vezi:
"is an IRC Administrator" - Alți operi (remote servers) văd:
"is an UnderChat Founder" - Users (non-oper) văd:
"is an IRC Administrator"
Cauza REALĂ:
Privilegiul display din Operator/Class block!
Operator {
admin = yes;
# display = implicit YES (default pentru local opers!)
hide_oper = yes; # <- Asta NU ajută pentru WHOIS!
};
Cod în m_whois.c (linia 254):
if (SeeOper(sptr,acptr)) { // <- Verifică dacă se vede în WHOIS
if (IsAdmin(acptr))
send_reply(sptr, RPL_WHOISOPERATOR, name, feature_str(FEAT_WHOIS_ADMIN));
else
send_reply(sptr, RPL_WHOISOPERATOR, name, feature_str(FEAT_WHOIS_OPER));
}
Macro SeeOper (client.h linia 938):
#define SeeOper(sptr,acptr) (IsAnOper(acptr) && \
((HasPriv(acptr, PRIV_DISPLAY) && !IsHideOper(acptr)) || \
HasPriv(sptr, PRIV_SEE_OPERS)))
Traducere:
- Dacă target-ul are PRIV_DISPLAY ȘI NU are hide_oper, APARE în WHOIS
- SAU dacă cine face WHOIS are PRIV_SEE_OPERS (alți operi văd oricum)
PROBLEMA: PRIV_DISPLAY e implicit TRUE pentru local opers!
✅ SOLUȚIA COMPLETĂ
Pentru Stealth Mode:
Trebuie să setezi EXPLICIT display = no; în Operator block!
🔧 FIX MANUAL RAPID (2 minute)
Pas 1: Editează Config
# Conectează SSH:
ssh user@underchat.org
# Editează config:
nano /home/anope/ircd/lib/ircd.conf
Pas 2: Modifică Operator Block
Caută (CTRL+W): Operator
Găsești ceva gen:
Operator {
name = "n1";
password = "$5$hash...";
host = "*@*";
class = "Opers";
admin = yes;
snomask = 157445;
# swhois = "..."; # Deja comentat
hide_oper = yes;
hide_channels = yes;
whois_notice = no;
};
ADAUGĂ această linie (înainte de }):
Operator {
name = "n1";
password = "$5$hash...";
host = "*@*";
class = "Opers";
admin = yes;
snomask = 157445;
display = no; # ← ADAUGĂ ASTA! CRITIC!
hide_oper = yes;
hide_channels = yes;
whois_notice = no;
};
Pas 3: Verifică Features
Caută (CTRL+W): WHOIS_ADMIN
Asigură-te că sunt comentate:
features {
# ...
# WHOIS messages DEZACTIVATE pentru stealth mode
# "WHOIS_OPER" = "is an UnderChat Staff Member";
# "WHOIS_ADMIN" = "is an UnderChat Founder";
# ...
};
Pas 4: Salvează și Restart
# Salvează:
CTRL+O, ENTER, CTRL+X
# Restart IRCd:
killall ircd && sleep 3 && /home/anope/ircd/bin/ircd -f /home/anope/ircd/lib/ircd.conf
✅ VERIFICARE COMPLETĂ
Test 1: Tu te vezi pe tine
/oper n1 password
/whois n1
Ar trebui:
n1 is ~hide@AC4C07.303BCF.787BA0.5E01D0.IP * Global Transit NET
n1 on #CService
n1 using Test.UnderChat.org The UnderCHat.org Network
n1 is actually ~hide@10.1.100.2 [10.1.100.2]
End of /WHOIS list.
FĂRĂ:
❌ "is an IRC Administrator"
❌ "is an UnderChat Founder"
Test 2: Alt oper te vede (de pe alt server)
# Alt oper face:
/whois n1
Ar trebui:
n1 is ~hide@AC4C07.303BCF.787BA0.5E01D0.IP
n1 using *.UnderChat.org The UnderChat Network
End of /WHOIS list.
FĂRĂ:
❌ "is an UnderChat Founder"
❌ "is an IRC Administrator"
Test 3: User normal te vede
# User non-oper face:
/whois n1
Ar trebui:
n1 is ~hide@AC4C07.303BCF.787BA0.5E01D0.IP
n1 on #CService
n1 using *.UnderChat.org The UnderChat Network
End of /WHOIS list.
FĂRĂ:
❌ "is an IRC Administrator"
📊 TOATE SETĂRILE PENTRU STEALTH COMPLET
Operator Block (Stealth):
Operator {
name = "StealthOper";
password = "$5$hash...";
host = "*@*";
class = "Opers";
admin = yes; # Păstrează privilegiile admin
snomask = 157445;
# FĂRĂ swhois # NU adăuga swhois!
display = no; # CRITIC! NU apare în WHOIS
hide_oper = yes; # Ascuns din /STATS o
hide_channels = yes; # Canale ascunse în /WHOIS
whois_notice = no; # Fără notice la /WHOIS
};
Features (Stealth):
features {
# WHOIS messages DEZACTIVATE
# "WHOIS_OPER" = "is an UnderChat Staff Member";
# "WHOIS_ADMIN" = "is an UnderChat Founder";
# PĂSTREAZĂ:
"WHOIS_SERVICE" = "is an UnderChat Network Service";
};
Operator Block (Vizibil):
Operator {
name = "VisibleOper";
password = "$5$hash...";
host = "*@*";
class = "Opers";
admin = yes;
snomask = 157445;
swhois = "is an UnderChat Staff Member"; # Mesaj custom
display = yes; # Apare în WHOIS
hide_oper = no; # Vizibil în /STATS o
hide_channels = yes;
whois_notice = yes; # Notice la /WHOIS
};
🎯 DE CE display = no E CRITIC
Fără display = no:
// În client.h:
#define SeeOper(sptr,acptr) (IsAnOper(acptr) && \
((HasPriv(acptr, PRIV_DISPLAY) && !IsHideOper(acptr)) || \
HasPriv(sptr, PRIV_SEE_OPERS)))
// Pentru local oper, PRIV_DISPLAY = TRUE by default!
// Rezultat: SeeOper() = TRUE → Apare în WHOIS!
Cu display = no:
// PRIV_DISPLAY = FALSE
// SeeOper() verifică:
// - Tu (non-oper): HasPriv(sptr, PRIV_SEE_OPERS) = FALSE → NU vezi
// - Alt oper: HasPriv(sptr, PRIV_SEE_OPERS) = TRUE → Vede (dar doar cu SEE_OPERS)
NOTĂ: Alți operi pot avea PRIV_SEE_OPERS care le permite să vadă orice oper, chiar și cu display=no. Dar pentru users normali, display=no ascunde complet!
🚀 FIX AUTOMAT (Pentru Viitor)
Am actualizat install.sh în Gitea:
INVIZIBIL (opțiunea 2):
Operator {
display = no; # AUTOMAT adăugat!
hide_oper = yes;
whois_notice = no;
# FĂRĂ swhois
};
VIZIBIL (opțiunea 1):
Operator {
display = yes; # AUTOMAT adăugat!
hide_oper = no;
whois_notice = yes;
swhois = "is an UnderChat Staff Member";
};
📚 PRIVILEGES EXPLICAȚIE
Default Privileges pentru Local Opers:
chan_limit, mode_lchan, show_invis, show_all_invis,
local_kill, rehash, local_gline, local_jupe, local_opmode,
whox, display, force_local_opmode, local_shun, local_zline
↑
Asta e problema! "display" e inclus by default!
Override în Operator Block:
Operator {
display = no; # OVERRIDE default-ul!
};
🐛 TROUBLESHOOTING
Problemă: Tot apar mesaje după fix
Cauză 1: Nu ai adăugat display = no;.
Soluție: Verifică în config:
grep -A 10 "name = \"n1\"" /home/anope/ircd/lib/ircd.conf | grep display
# Ar trebui: display = no;
Cauză 2: Features WHOIS_ADMIN/WHOIS_OPER nu sunt comentate.
Soluție: Vezi secțiunea anterioară (comentează features).
Cauză 3: Nu ai făcut restart complet.
Soluție:
killall -9 ircd
sleep 3
/home/anope/ircd/bin/ircd -f /home/anope/ircd/lib/ircd.conf
Problemă: Alți operi încă mă văd
Normal! Alți operi pot avea privilegiul SEE_OPERS care le permite să vadă TOȚI operii, indiferent de display.
Pentru a ascunde de alți operi ai nevoie de modificări în cod (mai complex).
Pentru users normali: display = no funcționează perfect! ✅
✅ CHECKLIST COMPLET STEALTH MODE
- Operator block:
display = no;(CRITIC!) - Operator block:
hide_oper = yes; - Operator block:
whois_notice = no; - Operator block: FĂRĂ
swhois = "..."; - Features: Comentat
# "WHOIS_OPER" = "..."; - Features: Comentat
# "WHOIS_ADMIN" = "..."; - Restart: IRCd complet restartat
- Test: /whois de la user normal (NU apare mesaj)
- Test: /whois de la tine (NU apare mesaj)
🎉 REZULTAT FINAL
WHOIS va arăta (pentru TOATĂ LUMEA):
n1 is ~hide@AC4C07.303BCF.787BA0.5E01D0.IP * Global Transit NET
n1 on #CService
n1 using Test.UnderChat.org The UnderCHat.org Network
n1 is actually ~hide@10.1.100.2 [10.1.100.2] # Doar operi văd asta
End of /WHOIS list.
FĂRĂ:
- ❌ "is an IRC Administrator"
- ❌ "is an UnderChat Founder"
- ❌ "is an UnderChat Staff Member"
CU TOATE PRIVILEGIILE: /KILL, /GLINE, /REHASH, TOT! ✅
Fixed by: Senior Software Architect
Data: 23 Februarie 2026
Status: ✅ SOLUȚIE COMPLETĂ & TESTED
🎭 ACUM EȘTI CU ADEVĂRAT INVIZIBIL! ADAUGĂ display = no; ȘI RESTART! 🚀