RE:NODE

Přihlášení do SteamCMD a Steam Guard: anonymně, nebo účtem

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


Většina dedikovaných serverů se instaluje přes +login anonymous a nic od tebe nepotřebuje. Několik her - DayZ a Arma 3 jsou první, na které narazíš - anonymní relaci odmítne. SteamCMD pak chce skutečné uživatelské jméno a heslo do Steamu, jednou odpoví na výzvu Steam Guard a uloží si přihlašovací token, takže další aktualizace běží bez dozoru. Ten token i heslo, které jsi zadal, aby vznikl, skončí na serveru. Celé bezpečnostní pravidlo se tedy vejde do jedné věty: použij záložní účet na Steamu, který vlastní hru a nic jiného, a počítej s tím, že stroj, na kterém běží SteamCMD, je od teď místem, kde přihlašovací údaje toho účtu žijí.

Zbytek článku jsou podrobnosti: které servery účet potřebují, jak vypadá každá výzva Steam Guard a jak na ni odpovědět, kde se uložené přihlášení nachází a jak dlouho vydrží, jak záložní účet správně založit a co znamenají chyby při přihlášení. Základy samotného SteamCMD - instalace, force_install_dir, validate, skripty - jsou v článku SteamCMD vysvětleně a tady se neopakují.

O čem přihlášení vlastně rozhoduje#

SteamCMD se vždy přihlásí dřív, než cokoli stáhne. Přihlášení se netýká serveru, který budeš provozovat - běžící herní server tuto relaci nikdy nepoužívá. Rozhoduje o jediné věci: jaké licence má stahovací relace.

  • Anonymní relace je relace bez účtu. Má licenci na každou aplikaci, kterou vydavatel označil jako volně stažitelnou anonymně, což pokrývá většinu nástrojů pro dedikované servery. Žádné heslo, žádný Steam Guard, nic se neukládá.
  • Přihlášení účtem má to, co účet vlastní, plus volné nástroje. Je potřeba, když vydavatel omezil serverový nástroj nebo jeho obsah z Workshopu na účty, které hru vlastní.

Plynou z toho dva důsledky a oba lidi překvapí. Zaprvé, přihlašovací údaje jsou potřeba jen při instalaci a aktualizaci. Běžící server DayZ nebo Arma 3 se do Steamu tvým účtem nepřihlašuje; přihlašuje se SteamCMD, spuštěné před startem serveru. Zadruhé, údaje jsou potřeba znovu při každé aktualizaci, a proto se ukládají, místo aby se jednou zadaly a zapomněly. Server, který se aktualizuje při každém restartu, se při každém restartu přihlašuje do Steamu tím účtem.

Přihlášení je také něco jiného než přihlašovací token herního serveru. GSLT předkládá běžící server, aby ho Steam zobrazil v prohlížeči serverů; vytváří se na webové stránce a do SteamCMD se nikdy nezadává. Lidé si je pletou, protože obojí je „přihlašovací údaj ke Steamu, který po tobě hosting chce“, ale jedno nainstaluje soubory a druhé identifikuje běžící server. Několik her potřebuje obojí.

Které servery potřebují skutečný účet#

Neexistuje příznak, který bys mohl předem přečíst a který by říkal „tenhle anonymní přístup odmítá“. Zjistíš to z dokumentace vydavatele, ze seznamu dedikovaných serverů na vývojářské wiki Valve, nebo přímo od SteamCMD, které na anonymní pokus u omezené aplikace odpoví No subscription.

HraServerový nástroj potřebuje účetWorkshop potřebuje účet, který hru vlastní
DayZAno, takový, který vlastní DayZAno
Arma 3AnoAno
Project ZomboidRůzně - viz nížeMódy se stahují přes server
7 Days to DieObvykle anonymněMódy se instalují jako soubory
Většina ostatních (Valheim, CS2, Palworld...)NePodle hry

DayZ je jasný případ. Nástroj DayZ Server (aplikace 223350) se nenainstaluje pro anonymní relaci ani pro účet, který hru nevlastní, a jeho položky z Workshopu se stahují vůči id hry, 221100, což vyžaduje stejný vlastnící účet. Zbytek té instalace popisuje článek DayZ server a módy.

