RE:NODE

Provoz11 min čtení

Oprávnění a vlastnictví souborů herního serveru

Proč herní server hlásí Permission denied: vlastníci a režimy v Linuxu, bit spustitelnosti, konfigurace jen pro čtení a kdo z vašeho týmu smí sahat na které soubory.

1 čtenář

Herní server běží jako jeden obyčejný uživatel a může číst, zapisovat nebo spouštět jen ty soubory, které mu to podle oprávnění v Linuxu dovolují. Téměř každé „Permission denied“ na herním serveru pochází z jedné ze tří věcí: soubor vytvořil jiný uživatel (typicky root, na stroji, který spravuješ sám), skriptu nebo binárce po nahrání chybí bit spustitelnosti, nebo někdo soubor záměrně nastavil jen pro čtení a zapomněl na to. V panelu je strana vlastnictví z velké části vyřešená za tebe - vše ve složce serveru patří stejnému uživateli, pod kterým server běží - takže zbývají režimy a druhá, oddělená vrstva oprávnění: kdo z tvého týmu smí podle panelu sahat na které soubory.

Tento článek pokrývá obě vrstvy: co znamenají písmena v ls -l, jak opravit vlastnictví a režimy, kdy je dobrý nápad nastavit konfiguraci jen pro čtení, jaké chyby způsobuje který omyl a jak dát moderátorovi přístup k souborům, aniž mu dáš klíče od všeho.

Dvě vrstvy oprávnění#

Pomáhá držet je odděleně, protože selhávají různě.

  1. Oprávnění souborů v Linuxu určují, co smí se souborem dělat herní proces. Když jsou špatně, selže hra - nemůže ukládat, nemůže načíst plugin, nemůže nastartovat.
  2. Oprávnění v panelu určují, co smí člověk dělat přes správce souborů a SFTP panelu. Když jsou špatně, je člověk zablokovaný - nebo, což je horší, zablokovaný není, i když by měl být.

Soubor může být naprosto čitelný pro hru a úplně skrytý před moderátorem, nebo upravitelný moderátorem a nečitelný pro hru. Když je něco odepřeno, první otázka je, která vrstva řekla ne: chyba v konzoli hry je první vrstva, chyba ve správci souborů nebo v SFTP klientu je obvykle ta druhá.

Čtení oprávnění v Linuxu#

Každý soubor a složka má vlastníka, skupinu a režim. ls -l ukáže všechny tři:

code
-rw-r--r-- 1 steam steam   1843 Oct  6 21:14 server.properties-rwxr-xr-x 1 steam steam    412 Oct  6 21:10 start.shdrwxr-xr-x 5 steam steam   4096 Oct  6 21:20 world-rw------- 1 root  root     96  Oct  6 20:55 token.txt

Prvních deset znaků je typ a režim. První znak je - pro soubor nebo d pro adresář. Dalších devět jsou tři skupiny po třech: co smí dělat vlastník, co smějí členové skupiny a co smí všichni ostatní. V každé skupině je r čtení, w zápis a x spuštění.

U adresářů znamenají písmena něco trochu jiného a lidé na tom klopýtají:

PísmenoU souboruU adresáře
rPřečíst obsahVypsat názvy uvnitř
wZměnit obsahVytvářet, mazat a přejmenovávat položky uvnitř
xSpustit jako programVstoupit do něj a dostat se k souborům uvnitř

Adresář bez x nelze otevřít, ani když je každý soubor uvnitř čitelný. Adresář bez w brání smazání souboru uvnitř, i když je sám soubor zapisovatelný. Hry, které ukládají tak, že vytvoří nový soubor a přejmenováním ho přepíšou přes starý, potřebují w na adresáři, ne jen na savu.

Režimy se často zapisují jako tři osmičkové číslice, jedna na skupinu, kde se sčítá 4 za čtení, 2 za zápis a 1 za spuštění:

