RE:NODE

DayZ bikey soubory a kontrola podpisů: oprava kicků kvůli modům

Text: Tým RE:NODE
15 min čtení


Hráč, který je v DayZ vyhozen na načítací obrazovce s chybou podpisu, má skoro vždy jediný problém: některý z modů, které načetl, je podepsaný klíčem, který server ve své složce keys nemá. Oprava spočívá v tom, že zkopíruješ soubor .bikey ze složky keys daného modu do složky keys na serveru a server restartuješ - a uděláš to znovu při každé aktualizaci modu. Zbytek tohoto návodu vysvětluje, proč to funguje, jak poznat, kterému modu klíč chybí, proč mody jen pro server klíč nepotřebují a jak zabránit tomu, aby klíče zastarávaly a problém se nevracel po každé aktualizaci z Workshopu.

Tento článek se věnuje jen klíčům a podpisům. Instalaci serveru, porty a ekonomiku lootu najdeš v kompletním návodu na DayZ server, každý řádek konfiguračního souboru pak v článku serverDZ.cfg vysvětleno.

Co ověřování podpisů ve skutečnosti kontroluje#

Obsah DayZ se distribuuje v souborech .pbo - zabalených archivech modelů, textur, konfigurací a skriptů - ve složce addons daného modu. Vedle každého .pbo leží soubor .bisign: podpis vytvořený autorem modu soukromým klíčem, který nikdy neopustí autorův počítač. Odpovídající veřejný klíč je .bikey, který autor přikládá do složky keys modu, aby servery mohly podpisy ověřit.

Když se hráč připojí k serveru s verifySignatures = 2, engine požádá klienta, aby prokázal, že každý načtený .pbo nese platný podpis klíče, kterému server důvěřuje. „Důvěřuje“ znamená jediné: soubor .bikey s tímto názvem a obsahem leží ve složce keys na serveru. Pokud některý načtený .pbo nemá podpis, má poškozený podpis nebo je podepsaný klíčem, který server nemá, hráč je vyhozen.

Tři soubory, tři úlohy:

SouborKde ležíCo to je
.pbo@Mod/addons/Samotný zabalený obsah
.bisign@Mod/addons/, vedle každého .pboAutorův podpis jednoho konkrétního .pbo
.bikey@Mod/keys/, poté zkopírovaný do keys/ na serveruVeřejný klíč, který tyto podpisy ověřuje

Soubor s podpisem se jmenuje podle .pbo i podle klíče, který ho podepsal, takže autor modu s klíčem pojmenovaným MyMod vytvoří takovéto dvojice:

code
@MyMod/    addons/        mymod_core.pbo        mymod_core.pbo.MyMod.bisign        mymod_items.pbo        mymod_items.pbo.MyMod.bisign    keys/        MyMod.bikey    meta.cpp    mod.cpp

Důležitý důsledek: server neporovnává soubory bajt po bajtu s vlastní kopií. Kontroluje, že soubory klienta podepsal někdo, komu server důvěřuje. Proto systém zachytí hráče, který upravil .pbo, aby měl průhledné stěny - upravený soubor už nesedí k podpisu - ale také proto má důvěra klíči váhu: přijato bude cokoli podepsané tímto klíčem.

Je také dobré mít jasno v tom, kdo vlastně vyhazuje. Ověřování podpisů je součást herního enginu, nastavuje se v serverDZ.cfg a funguje bez ohledu na to, jestli běží BattlEye. BattlEye je samostatná anticheat vrstva, která sleduje běžící procesy a paměť. Hráči i spousta návodů viní z kicků kvůli podpisu BattlEye, protože se obojí děje ve stejném okamžiku připojování, ale žádné nastavení BattlEye chybějící klíč nespraví. Článek BattlEye a Easy Anti-Cheat na serverech tuto hranici popisuje napříč hrami.

verifySignatures a nastavení kolem něj#

Nastavení je jediný řádek v serverDZ.cfg:

serverDZ.cfg
verifySignatures = 2;allowFilePatching = 0;forceSameBuild = 1;

Oficiální dokumentace Bohemie k DayZ uvádí 2 jako jedinou podporovanou hodnotu. Starší hry Arma měly slabší režim 1, který DayZ nepoužívá, a 0 kontrolu vypíná. Běh s 0 se na fórech občas navrhuje jako rychlá oprava chyb s klíči. Kicky sice zastaví, ale stejným způsobem, jako když odstraníš zámek, abys neztrácel klíč: každý klient teď může načíst jakýkoli upravený soubor a tvůj server ochotně přijme hráče, jehož lokální kopie modu byla upravena tak, aby ukazovala loot skrz stěny. Nech 2 a oprav klíč.