Arma 3 je případ, kdy se zdroje poučným způsobem rozcházejí. Seznam Valve označuje serverový nástroj (233780) jako anonymně nedostupný a vlastní dokumentace serveru od Bohemie radí přihlásit se skutečným uživatelským jménem a doporučuje na to samostatný účet. Bohemia zároveň popisuje serverový balíček jako zdarma, takže to, jestli musí účet vlastnit Arma 3 jen kvůli stažení serveru, se v čase i podle toho, koho se zeptáš, měnilo. U módů z Workshopu je to jiné: workshop_download_item 107410 <id> potřebuje účet, který Arma 3 vlastní. Protože téměř každý skutečný server Arma 3 běží s módy, počítej v každém případě s vlastnícím účtem. Celý postup s módy najdeš v článku Arma 3 server a módy.

Project Zomboid a 7 Days to Die jsou šedá zóna. Jejich serverové nástroje se roky běžně instalují přes login anonymous, a přesto se hostingy a návody liší v tom, zda se přihlášení chce, a vydavatelé mohou přístup k aplikaci změnit bez oznámení. Praktický test je rychlý: zkus nejdřív anonymně. Pokud se to nainstaluje, účet pro samotný server nepotřebuješ. Pokud dostaneš No subscription, potřebuješ. Pokud nevíš, které číslo vyzkoušet, najdeš id serverů i her u třiceti titulů v článku ID aplikací SteamCMD a beta větve.

První přihlášení#

První přihlášení účtem by mělo být vždy interaktivní - ty u terminálu, schopný přečíst, na co se SteamCMD ptá. Spusť SteamCMD bez argumentů a přihlas se v jeho promptu, aby se heslo nikdy neobjevilo na příkazové řádce:

bash
$ ./steamcmd.shSteam> login myserveraccountpassword:

Co se stane dál, záleží na tom, jak je na účtu nastavený Steam Guard, o čemž je další část. Jakmile přihlášení uspěje, uvidíš řádek, který to potvrdí, a vrátí se prompt Steam>. Odtud instaluj jako obvykle:

code
Steam> force_install_dir /srv/dayzSteam> app_update 223350 validateSteam> quit

Ta jedna interaktivní relace splní dvě věci: vyřídí Steam Guard a zanechá po sobě uložené přihlášení. Každé další spuštění - úloha v cronu, restartovací skript, aktualizace z panelu - se pak může přihlásit jen uživatelským jménem:

bash
$ ./steamcmd.sh +force_install_dir /srv/dayz \    +login myserveraccount \    +app_update 223350 +quit

Žádné heslo, žádný kód. SteamCMD najde uložené přihlášení pro to uživatelské jméno a použije ho. Pokud žádné nenajde, řekne to a buď se zeptá (v interaktivním běhu), nebo selže (ve skriptu s @NoPromptForPassword 1), což je přesně to, co od úlohy bez dozoru chceš: hlasité selhání místo zaseknutí.

Vyhni se zkratce +login user password na příkazové řádce. Funguje, ale heslo skončí v historii shellu, ve výpisu ps pro kohokoli jiného na stroji, dokud SteamCMD běží, a často i v tom, kam se ukládá výstup úlohy. V kontejneru je to horší: heslo předané jako proměnná prostředí si může přečíst každý, kdo kontejner prozkoumá. Proč je to slabší úkryt, než lidé předpokládají, vysvětluje článek Proměnné prostředí a tajemství.

Steam Guard: e-mailové kódy, mobilní kódy a schválení#

Steam Guard je druhý faktor Steamu a SteamCMD se s ním setkává stejně jako desktopový klient při přihlášení z nového zařízení. Účet může být ve třech stavech a každý vypadá jinak.

E-mailový Steam Guard

Účet má Steam Guard, ale ne mobilní autentikátor. Při prvním přihlášení z nového stroje Steam pošle krátký kód na adresu účtu a SteamCMD se na něj zeptá:

code
Steam Guard code:

Opiš kód z e-mailu. Kód je svázaný s tím konkrétním pokusem o přihlášení, takže si ho vyžádej a použij hned; starý kód z dřívějšího pokusu se odmítne. Pokud e-mail nepřijde, podívej se před dalším pokusem do spamu - opakovanými pokusy se dostaneš do omezení počtu pokusů.

Mobilní autentikátor

Účet má aplikaci Steam Mobile nastavenou jako autentikátor. SteamCMD chce střídavý kód z aplikace:

code
Two-factor code:

