RE:NODE

Безопасность11 мин чтения

Безопасность админ-аккаунтов игрового сервера

Как каждая игра определяет, кто администратор, почему общие пароли и админы по нику утекают и как выдавать команде права, которые можно чисто забрать.

0 прочтений

Самый безопасный способ сделать кого-то администратором игрового сервера - по ID платформы: SteamID64, UUID Minecraft в online-режиме, идентификатор лицензии FiveM, - записанному в файл, который можете редактировать только вы, по строке на человека. Самый небезопасный - единый пароль администратора, который все вводят в игре: его нельзя отследить, нельзя отобрать у одного человека, и он расходится дальше, чем вы думаете. Большинство игр предлагают один из этих вариантов или оба; ваша задача - выбирать вариант с ID везде, где он есть, держать пароль длинным, редко используемым и регулярно меняемым там, где его нет, и следить, чтобы аккаунты за этими ID сами было трудно украсть.

Эта статья - о власти администратора внутри игры: кто может кикать, банить, спавнить предметы и выполнять консольные команды прямо из игры. Аккаунт панели, которому принадлежит сервер, - отдельная и более крупная цель, о ней есть своя статья про двухфакторную аутентификацию в аккаунте панели, а как дать команде доступ к панели без вашего пароля, описано в статье субпользователи и минимальные привилегии.

Три способа, которыми игры определяют администратора#

Каждая игра использует одну из трёх моделей, иногда две сразу.

МодельПримерМожно отследитьМожно отозвать у одного человека
Список ID в файлеops.json, adminlist.txt, admins_simple.iniДаДа
Общий пароль администратораARK ServerAdminPassword, Palworld AdminPasswordНетНет
Игровой аккаунт для каждого игрокаАккаунты Project ZomboidДаДа

Списки ID - хороший случай. Статус администратора привязан к аккаунту платформы, платформа этот аккаунт уже аутентифицировала, а чтобы убрать одного человека, достаточно удалить одну строку. Слабые места - сам аккаунт за ID, а также игры и режимы, где ID на самом деле не проверяется.

Общие пароли - плохой случай. Администратор - любой, кто знает пароль, в логе редко видно, кто именно им воспользовался, а чтобы убрать одного человека, пароль приходится менять для всех. К тому же утекают они предсказуемо: скриншоты, стримы, сообщение, вставленное не в тот канал Discord, бывший член команды, который всё ещё его помнит.

Аккаунты для каждого игрока - где-то посередине. У игры своя система логинов и паролей, поэтому права администратора принадлежат именованному аккаунту, но эти пароли настолько надёжны, насколько их делают надёжными ваши игроки.

Где живут права администратора в разных играх#

ИграГде задаются администраторыМодель
Minecraft (Java)ops.json, уровень из op-permission-levelСписок UUID
Valheimadminlist.txtСписок ID платформы
Rustownerid / moderatorid, сохраняются в users.cfgСписок SteamID
Игры на SourceSourceMod admins_simple.ini или admins.cfgСписок SteamID
CS 1.6AMX Mod X users.iniID, IP или ник
FiveMadd_principal и ACE в server.cfgСписок идентификаторов
7 Days to Dieserveradmin.xmlСписок ID платформы
ARKServerAdminPassword, AllowedCheaterSteamIDs.txtПароль или список ID
PalworldAdminPassword в PalWorldSettings.iniОбщий пароль
Project ZomboidУровень доступа у серверного аккаунтаАккаунт для каждого игрока
UnturnedOwner в Commands.dat, плюс adminСписок SteamID

К некоторым из них нужны пояснения.

В Rust ownerid 76561198012345678 "Name" "reason" и moderatorid выдают два уровня администратора, а server.writecfg записывает их в users.cfg в папке cfg идентичности сервера. Если забыть server.writecfg, выданные права пропадут при следующем перезапуске - на удивление частая причина жалоб «у меня всё время пропадает админка».