RežimPísmenaTypické použití
644rw-r--r--Běžné soubory: konfigurace, světy, jary
755rwxr-xr-xAdresáře, skripty a binárky
600rw-------Tajemství: soubory s tokeny, hesla k databázím
700rwx------Soukromé adresáře
444r--r--r--Soubor záměrně nastavený jen pro čtení

Nové soubory dostávají režim z umask procesu, který je vytváří, obvykle 022, což dá 644 pro soubory a 755 pro adresáře.

Vlastnictví: past s rootem#

Na stroji, který spravuješ sám - VDS, domácí server - je nejčastějším problémem s oprávněními server běžící jako neprivilegovaný uživatel (třeba steam) a složka plná souborů vytvořených uživatelem root. Stane se to takhle: hru nainstaluješ jako steam, pak jednoho večera spustíš aktualizaci nebo rozbalíš mod jako root přes sudo. Nové soubory patří uživateli root, režim 644, a steam je může číst, ale ne měnit. Server nastartuje, běží a selže ve chvíli, kdy poprvé zkusí uložit, aktualizovat konfiguraci nebo přepsat datový soubor modu.

Oprava je vrátit celý strom uživateli služby a pak v něm přestat spouštět věci jako root:

bash
# give the whole server folder back to the user it runs as$ sudo chown -R steam:steam /srv/valheim# run updates and edits as that user from now on$ sudo -u steam /home/steam/steamcmd/steamcmd.sh +runscript update.txt

Spouštět samotnou hru jako root, „aby nebyly problémy s oprávněními“, je špatná oprava. Plugin se zranitelností nebo škodlivý mod pak má plnou kontrolu nad strojem místo jedné složky. Provoz každého serveru pod vlastním uživatelem, který navíc zabrání tomu, aby byly soubory jednoho serveru dosažitelné z jiného, popisuje více herních serverů na jednom VDS.

Vlastnictví v panelu#

V panelu postaveném na Pterodactylu tato celá kategorie z velké části mizí. Daemon spouští kontejner každého serveru pod jediným neprivilegovaným systémovým uživatelem a složka serveru - včetně všeho, co nahraješ přes správce souborů nebo SFTP - patří tomuto uživateli. Nic, co uděláš přes panel, nevytvoří ve složce serveru soubor patřící uživateli root, takže past s rootem nenastane.

Vlastnictví také nemůžeš měnit. chown potřebuje root, uvnitř kontejneru žádný root není a volba „změnit vlastníka“ v SFTP klientu selže s Operation not permitted. Je to záměr: izolace kontejneru na tom stojí. Pokud ve výpisu vypadá vlastnictví divně, obvykle jen SFTP klient zobrazuje číselné ID uživatele, ke kterému nezná jméno, a nejde o skutečný problém. Jak do sebe kontejnery a daemon zapadají, vysvětluje panel Pterodactyl vysvětlený.

V panelu se dá pokazit pořád jedna věc: režim.

Bit spustitelnosti#

Shellový skript nebo nativní binárka potřebuje x, aby se spustila. Když chybí, chyba je stručná:

code
/home/container/start.sh: Permission deniedbash: ./RustDedicated: Permission denied

Obvyklé příčiny:

  • Soubor byl nahrán přes prohlížeč. HTTP nahrávání přenáší obsah, ne oprávnění, takže každý nahraný soubor dorazí jako 644.
  • Pochází ze zipu vytvořeného ve Windows. Windows bit spustitelnosti nezná, takže zip tam vytvořený si ho nepamatuje. .tar.gz vytvořený na Linuxu režimy zachová; zip z Windows ne.
  • Byl upraven a uložen nástrojem, který ho přepsal, místo aby ho upravil na místě.

Oprava je chmod +x na souboru, nebo nastavení režimu na 755. V shellu stačí chmod +x start.sh. V panelu použij volbu oprávnění v nabídce souboru ve správci souborů, pokud ji panel nabízí, nebo dialog Properties v SFTP klientu jako WinSCP či FileZilla, který umí režim nastavit přímo. Klienty popisuje SFTP a správce souborů.