Kód má pět znaků a mění se každých 30 sekund. Zadej ho rychle; kód, který se mezitím obnovil, způsobí neshodu a prostě to zkusíš znovu s novým. Novější verze Steamu také mohou místo opsaného kódu nabídnout schválení na telefonu, stejně jako desktopový klient - pokud ti SteamCMD řekne, ať přihlášení potvrdíš v aplikaci, udělej to a pokračuje. Jestli uvidíš výzvu, nebo schválení, závisí na verzi SteamCMD, takže čti, co vypisuje, a nic nepředpokládej.

SteamCMD také přijímá kód jako třetí argument příkazu login (login user password code), čímž lidé odpovídají na Steam Guard ze skriptu. Funguje to, ale heslo se dostane na příkazovou řádku, takže to používej jen jednorázově z terminálu, který ovládáš, nikdy v souboru.

Steam Guard vypnutý

Žádná výzva. Tohle je nastavení, po kterém lidé sáhnou po první frustrující smyčce kolem Steam Guard, a je to špatné řešení. Účet s vypnutým Steam Guard chrání jen heslo, a heslo je přesně ta věc, kterou jsi právě zadal do serveru. Nech Steam Guard zapnutý; ptá se jen jednou na každém stroji.

passwordtoken savedreads tokenlogin without a codePrvní běhinteraktivně, ručněDalší aktualizacejen uživatelské jménoSteam Guardkód z e-mailu či mobiluUložené přihlášeníconfig.vdfSteamlicence pro relaci
První přihlášení a každá další aktualizace

Uložené přihlášení: kde je a kdy přestane fungovat#

Po úspěšném přihlášení si SteamCMD uloží přihlašovací token toho účtu do své konfigurace, do config/config.vdf v datovém adresáři SteamCMD. Ve Windows je to složka config vedle steamcmd.exe. V Linuxu to závisí na tom, jak byl SteamCMD nainstalován: tarball od Valve a balíčky distribucí ukládají data na různá místa, běžně pod ~/Steam nebo ~/.steam. Pokud si nejsi jistý, prohledej domovský adresář uživatele SteamCMD a hledej config.vdf. Starší verze vedle něj zanechávaly i soubory ssfn, které plnily stejnou roli.

Co je na tom souboru důležité:

  • Je to přihlašovací údaj. Není to tvoje heslo, ale umožňuje SteamCMD na tom stroji přihlásit se jako účet bez něj. Kdokoli, kdo ho zkopíruje, může prakticky totéž - proto patří záložnímu účtu a nikam jinam.
  • Patří uživateli, který SteamCMD spustil. První interaktivní přihlášení proveď pod stejným unixovým uživatelem, který používá úloha v cronu nebo služba. Přihlásit se jako ty sám a pak spouštět aktualizace pod servisním uživatelem steam je nejčastější důvod, proč uložené přihlášení „nefunguje“.
  • V kontejneru musí přežít. Pokud SteamCMD běží v kontejneru, jehož souborový systém se při restartu zahodí, uložené přihlášení zmizí s ním a každý start se znovu ptá na Steam Guard. Konfigurační adresář SteamCMD dej na trvalý svazek.

Uložené přihlášení nevydrží věčně. Přestane fungovat, když:

  1. Se změní heslo. Steam ukončí stávající relace a SteamCMD potřebuje nové heslo a obvykle i novou výzvu Steam Guard.
  2. Zrušíš autorizaci zařízení. „Deauthorize all other devices“ na stránce Steam Guard účtu odhlásí každý stroj, který drží uložené přihlášení, SteamCMD včetně. To je také správný krok, pokud byl server s těmito údaji možná kompromitován.
  3. Token jednoduše vyprší. Uložená přihlášení jsou dlouhodobá, ale ne trvalá. Když jedno vyprší, další aktualizace bez dozoru selže už u přihlášení.

Právě třetí případ se v produkci projeví nejhůř, protože nastane v náhodný okamžik měsíce po nastavení. Aktualizace bez dozoru proto musí umět selhat bezpečně: hledej řádek Success! App 'X' fully installed. místo spoléhání na návratový kód a když se aktualizace neprovedla, spusť server na stávajících souborech. Jak SteamCMD zabalit tak, aby neúspěšné přihlášení znamenalo zastaralý server, a ne mrtvý, popisuje článek Automatizace aktualizací herních serverů.

Založení záložního účtu#