В ARK команда enablecheats <password> во внутриигровой консоли делает вас администратором на текущую сессию. SteamID из AllowedCheaterSteamIDs.txt (в ShooterGame/Saved) получают права администратора без пароля. Используйте файл для команды, а пароль держите длинным секретом, который никто не вводит по привычке.

В Palworld права администратора - это /AdminPassword <password> в чате, и в ванильном сервере нет альтернативы с правами для отдельных игроков. Пароль - единственный ваш инструмент контроля, поэтому делайте его длинным, никогда не используйте на стриме и меняйте каждый раз, когда кто-то уходит из команды. Остальное - в статье админ-команды и RCON в Palworld.

В 7 Days to Die файл serveradmin.xml лежит в папке с данными сохранений и содержит пользователей с уровнем прав, где 0 - самый высокий. Примерно с версии 1.0 формат XML изменился и вместе с ID теперь указывается платформа, поэтому копируйте формат из файла, сгенерированного вашим сервером, а не из старого руководства.

В FiveM права администратора - это выдача ACE, привязанная к идентификатору:

server.cfg
add_ace group.admin command allowadd_ace group.admin command.quit denyadd_principal identifier.fivem:1234567 group.adminadd_principal identifier.discord:123456789012345678 group.moderator

Предпочитайте идентификаторы license:, fivem: или steam:. Идентификатор discord: безопасен ровно настолько, насколько безопасен аккаунт Discord этого человека, и это подводит нас к настоящему слабому месту.

Настоящая цель - аккаунт за ID#

Список администраторов по ID не устраняет проблему, а переносит её. Вашему противнику не нужен пароль администратора, если он может войти под одним из ваших администраторов.

Аккаунты Steam - главная цель в случае администраторов Source, Rust, Valheim, ARK и 7 Days to Die, и их фишат постоянно. Типичные способы: поддельные сайты обмена или турниров с копией страницы входа Steam, ссылки «проголосуй за мою команду» и фальшивые сообщения «на ваш аккаунт пожаловались», ведущие к форме входа. Член команды, который вошёл на таком сайте, отдал вместе со своим инвентарём и права администратора вашего сервера.

Что требовать от каждого, кого вы делаете администратором:

  1. Steam Guard с мобильным аутентификатором на том аккаунте, чей ID вы вносите в список. Коды по email лучше, чем ничего; аутентификатор ещё лучше.
  2. Двухфакторную аутентификацию в Discord, если роли в Discord дают какие-то права администратора или если команда координируется там. Взломанный аккаунт Discord с ролью команды может отправить остальной команде убедительное сообщение «вот новый пароль администратора».
  3. Уникальный пароль для каждого задействованного аккаунта, из менеджера паролей.
  4. Никаких общих аккаунтов. «Админский аккаунт Steam», в который заходят три человека, - это общий пароль с лишними шагами, и обычно на нём нет двухфакторной аутентификации, потому что делиться кодом неудобно.

Ничего из этого не требует жёсткости. Сделайте это частью вступления в команду, один раз объясните зачем и тихо проверяйте, когда кого-то повышаете.

Администраторы по нику и непроверенные ID#

Некоторые системы администрирования умеют сопоставлять по нику игрока, а ник - это то, что игрок сам вписал в настройки. Это превращает список администраторов в игру в угадайку.

AMX Mod X в CS 1.6 - классический пример. users.ini принимает ник, IP или SteamID, а флаги определяют, как проверяется запись:

addons/amxmodx/configs/users.ini
; "name/ip/steamid" "password" "access flags" "account flags""STEAM_0:1:1234567" "" "abcdefghijkmnopqrstu" "ce""Moderator Tom" "a-long-password" "bcdefij" "a"