Dvě nastavení vedle patří do stejného obrazu:

  • allowFilePatching = 0 odmítá klienty spuštěné s parametrem -filePatching, který hře dovoluje načítat volné nezabalené soubory z disku místo podepsaných .pbo. Volné soubory nemají podpisy, takže file patching je díra přímo skrz kontrolu podpisů. Důvod ho zapnout má jen vývojář modů, který testuje lokálně.
  • forceSameBuild = 1 odmítá klienty s jiným buildem hry. To je kontrola verze, ne podpisu, ale kicky způsobuje ve stejném okamžiku a po patchi hry bývá často skutečnou příčinou toho, čemu hráči říkají „zase ta věc s podpisem“.

Detail, který ušetří čas: kontrola se týká toho, co načítá klient, ne toho, co spouští server. Server čte vlastní mody, aniž by jejich podpisy ověřoval proti své složce keys. Složka keys je čistě seznam veřejných klíčů, kterými smí být soubory klienta podepsané.

Složka keys#

Složka keys na serveru leží v kořenovém adresáři serveru, vedle DayZServer_x64.exe ve Windows nebo DayZServer v Linuxu, a vedle složek @Mod. Čerstvá instalace už obsahuje jeden soubor:

code
keys/    dayz.bikey

dayz.bikey je vlastní klíč Bohemie, který podepisuje soubory .pbo základní hry. Nikdy ho nemaž. Bez něj selže ověření vanilla dat u každého klienta a na server se nedá připojit ani bez jediného modu.

Každý mod načítaný klientem přidá alespoň jeden klíč. Složka na serveru s mody pak vypadá takto:

code
keys/    dayz.bikey    CF.bikey    Dabs.bikey    Expansion.bikey    VPPAdminTools.bikey    BuilderItems.bikey

Názvy jsou takové, jaké autor zvolil, takže se nemusí shodovat s názvem složky modu. Mod pojmenovaný @SomeWeaponsPack může obsahovat SWP_v3.bikey. Jeden autor s více mody je často podepisuje všechny jedním klíčem a velký mod rozdělený na několik položek Workshopu, například DayZ Expansion, může stejný klíč přikládat ke každé části. Zkopírovat klíč, který tam už je, nevadí - přepíše se identický soubor.

Některé mody mají klíč ve složce nazvané Keys nebo key místo keys. Ve Windows na tom nezáleží. Na Linuxovém serveru se ale u cest rozlišují velká a malá písmena, takže skript, který hledá jen v keys/, je přehlédne. Hledej podle přípony souboru, ne podle názvu složky.

Instalace klíče modu krok za krokem#

Pro jeden nový mod, který běží na klientovi nebo na klientovi i serveru, je postup takový:

  1. Zastav server. Klíče a seznam modů se čtou při startu.
  2. Stáhni mod. Přes SteamCMD použij app id klienta, 221100, ne serveru 223350. Soubory skončí v steamapps/workshop/content/221100/<workshop id>/.
  3. Zkopíruj nebo nalinkuj tuto složku do kořenového adresáře serveru pod čitelným názvem, například @SomeMod. Složky z Workshopu se jmenují čísly a spouštěcí řádek plný čísel se nedá udržovat.
  4. Zkopíruj každý .bikey z modu do složky keys na serveru.
  5. Přidej mod do -mod= v pořadí podle závislostí, frameworky první.
  6. Spusť server a než někomu řekneš, že běží, připoj se sám přes DayZ Launcher.
bash
$ steamcmd +force_install_dir /home/dayz/server +login <steam_account> \    +workshop_download_item 221100 1559212036 +quit$ cd /home/dayz/server$ cp -r steamapps/workshop/content/221100/1559212036 @CF$ find @CF -iname '*.bikey' -exec cp -v {} keys/ \;

Na serveru s mnoha mody zkopíruj všechny klíče najednou, ne mod po modu. Z kořenového adresáře serveru v Linuxu:

bash
$ find . -maxdepth 3 -path './@*' -iname '*.bikey' -exec cp -v {} keys/ \;

Ve Windows, ze složky serveru v PowerShellu:

code
Get-ChildItem -Path .\@* -Recurse -Filter *.bikey | Copy-Item -Destination .\keys\