Záložní účet tu není luxus. Heslo a dlouhodobý přihlašovací token leží na stroji, který u pronajatého serveru spravuje někdo jiný a na kterém běží módy a pluginy napsané cizími lidmi. Pokud je ten účet zároveň tvůj s knihovnou her, zůstatkem peněženky, uloženými platebními kartami a patnácti lety přátel, je to všechno jeden únik od katastrofy.

Jak ho založit správně:

  1. Vytvoř nový účet na Steamu s vlastní e-mailovou adresou - schránkou, kterou nepoužíváš na nic jiného. Pokud sdílí e-mail s hlavním účtem, kompromitace schránky kompromituje oba.
  2. Kup hru nebo ji tomuto účtu daruj, pokud server vyžaduje vlastnící účet (DayZ a Arma 3 kvůli Workshopu). Stojí to jednu kopii hry a je to cena za to, že hlavní účet zůstane mimo server.
  3. Nepřidávej platební metodu a nedobíjej peněženku. Na tomhle účtu nesmí být nic, co by se dalo utratit.
  4. Zapni Steam Guard. E-mailový Steam Guard na vyhrazené schránce stačí; mobilní autentikátor je silnější. Aplikace Steam Mobile umí držet víc účtů, takže záložní může být na stejném telefonu vedle hlavního.
  5. Dej mu unikátní, vygenerované heslo ze správce hesel. Bude se zadávat do serveru, takže předpokládej, že ho někdo může vidět, a postarej se, aby nic jiného neotevíralo.
  6. Nehraj na něm. Účet existuje ke stahování souborů. Když zůstane mimo hraní, zůstane mimo obchody, žádosti o přátelství a phishing, který z nich vyplývá.

Záložní účet pomáhá i při stahování z Workshopu u silně modovaných serverů, protože předplatná a stahování z Workshopu se vážou na něj, ne na tvůj osobní účet. Mechanika stahování, včetně toho, co se stane, když je položka z Workshopu odstraněna, je v článku Módy ze Steam Workshopu na dedikovaných serverech.

Bezpečnostní rizika bez obalu#

Zadat přihlášení do Steamu do serveru je rozhodnutí o důvěře a pomáhá být konkrétní v tom, kdo to potom může vidět.

KdoNa co dosáhne
Kdokoli na stejném strojiHesla ve výpisu ps, v historii shellu, v logech
Kdokoli s přístupem k souborům ve složce SteamCMDUložený token v config.vdf
HostingCokoli ukládá, aby za tebe SteamCMD spouštěl
Škodlivý mód nebo pluginJakýkoli soubor, který umí číst proces serveru
Kdokoli, komu pošleš snímek obrazovkyCokoli na obrazovce bylo

Řádek o hostingu si zaslouží nejvíc upřímnosti. Každý hosting, který za tebe spouští SteamCMD pro hru vyžadující přihlášení, musí držet tvoje údaje ve tvaru, který umí použít, což znamená, že je umí přečíst. Žádné chytré uspořádání, které by se tomu vyhnulo, neexistuje. Hostingy se liší tím, jestli to říkají. Na RE:NODE se hry, které potřebují tvé vlastní přihlášení do Steamu - Arma 3, DayZ, Project Zomboid a 7 Days to Die - vytvoří hned po připsání platby a instalace čeká na záložce Setup, až tam údaje zadáš. Ukládají se tak, jak je napíšeš, a to je důvod, proč se celý tento článek stále vrací k záložnímu účtu.

Ostatní řádky jsou ty, které máš ve své moci:

  • Přístup k souborům je přístup k přihlašovacím údajům. Podúčet, který smí procházet soubory serveru, si možná může přečíst uložené přihlášení. Týmu dej přístup ke konzoli bez přístupu k souborům tam, kde soubory nepotřebuje - jak takové role postavit, ukazuje článek podúčty a nejmenší oprávnění.
  • Módy běží s oprávněními serveru. Plugin si může přečíst cokoli, co umí proces serveru. Jak to vypadá v praxi, popisuje článek škodlivé pluginy a módy.
  • Konverzace s podporou prozradí. Nikdy nevkládej heslo ani kód Steam Guard do Discordu, na fórum ani do veřejného kanálu, když žádáš o pomoc. Na RE:NODE ticket podpory přijímá soukromé přílohy, což je správné místo pro cokoli citlivého.
  • Tvůj účet v panelu jsou přední dveře. Kdokoli, kdo se do panelu přihlásí, vidí záložku Setup. Zapni si dvoufázové ověření na účtu v panelu, aby přihlášení do Steamu nebylo vzdáleno jen jedno uniklé heslo do panelu.