Флаг аккаунта c означает, что идентификатор - это SteamID, а e - что пароль не проверяется; для игрока, проверенного через Steam, это правильная комбинация. Запись по нику с флагом a кикает любого с этим ником, кто не предоставил пароль. Пароль передаётся командой setinfo _pw "password" в консоли клиента (имя поля задаётся amx_password_field в amxx.cfg).

У пароля в setinfo есть неприятное свойство: значения setinfo отправляются на каждый сервер, на который заходит игрок, и любой владелец сервера может их прочитать. Администратор, который держит setinfo _pw в своём конфиге и играет на других серверах, раздаёт пароль всем. Предпочитайте записи по SteamID.

Есть и вторая ловушка. SteamID заслуживает доверия, только если сервер проверил его через Steam. Серверы, принимающие non-Steam клиентов, не могут проверить ID, который заявляет клиент, и на таких серверах записи администраторов по SteamID можно подделать. Если ваш сервер CS 1.6 пускает non-Steam игроков, используйте для администраторов записи по нику с паролем и флагом a и держите эти пароли в тайне.

У Minecraft в offline-режиме та же проблема. При online-mode=false и без прокси, который проводит аутентификацию, UUID игрока вычисляется из введённого ника, поэтому любой, кто зайдёт под вашим ником, становится оператором. Offline-режим уместен за прокси Velocity или BungeeCord, который аутентифицирует игроков и пересылает их идентичность, - но только если до бэкенд-серверов нельзя достучаться напрямую. Безопасная схема описана в статье белый список и права в Minecraft, а замена грубого статуса оператора нормальными группами прав - в статье LuckPerms для Minecraft.

Давайте команде меньше, чем всё#

Большинство игр делают права администратора одним переключателем, но почти каждый фреймворк администрирования предлагает уровни, и их использование ограничивает то, что может сделать один взломанный аккаунт из команды.

  • Minecraft: op-permission-level в server.properties задаёт, что могут операторы, от 1 (обход защиты спавна) до 4 (всё, включая /stop). А ещё лучше - не давать оператора никому, кроме владельца, а модераторам выдать группу LuckPerms ровно с теми командами, которые им нужны.
  • Rust: moderatorid вместо ownerid для модераторов. Владельцы могут управлять другими администраторами, модераторы - нет.
  • SourceMod: флаги для каждого человека, так что модератор получает кик, бан и чат (bcdj) без RCon (m) и читов (n). Группы и иммунитет подробно разобраны в статье флаги администраторов и иммунитет в SourceMod.
  • FiveM: группы ACE с явными запретами на опасные команды, как в примере выше.
  • 7 Days to Die: уровни прав в serveradmin.xml и уровни для отдельных команд в том же файле, так что модератор уровня 1 может кикать, но не спавнить предметы.

Принцип везде один: человеку, который по вторникам вечером следит за чатом, не нужны команды, способные удалить мир. Двух уровней - владелец и модератор - хватает большинству сообществ.

Смена паролей, уход из команды и бывшие администраторы#

Доступ, который нельзя чисто забрать, - это доступ, отданный навсегда. Когда кто-то уходит из команды, по-хорошему или по-плохому, пройдите по списку в тот же день:

  1. Удалите его ID из каждого файла администраторов и на каждом сервере сети. Общая база администраторов (о ней - в статье глобальные бан-системы для сообществ) превращает это из пяти изменений в одно.
  2. Смените каждый общий пароль, который он знал: пароль администратора ARK или Palworld, пароль RCON, любой пароль для входа на сервер, любой логин в инструментах. Да, все, даже если ему доверяли.
  3. Уберите его доступ субпользователя в панели и роль команды в Discord.
  4. Проверьте журнал активности на изменения, сделанные его аккаунтом за последние несколько дней.
  5. Поищите то, что он мог оставить после себя: лишнюю запись в файле администраторов под другим ID, запланированную задачу, плагин, который вы не узнаёте.

Пятый шаг кажется паранойей ровно до первого случая, когда удалённый человек возвращается с правами администратора на альт-аккаунте, потому что внёс SteamID этого альта ещё несколько недель назад.