Související chyba vypadá jako problém s oprávněními, ale není:

code
/bin/sh^M: bad interpreter: No such file or directory

^M je konec řádku z Windows. Skript byl uložen s ukončením řádků CRLF a Linux čte znak návratu vozíku jako součást názvu interpretu. Převeď ho na konce řádků LF ve svém editoru (většina má nastavení ve spodní části okna), nebo na vlastním počítači pomocí dos2unix. Změna režimu to nespraví.

Konfigurace jen pro čtení: když hra vrací tvoje úpravy#

Nejčastější stížnost na konfigurace herních serverů není „Permission denied“, ale pravý opak: „změnil jsem nastavení a hra ho změnila zpátky“. Skoro vždy hra soubor přepsala ze své kopie v paměti.

Dělá to několik her:

  • Minecraft při startu přepisuje server.properties, přidává chybějící klíče s výchozími hodnotami a zahazuje tvoje komentáře. Upravuj ho se zastaveným serverem a poznámky o tom, proč je hodnota nastavená, drž jinde.
  • Project Zomboid přepisuje .ini serveru při startu i při změně nastavení ve hře.
  • Hry na Unreal Enginu často zapisují své soubory Saved/Config při vypnutí, takže úprava provedená za běhu serveru se nahradí tím, co bylo v paměti při zastavení.

Správná oprava je ve všech případech server zastavit, upravit, spustit. Je to nudné a vždycky to funguje.