Pokud si myslíš, že přihlašovací údaje záložního účtu unikly, náprava zabere pět minut: změň heslo, použij „Deauthorize all other devices“ a na serverech, které mají mít přístup dál, se jednou ručně přihlas. Protože účet nedrží nic než licenci na hru, je to celý rozsah škody.

Chyby při přihlášení a co znamenají#

SteamCMD hlásí selhání přihlášení na řádku, který začíná Logging in user, s důvodem v závorce na konci.

Zpráva obsahujeCo to znamená
Invalid PasswordŠpatné heslo nebo překlep v uživatelském jménu
Two-factor code mismatchMobilní kód vypršel nebo je špatně opsaný; použij aktuální
Invalid Login Auth CodeE-mailový kód Steam Guard je špatný nebo z dřívějšího pokusu
Account Logon DeniedSteam Guard chce e-mailový kód, než půjde dál
Rate Limit ExceededPříliš mnoho pokusů; přestaň a počkej
No subscriptionPřihlášen, ale tato identita aplikaci nevlastní

Rate Limit Exceeded je ta, kterou je třeba brát vážně. Spouští ji opakovaná neúspěšná přihlášení, typicky skript, který v cyklu zkouší staré heslo, a každý další pokus uzamčení prodlužuje. Zastav, co se opakuje, počkej - často hodinu i déle - a pak se jednou ručně a správně přihlas.

No subscription po úspěšném přihlášení nikdy není problém s heslem. Buď účet hru nevlastní, nebo jsi předal id aplikace, které patří něčemu jinému. U DayZ ověř, že účet vlastní samotné DayZ; u stahování z Workshopu pro Arma 3 ověř, že vlastní Arma 3 a že jsi použil 107410, ne serverové 233780.

Přihlášení, které ručně funguje a z cronu selhává, je téměř vždy výše popsaná neshoda uživatelů: uložené přihlášení patří tomu, kdo spustil interaktivní přihlášení, a naplánovaná úloha běží pod někým jiným.

FAQ#

Mohu nainstalovat server DayZ, aniž bych DayZ vlastnil?

Ne. Serverový nástroj DayZ odmítá anonymní přihlášení i účty, které hru nevlastní, a jeho módy z Workshopu potřebují stejný vlastnící účet. Kup kopii na záložní účet a nedávej na server hlavní účet.

Musím zadávat kód Steam Guard při každé aktualizaci serveru?

Ne. Na Steam Guard se odpovídá jednou na každém stroji. SteamCMD si pak uloží přihlašovací token a další běhy se přihlásí jen uživatelským jménem. Znovu se zeptá až po změně hesla, zrušení autorizace zařízení, nebo když uložené přihlášení nakonec vyprší.

Je bezpečné dát hostingu své přihlášení do Steamu?

Je to tak bezpečné, jak je bezpečný hosting, a proto bys mu měl dát vždy jen záložní účet. Každý hosting, který ti instaluje DayZ nebo Arma 3, musí uložit použitelné přihlašovací údaje. Vyber hosting, který to řekne otevřeně, a postarej se, aby účet za tím nevlastnil nic, o co bys nechtěl přijít.

Mám na záložním účtu vypnout Steam Guard, aby přestaly výzvy?

Ne. Výzva se objeví jen při prvním přihlášení z každého stroje, takže vypnutím Steam Guard ušetříš jeden kód a odstraníš jedinou ochranu, která zbude, když se heslo zadá do serveru. Nech ho zapnutý, ideálně s mobilním autentikátorem.

Používá běžící server můj účet na Steamu?

Ne. Účet používá SteamCMD ke stahování a aktualizaci souborů. Běžící server se jím nepřihlašuje. Pokud hra potřebuje i token pro výpis serveru, je to samostatný údaj vytvořený na stránce herních serverových účtů Steamu.

Jak donutím stroj zapomenout přihlášení?

Smaž uložené přihlášení ze SteamCMD v config/config.vdf, nebo - pokud už stroj neovládáš - použij „Deauthorize all other devices“ v nastavení Steam Guard účtu a změň heslo. Tak či onak další přihlášení na tom stroji vyžaduje znovu heslo a Steam Guard.