Логирование действий администраторов#

Права администратора без записи действий невозможно контролировать и невозможно защитить. Когда игрок говорит, что модератор злоупотребил властью, отвечать хочется логом, а не ощущением.

  • SourceMod пишет действия администраторов в addons/sourcemod/logs, а sm_show_activity определяет, как эти действия объявляются в игре.
  • Minecraft пишет в лог сервера каждую команду, выполненную игроком, а плагины вроде CoreProtect записывают изменения блоков и контейнеров.
  • Rust, 7 Days to Die и большинство survival-игр пишут консольные команды и действия администраторов в лог сервера.
  • Панель ведёт журнал активности для каждого сервера, и он охватывает людей с доступом к панели, а не людей в игре.

Храните эти логи достаточно долго, чтобы их хватило на разбор спора, - о сроках хранения говорится в статье логи, которые стоит хранить, - и иногда читайте их, даже когда всё в порядке. Злоупотребления редко начинаются с чего-то драматичного.

На RE:NODE пароли администратора, RCON и базы данных для нового игрового сервера генерируются отдельно для каждого сервера, а не остаются по умолчанию, а консоль панели работает вообще без открытия RCON, что выводит из оборота один общий секрет. Субпользователям панели можно выдать доступ к консоли без доступа к файлам и оплате, так что члену команды, которому нужно выполнить команду, больше ничего не требуется.

Решение проблем с правами администратора#

Мои права администратора пропадают после перезапуска (Rust). Вы выполнили ownerid, но не server.writecfg. Выдайте права снова и запишите конфиг.

Я добавил себя в ops.json, и ничего не произошло. Сервер читает ops.json при запуске; вместо этого выполните /op <name> из консоли или перезапустите сервер. Проверьте, что UUID - это online-UUID вашего аккаунта, а не offline.

Администратор SourceMod не распознаётся. Формат SteamID в файле не совпадает с тем, что видит сервер, или в файле синтаксическая ошибка. Скопируйте ID из status, выполните sm_reloadadmins и проверьте addons/sourcemod/logs на ошибку, связанную с файлом.

У кого-то не из команды есть права администратора. Считайте это взломом, пока не доказано обратное. Удалите запись, смените все общие пароли, проверьте журнал активности и файлы администраторов на каждом сервере и прочитайте статью что делать, если ваш сервер взломали, если найдёте что-то, чего не можете объяснить.

FAQ#

Безопасен ли пароль администратора, если он достаточно длинный?

Длинные пароли трудно подобрать, но большинство паролей администратора теряется из-за того, что ими делятся, а не из-за подбора. Проблема общего пароля в том, что нельзя понять, кто им воспользовался, и нельзя забрать его у одного человека. Используйте список ID везде, где он есть в игре.

Давать ли совладельцу те же права, что у меня?

Только если вас устроит, что он может всё удалить. Высший внутриигровой уровень давайте как можно меньшему числу людей, часто только тому, кто платит за сервер, а всем остальным - уровень модератора.

Может ли игрок подделать SteamID, чтобы получить права администратора?

Не на сервере с аутентификацией через Steam. ID проверяется через Steam при подключении. Подделать его можно на серверах, принимающих non-Steam клиентов, и в играх или режимах, которые пропускают аутентификацию платформы, например в Minecraft в offline-режиме без прокси.

Как часто менять пароли RCON и администратора?

Каждый раз, когда уходит кто-то, кто их знал, каждый раз, когда пароль мог попасть на стрим или скриншот, а в остальном - пару раз в год. Смена только по календарю пропускает именно те моменты, которые важны.

Нужны ли мне права администратора в игре, если есть консоль панели?

Для большинства задач нет. Консоль выполняет любую серверную команду без вашего присутствия в игре, и для владельца это часто более безопасный способ время от времени заниматься администрированием.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000