Na panelovém hostingu uděláš totéž přes správce souborů nebo SFTP: otevři každou složku @Mod/keys/, zkopíruj soubor a vlož ho do keys/ v kořeni serveru. Zabere to minutu na mod a právě ta minuta rozhoduje o tom, jestli se někdo připojí. SFTP a správce souborů popisuje připojení a u seznamu víc než pár modů je rychlejší nahrát všechny klíče z lokální kopie modů do keys/ jedním uploadem než proklikávat každou složku.

Krok, který lidé vynechávají, je ten poslední. Server, který čistě nastartoval, prokázal jen to, že umí přečíst své mody. Připojení přes launcher prokáže, že klient s inzerovaným seznamem modů kontrolou projde, a o to ti ve skutečnosti jde.

-mod vs -serverMod: které mody potřebují klíče#

DayZ má dva spouštěcí parametry pro mody a rozdíl rozhoduje o tom, jestli je klíč vůbec potřeba:

ParametrNačítáPotřebuje klíč v keys/
-mod=Server i každý klientAno, každý mod v seznamu
-serverMod=Pouze serverNe
code
-mod=@CF;@Dabs Framework;@DayZ-Expansion-Core;@BuilderItems-serverMod=@MyServerTweaks;@LootLogger

Mody v -mod= se inzerují DayZ Launcheru, který hráče přihlásí k jejich odběru a spustí hru se shodným seznamem. Každý z těchto modů se načítá na klientovi, takže každý se kontroluje, takže každý potřebuje na serveru svůj klíč.

Mody v -serverMod= se nikdy neinzerují a klienti je nikdy nenačítají. Protože je klienti nemají, není co ověřovat a jejich klíče mohou zůstat mimo keys/. Typické mody jen pro server jsou úpravy lootu nebo ekonomiky ve skriptu, logovací nástroje a serverová polovina modů, které mají samostatný serverový balíček. Pokud autor říká, že mod je serverový, patří sem.

Chyby jdou oběma směry a každá vyvolá jiný příznak:

  • Klientský mod umístěný do `-serverMod=`. Server ho načte, hráči ho nikdy nedostanou a vše, co přidává, je pro ně neviditelné nebo rozbité: chybějící předměty, oblečení zobrazené jako chybová textura, menu, která se neotevřou. Žádný kick kvůli podpisu, protože klient mod nikdy nenačte.
  • Serverový mod umístěný do `-mod=`. Každý hráč si ho musí stáhnout, a pokud nemá klíč v keys, je vyhozen každý hráč. Některé mody jen pro server nejsou podepsané vůbec, protože autoři nečekali, že je bude klient načítat - a z té chyby se tak stává zaručený kick pro všechny.

Mody mohou být také čistě klientské: úpravy rozhraní, překryvy map, náhrady zvuků, které server nemusí spouštět. Ty nejsou ani v jednom parametru. Pokud chceš nějaký povolit, dej jeho .bikey do keys/ a hráči, kteří ho mají načtený, ověřením projdou. Hráčů bez něj se to netýká. To je jediný správný způsob, jak povolit volitelný klientský mod, a zároveň důvod šetřit: každý další klíč rozšiřuje to, co server přijímá.

Aktualizace modů bez vyřazení všech hráčů#

Většina kicků kvůli podpisu na zavedených serverech nastává v den, kdy se mod aktualizuje, a příčinou je nesoulad mezi tím, co má server, a tím, co launcher dává hráčům.

Když se mod z Workshopu aktualizuje, hráči, kteří ho odebírají, dostanou novou verzi automaticky přes Steam. Pokud server pořád má starou verzi, mohou se rozbít dvě věci:

  • Autor podepsal aktualizaci novým klíčem. Někteří autoři generují pro každé vydání nový klíč nebo svůj klíč po změně verze rotují. Nové soubory .bisign u klienta odkazují na klíč, který server nikdy neviděl. Každý hráč s aktualizací je vyhazován, dokud se nový .bikey nezkopíruje do keys/.
  • Verze serveru a klientů se liší obsahem. I při stejném klíči se server se starší verzí a klienti s novější neshodnou na třídách a datech, což se projeví kicky, chybějícími předměty nebo pády při připojení.

Postup, který předejde obojímu:

  1. Zastav server.
  2. Aktualizuj na serveru každý mod na aktuální verzi z Workshopu, ne jen ten, o kterém jsi slyšel. Přes SteamCMD to znamená znovu workshop_download_item pro každé id, s přidaným validate, pokud stahování vypadá neúplně.
  3. Zkopíruj složky modů přes staré v kořeni serveru.
  4. Zkopíruj znovu každý .bikey ze všech modů pomocí příkazu pro jeden průchod výše.
  5. Spusť server, přečti začátek logu kvůli chybám a připoj se sám přes launcher.