Nastavit soubor jen pro čtení pomocí chmod 444 je druhá možnost a je to hack, u kterého stojí za to znát meze. Hře skutečně zabrání soubor přepsat. Ale některé hry logují chybu při každém pokusu o uložení, některé odmítnou nastartovat, když nemohou konfiguraci zapsat, a za půl roku zapomeneš, že je soubor jen pro čtení, budeš ho chtít upravit a divit se, proč ho editor nechce uložit. Nepomůže ani validate ve SteamCMD, protože obnovuje jen soubory, které hra dodává, ne ty, které vytváří. Pokud tenhle trik použiješ, napiš to přímo do souboru (# read-only on purpose, see admin notes) a jen u souboru, o kterém víš, že hra snese, když nejde zapsat.

Chyby a co znamenají#

ZprávaVrstvaCo to znamená
Permission denied, EACCESLinuxUživatel hry nemá r, w nebo x na souboru nebo na nadřazeném adresáři
java.nio.file.AccessDeniedExceptionLinuxTotéž, z Javy (Minecraft, jeho pluginy)
UnauthorizedAccessExceptionLinuxTotéž, z .NET (hry na Unity, mnoho modů)
Operation not permitted, EPERMLinuxAkce, kterou smí jen root, například chown
Read-only file system, EROFSLinuxCelý svazek je připojen jen pro čtení - obvykle problém na straně hostingu
bad interpreter s ^MNe oprávněníWindows konce řádků ve skriptu
403 nebo „not allowed“ ve správci souborůPanelTvůj účet v panelu nemá oprávnění k danému souboru

Read-only file system si zaslouží poznámku. Netýká se režimu žádného konkrétního souboru: operační systém připojil celý svazek jen pro čtení, často po zjištění chyby disku. Z vnitřku serveru to nespravíš a patří to ihned jako ticket hostingu.

Oprávnění v panelu: kdo smí sahat na které soubory#

Druhá vrstva začne hrát roli, jakmile server spravuje víc než jeden člověk. Panel ve stylu Pterodactylu dovoluje majiteli přidávat subuser účty a dávat každému sadu oprávnění a ta týkající se souborů bývají rozdělená jemně - v upstreamovém Pterodactylu zahrnují samostatná oprávnění číst soubory, číst obsah souborů, vytvářet, upravovat, mazat, archivovat a používat SFTP. RE:NODE na tom staví s rolemi, týmy a granty: role drží oprávnění, tým drží lidi a grant spojuje tým se serverem, s časově omezeným přístupem a logem aktivity pro každý server.

Jak se to promítá na skutečné členy týmu:

OsobaJaký přístup k souborům potřebuje
ModerátorObvykle žádný. Přístup ke konzoli kvůli kickům a banům
Stavitel nebo pomocník na eventechČíst a upravovat konfigurace jednoho pluginu; bez mazání
VývojářPlný přístup k souborům a SFTP na testovacím serveru; jen čtení na produkci
SpolumajitelVšechno kromě fakturace

Dvě věci stojí za to udělat správně. Zaprvé, přístup k souborům je blízko přístupu ke všemu: kdo může upravovat soubory, může upravit seznam adminů, nainstalovat plugin nebo přečíst token v konfiguraci. Uděluj ho stejně opatrně jako přístup ke konzoli. Zadruhé, přístup přes SFTP je samostatné oprávnění, protože je nejsilnějším způsobem, jak využít ta ostatní - celou složku lze stáhnout nebo nahradit za pár vteřin. Návrh rolí popisují subuseři a princip nejmenších oprávnění a účty za nimi zabezpečení admin účtů herního serveru.

Soubory, které nemají být čitelné vůbec#

Některé soubory na herním serveru jsou tajemství: token herního serveru Steamu ve startovací řádce nebo konfiguraci, licenční klíč FiveM v server.cfg, heslo k databázi v konfiguraci pluginu, heslo k RCON. Na stroji, který spravuješ sám, jim dej režim 600, aby je mohl číst jen uživatel služby. V panelu je důležitým ovládacím prvkem druhá vrstva: kdo má vůbec přístup ke čtení souborů. Pamatuj také, že tajemství končí na místech, kam jsi je nedal - startovací řádky vypsané do logů, zálohy, které obsahují konfigurace, screenshoty správce souborů sdílené na Discordu. Návyky, které je udrží, kde mají být, popisují proměnné prostředí a tajemství a RCON bezpečně.

FAQ#

Proč můj herní server při startu hlásí Permission denied?

Obvykle startovacímu skriptu nebo binárce chybí bit spustitelnosti, často po nahrání přes prohlížeč nebo rozbalení ze zipu z Windows. Nastav souboru režim 755 v SFTP klientu nebo správci souborů. Pokud zpráva jmenuje datový soubor, uživatel serveru do něj nebo do jeho složky nemůže zapisovat.

Mám prostě dát chmod 777 na všechno?

Ne. Každý soubor se tím stane zapisovatelným pro každého uživatele systému, což je na sdíleném stroji nebo při kompromitovaném pluginu dárek. Také to málokdy opraví skutečný problém, kterým bývá vlastnictví nebo jediný chybějící bit spustitelnosti.

Proč se můj konfigurační soubor pořád resetuje?

Hra ho přepsala z paměti, buď při startu, nebo při vypnutí. Zastav server, proveď úpravu a spusť ho znovu. Nastavení souboru jen pro čtení funguje u některých her, ale u jiných způsobuje chyby.

Mohu v panelu měnit vlastnictví souborů?

Ne, a ani nemusíš. Každý soubor ve složce serveru patří uživateli, pod kterým server běží, a změna vlastnictví potřebuje root, který kontejner nemá.

Mohu někomu dát přístup jen k jedné složce?

Většina panelů uděluje oprávnění k souborům na úrovni serveru, ne složky. Pokud má někdo sahat jen na konfiguraci jednoho pluginu, nejbezpečnější je provést úpravu za něj, nebo mu dát testovací server, kde plný přístup nic nezkazí.


Komentáře

Zcela anonymně: žádný účet, žádný e-mail, žádné cookie. Ukládáme jen jméno, které napíšeš, text a čas - nic dalšího. Počet odkazů je omezený a značkování se nevykresluje.

0/2000