Krok 4 je návyk, který si vybuduj: po každé aktualizaci kopíruj všechny klíče, ať už věříš, že se klíč změnil, nebo ne. Zabere to pár sekund a odstraní to nejčastější důvod, proč se na server na celý večer nedá připojit.

Staré klíče se hromadí, jak je autoři rotují. Zastaralý klíč připojování neškodí, ale znamená, že server pořád důvěřuje podpisům vytvořeným klíčem, který autor možná vyřadil - ve vzácných případech proto, že unikl. Jednou nebo dvakrát za rok vyčisti složku zpět na dayz.bikey, zkopíruj všechny aktuální klíče znovu a zůstane ti přesně ta sada, kterou potřebuješ.

Druhá polovina je neaktualizovat ve špatnou chvíli. Patch hry DayZ může rozbít mody, dokud je autoři nepřestaví, a v den patche launcher hráčům podává nové verze modů tak rychle, jak je autoři zveřejňují. Aktualizovat server pár hodin po autorech, až se seznam modů usadí, je lepší než ho aktualizovat v minutě, kdy hra dostane patch. Co dělat, když aktualizace modu něco rozbije obsahuje postup návratu zpět a Mody ze Steam Workshopu na dedikovaných serverech vysvětluje, jak se stahování z Workshopu chová na straně serveru napříč hrami.

.pbo, .bisign, .bikeystažení launcheremadmin zkopíruje .bikeyconnectje podepisující důvěryhodný?Autor modupodepisuje .pboSteam Workshop@Mod s keys/Hra hráčenačte .pbo + .bisignDayZ serververifySignatures 2Složka keys/soubory .bikey
Co se stane s podepsaným modem při připojení hráče

Diagnostika kicku kvůli podpisu#

Zpráva o kicku na obrazovce hráče je krátká a její znění se mezi verzemi změnilo, ale obvykle zmiňuje kontrolu podpisu, upravená data nebo konkrétní soubor. Užitečný detail je název souboru, pokud se zobrazí: název .pbo ukáže přímo na mod, který selhal.

Postupuj v tomto pořadí:

  1. Týká se to všech, nebo jednoho hráče? Pokud je vyhozen každý hráč, serveru chybí klíč nebo se do -mod= dostal mod jen pro server. Pokud je vyhozen jen jeden hráč, problém jsou jeho lokální soubory.
  2. Přečti log serveru. Kick se zapisuje do souboru .RPT a do logu konzole ve složce profilů v okamžiku, kdy nastane, obvykle s jménem hráče a souborem nebo důvodem. Hledej jméno hráče v čase, kdy se pokusil připojit.
  3. Najdi mod. Přiřaď název .pbo ke složce modu: prohledej všechny složky @Mod/addons/ kvůli tomuto souboru.
  4. Zkontroluj jeho klíč. Otevři složku keys toho modu, poznamenej si název .bikey a ověř, že stejný soubor je v keys/ na serveru. Pokud soubor s tímto názvem existuje, ale mod byl nedávno aktualizován, zkopíruj ho i tak znovu - rotovaný klíč může mít stejný název.
  5. Zkontroluj verzi. Porovnej čas poslední aktualizace modu ve Workshopu s časem, kdy byla aktualizována kopie na serveru. Pokud je Workshop novější, aktualizuj server.

U jednoho hráče samotného je oprava na jeho počítači:

  • V DayZ Launcheru otevři seznam modů, zruš odběr selhávajícího modu a přihlas ho znovu, nebo použij opravu v launcheru. Ověření přes launcher místo vlastností hry ve Steamu zajistí, že se zkontrolují i mody.
  • Ujisti se, že nespouští lokální upravenou kopii modu ani další klientské mody, jejichž klíče server nemá. Hráči, kteří hrají na více serverech, mívají načtenou hromadu modů, které tvůj server nikdy nechtěl.
  • Pokud si do spouštěcích voleb přidali -filePatching kvůli jinému serveru nebo návodu na modding, ať ho odstraní.

Pokud nic z toho příčinu nenajde, spusť server jen s @CF nebo úplně bez modů a připoj se. Pokud vanilla funguje, přidávej mody zpět po skupinách, dokud se kick nevrátí. Je to pomalé, ale vždy to skončí jménem.

Podepisování vlastních repacků#

Majitelé serverů někdy mod upraví - změní konfiguraci uvnitř .pbo, sloučí malé mody nebo předělá texturu předmětu. V okamžiku, kdy .pbo znovu zabalíš, původní .bisign přestane sedět a každý klient načítající tvou verzi je vyhozen. Řešením je podepsat ho sám, k čemu je systém navržený.

DayZ Tools, zdarma na Steamu, obsahují k tomu nástroje DS: DSCreateKey vygeneruje pár klíčů a DSSignFile podepíše .pbo soukromou polovinou. Addon Builder v DayZ Tools umí podepisovat i při balení, pokud mu dáš soukromý klíč. Pár tvoří .biprivatekey, který podepisuje, a .bikey, který distribuuješ.

  • Dej svůj .bikey do složky keys/ na serveru a do složky keys/ svého repacku.
  • Nikdy nesdílej ani nenahrávej .biprivatekey. Kdokoli, kdo ho má, může podepsat soubory, které tvůj server přijme.
  • Respektuj podmínky původního autora. Mnoho modů repacking výslovně zakazuje a zveřejnění cizí práce znovu podepsané tvým klíčem je způsob, jak servery přicházejí o položky na Workshopu.

U většiny serverů je lepší cesta repacking úplně obejít: měnit chování přes soubory mise, vlastní konfiguraci modu ve složce profilů nebo malý serverový mod v -serverMod=, který klíč nepotřebuje vůbec. Návod na server s DayZ Expansion ukazuje, jak daleko se s tím dostaneš u jednoho z největších modů vůbec.

Klíče na RE:NODE#

Na DayZ serveru RE:NODE jsou složka keys i každá složka @Mod dostupné přes správce souborů v panelu a přes SFTP, s přihlašovacími údaji pro každý server. Správce souborů rozbaluje archivy na místě, takže mod nahraný jako zip lze rozbalit přímo do kořene serveru, než zkopíruješ jeho klíč. Seznam modů se zadává ve spouštěcím nastavení na kartě Startup. Žádný seznam povolených modů neexistuje - nahraješ, co si vybereš, a sám si vybereš, kterým klíčům důvěřovat.

Před aktualizací modu udělej z panelu backup. Sloty pro backupy jsou na každém tarifu DayZ, backup lze obnovit tlačítkem a obnovení předchozího stavu je nejrychlejší cesta z aktualizace, která se nepovedla. Samotná instalace DayZ vyžaduje tvé vlastní přihlášení do Steamu, zadané na kartě Setup po vytvoření serveru, stejně jako u každého hostingu, který DayZ instaluje za tebe.

FAQ#

Kam dát soubor .bikey v DayZ?

Do složky keys v kořenovém adresáři serveru, vedle spustitelného souboru serveru a složek @Mod - ne dovnitř modu a ne do složky profilů. Každý mod uvedený v -mod= tam potřebuje svůj klíč. Po přidání klíčů server restartuj.

Můžu nastavit verifySignatures na 0, aby kicky přestaly?

Můžeš a kicky to zastaví, ale server tím přestane odmítat upravené soubory, takže každý hráč může načíst upravený .pbo, který ukazuje loot skrz stěny nebo odstraňuje zpětný ráz. Oprava chybějícího klíče zabere minutu a ochranu zachová.

Potřebují serverové mody bikey?

Ne. Mody načítané přes -serverMod= klienti nikdy nenačítají, takže se proti nim nic neověřuje. Klíče jsou jen pro to, co načítají klienti: vše v -mod= plus každý volitelný čistě klientský mod, který se rozhodneš povolit.

Proč se server po aktualizaci modu rozbil, když se nic jiného nezměnilo?

Autor modu pravděpodobně podepsal novou verzi novým klíčem, takže hráči, kteří aktualizaci dostali přes launcher, teď nesou podpisy, které server nemůže ověřit. Aktualizuj mod na serveru a zkopíruj znovu všechny klíče.

Proč je vyhazován jen jeden hráč?

Jeho lokální kopie se liší: poškozené nebo zastaralé stažení, mod, který upravil, další klientský mod, pro který tvůj server nemá klíč, nebo -filePatching ve spouštěcích volbách. Ať udělá opravu nebo znovu odebírá mody přes DayZ Launcher.

Můžu smazat dayz.bikey?

Ne. Je to klíč pro soubory základní hry. Bez něj selže u každého klienta kontrola podpisu na vanilla datech a nepřipojí se nikdo, s mody ani bez nich.

Pomohlo vám to?