RE:NODE

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

Флаги админов SourceMod, группы и иммунитет

Все флаги администраторов SourceMod, форматы admins_simple.ini и admins.cfg, группы, уровни иммунитета и sm_immunity_mode, а также переопределения команд под вашу команду.

0 прочтений

SourceMod определяет, что может администратор, однобуквенными флагами (b - базовый администратор, c - кик, d - бан, и так далее до z - root), привязанными к идентификатору, обычно SteamID, в файле addons/sourcemod/configs/admins_simple.ini. Число перед флагами, как в "STEAM_0:1:123456" "50:bcdj", - уровень иммунитета администратора: по умолчанию администратор не может применить команду к другому администратору с более высоким иммунитетом, а администраторы с равным иммунитетом могут действовать друг против друга, что можно изменить через sm_immunity_mode в cfg/sourcemod.cfg. Группы в admin_groups.cfg объединяют флаги и иммунитет, чтобы роль менялась в одном месте, а admin_overrides.cfg меняет, какой флаг нужен для команды. Это вся модель; остальная часть статьи - детали, благодаря которым она ведёт себя так, как вы ожидаете.

Всё это относится к каждой игре, на которой работает SourceMod: Team Fortress 2, Garry's Mod (где SourceMod встречается реже, чем ULX или SAM), Left 4 Dead 2, Counter-Strike: Source, Day of Defeat: Source и другим. Counter-Strike 2 не запускает SourceMod; там его аналог - CounterStrikeSharp, о нём в статье плагины CS2 с Metamod и CounterStrikeSharp.

Откуда SourceMod читает администраторов#

Все эти файлы лежат в addons/sourcemod/configs/ внутри папки игры (tf/, left4dead2/, cstrike/ и так далее).

ФайлЧто в нёмКем загружается
admins_simple.iniПо строке на администратора: идентификатор, иммунитет, флагиadmin-flatfile.smx
admins.cfgАдминистраторы в формате KeyValues, с группами и паролямиadmin-flatfile.smx
admin_groups.cfgИменованные группы: флаги, иммунитет, переопределенияadmin-flatfile.smx
admin_overrides.cfgКакой флаг требуется для каждой командыadmin-flatfile.smx
databases.cfgПодключение для администраторов на SQLadmin-sql-*.smx

Читаются оба файла администраторов, так что администратор может быть в любом из них. Выберите один для каждого сервера и придерживайтесь его: человек, описанный в обоих с разными флагами, - это гарантированный день путаницы. admins_simple.ini подходит для нескольких человек; admins.cfg с группами лучше, когда появляются роли; администраторы на SQL лучше, когда серверов несколько, потому что изменение в базе данных применяется везде. Как делиться этой базой, описано в статье глобальные бан-системы для сообществ.

После правки любого из этих файлов команда sm_reloadadmins в консоли сервера перечитывает их без перезапуска.

Администраторы на SQL для нескольких серверов

SourceMod поставляется со всеми частями для администраторов на базе данных, но по умолчанию они отключены. Перенесите admin-sql-threaded.smx (или admin-sql-prefetch.smx, который загружает всё при старте карты) и sql-admin-manager.smx из plugins/disabled в plugins и добавьте в databases.cfg запись с именем "admins", указав хост, базу данных, пользователя и пароль. Затем в консоли сервера:

code
sm_create_adm_tablessm_sql_addgroup "Moderator" bcj 20sm_sql_addadmin "Jan" steam STEAM_0:1:5555555 "" 0sm_sql_setadmingroups steam STEAM_0:1:5555555 "Moderator"

Первая команда создаёт таблицы, остальные создают группу и администратора, входящего в неё. Каждый сервер, подключённый к той же базе, видит одних и тех же администраторов, так что повышение или удаление человека выполняется один раз, а не на каждом сервере отдельно. Файлы продолжают работать вместе с базой данных - это удобно, чтобы хранить запись владельца локально на случай недоступности базы, - и это же причина проверять оба места, когда у кого-то есть права, которых быть не должно. Если вы предпочитаете управлять администраторами через веб-интерфейс, панель SourceBans++ умеет управлять администраторами и группами известных ей серверов, а не только банами.

Флаги и что каждый из них на самом деле даёт#

ФлагНазваниеЧто открывает
areservationЗарезервированный слот, если резервные слоты настроены
bgenericСам статус администратора: админ-меню, sm_who, админ-чат во многих плагинах
ckicksm_kick
dbansm_ban и связанные команды бана
eunbanСнятие банов
fslaysm_slay, sm_slap и подобные
gchangemapsm_map и другие крупные изменения геймплея
hcvarsm_cvar: чтение и изменение большинства cvar
iconfigsm_execcfg: выполнение конфиг-файлов
jchatФункции админ-чата: sm_say, sm_csay, sm_psay и так далее
kvoteЗапуск голосований
lpasswordsm_password: установка пароля сервера
mrconsm_rcon: любая консольная команда сервера
ncheatsИзменение sv_cheats и использование чит-команд
С o по tcustom1 - custom6То, что им назначат отдельные плагины
zrootВсе флаги, проверки иммунитета игнорируются

Два из них - по сути root под другим именем и требуют той же осторожности, что и z:

  • `m` (rcon) выполняет любую консольную команду. Включая rcon_password, exec, quit и изменение всего, что иначе защищал бы сам SourceMod. Тот, у кого есть m, может выдать себе всё остальное.
  • `h` (cvar) - очень широкий. Многие плагины настраиваются целиком через cvar, поэтому h позволяет администратору перенастроить их, в том числе отключить логирование или плагины, которые бы это заметили.

n - флаг, который губит публичные серверы: включённые читы означают noclip и спавн для любого, у кого есть команды.

b - тот, о котором забывают. Большинство админ-команд и плагинов ожидают, что у администратора он есть, и админ-меню (sm_admin) без него не работает. Администратор с cd, но без b, часто обнаруживает, что команды ему отказывают без видимой причины.

Пользовательские флаги с o по t ничего не значат, пока их не использует плагин. В документации плагина сказано, какой из них он проверяет, а admin_overrides.cfg позволяет это изменить.

Резервные слоты и флаг a

Флаг a - единственный, который часто выдают людям, вообще не входящим в команду: донатерам, постоянным игрокам, членам клана. Он ничего не делает, пока резервные слоты не настроены в cfg/sourcemod.cfg с помощью плагина reservedslots.smx, который идёт в комплекте с SourceMod:

cfg/sourcemod.cfg
sm_reserved_slots 2     // how many slots are kept for flag asm_hide_slots 0         // 1 hides the reserved slots from the visible maxsm_reserve_type 0       // 0, 1 or 2, see below

При sm_reserve_type 0 последние слоты держатся для игроков с резервом: когда публичные слоты заполнены, обычным игрокам отказывают, а игроки с a всё ещё могут зайти. При 1 сервер может заполниться полностью, и когда игрок с резервом заходит на полный сервер, кого-то без резервного доступа кикают - игрока с самой высокой задержкой или по другому правилу в зависимости от настроек, - чтобы освободить место. 2 ведёт себя как 1, но перестаёт кикать, когда на сервере заданное число администраторов. Тип 0 меньше всего удивляет игроков; тип 1 держит сервер полным, но кикает людей посреди игры, и если вы его используете, об этом стоит написать в правилах.

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

Идентификаторы: SteamID, IP и ник#

Запись администратора начинается с идентификатора. Их три вида:

  • SteamID, например STEAM_0:1:123456. Единственный вид, проверяемый через Steam, и именно его стоит использовать.
  • IP-адрес, записанный с ведущим !, например "!203.0.113.5". Имеет смысл только для постоянного адреса, который вы контролируете, например для сервера, обращающегося сам к себе.
  • Ник с паролем. Внутриигровой ник администратора, а пароль передаёт клиент.

Формат SteamID должен совпадать с тем, что видит сервер. Надёжный способ - попросить человека подключиться, выполнить status в консоли сервера и скопировать ID ровно так, как он выведен: разные игры на Source выводят немного разные формы, а перепечатывание приводит к ошибкам.

Администраторы по нику проверяются через клиентскую настройку. В addons/sourcemod/configs/core.cfg её имя задаёт PassInfoVar (по умолчанию _password), и администратор перед входом вводит в своей консоли setinfo _password "their-password". Слабое место в том, что значения setinfo отправляются на каждый сервер, на который заходит игрок, и любой из этих серверов может их прочитать. Администраторы по нику и паролю - крайняя мера для серверов, где проверка через Steam недоступна.

admins_simple.ini целиком#

Формат по документации самого SourceMod:

addons/sourcemod/configs/admins_simple.ini
// "<SteamID, !IP or name>" "[immunity:]<flags or @group>" ["password"]"STEAM_0:1:1111111"   "99:z"              // owner"STEAM_0:0:2222222"   "@Senior Admin"     // flags and immunity from the group"STEAM_0:1:3333333"   "40:bcdefgjk"       // admin without rcon or cvars"STEAM_0:0:4444444"   "20:bcj"            // moderator: kick and chat"!127.0.0.1"          "z"                 // local tools only"Night Shift Tom"     "bcj"   "a-long-password"

Правила:

  • Иммунитет необязателен. "bcj" без числа означает иммунитет 0.
  • @Group Name вместо флагов берёт всё из этой группы в admin_groups.cfg, включая её иммунитет.
  • Поле пароля применяется только к записям по нику.
  • Комментарии начинаются с //, а одна пропущенная кавычка ломает весь файл. Если после правки администратор внезапно лишился всех прав, проверьте кавычки в каждой строке, затем поищите ошибку в addons/sourcemod/logs/.

Группы, admins.cfg и групповой иммунитет#

Группы делают роли поддерживаемыми. Вы описываете «Moderator» один раз и меняете один раз.

addons/sourcemod/configs/admin_groups.cfg
Groups{	"Senior Admin"	{		"flags"		"bcdefgijk"		"immunity"	"60"	}	"Moderator"	{		"flags"		"bcj"		"immunity"	"20"		"Overrides"		{			"sm_map"		"deny"			"sm_slap"		"allow"		}	}}

Затем администраторы ссылаются на группу - либо через @Moderator в admins_simple.ini, либо в admins.cfg:

addons/sourcemod/configs/admins.cfg
Admins{	"Anna"	{		"auth"		"steam"		"identity"	"STEAM_0:0:2222222"		"group"		"Senior Admin"	}	"Jan"	{		"auth"		"steam"		"identity"	"STEAM_0:1:5555555"		"group"		"Moderator"		"flags"		"k"	}}

Jan получает флаги Moderator плюс k для голосований. Флаги групп и флаги из собственной записи администратора складываются.

У группового иммунитета две формы. Число применяется к членам группы, только если оно выше уже имеющегося у них иммунитета, так что группа может поднять иммунитет, но не понизить. Значение в виде `@GroupName` делает членов группы защищёнными именно от этой группы, независимо от чисел, - полезно для правила «модераторы никогда не могут действовать против старших администраторов», даже если кто-то потом по ошибке даст модератору высокое число.

Блок Overrides в группе разрешает или запрещает конкретные команды для её членов. Флаги он не меняет: в примере модераторам запрещён sm_map, даже если какая-то другая запись даёт им g, и разрешён sm_slap, хотя у них нет f.

Иммунитет: кто на кого может действовать#

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

Поведение задаётся sm_immunity_mode в cfg/sourcemod.cfg:

ЗначениеПоведение
0Уровни иммунитета игнорируются, кроме иммунитета от конкретных групп
1Защита только от администраторов с меньшим иммунитетом (по умолчанию)
2Защита от администраторов с равным или меньшим иммунитетом
3Как 2, но администраторы без иммунитета могут действовать друг против друга

При значении по умолчанию 1 два модератора с иммунитетом 20 могут кикнуть друг друга, и ни один не может тронуть старшего администратора с 60. При 2 равные тоже защищены друг от друга, что подходит серверам, где в команде уже бывали конфликты. Root-администраторы (z) полностью игнорируют иммунитет - ещё одна причина давать z как можно меньшему числу людей.

Схема, которая подходит большинству сообществ:

РольФлагиИммунитет
Владелецz99
Старший администраторbcdefgijk60
Администраторbcdefjk40
Модераторbcj20
Только резервный слотa0

Оставляйте m, h, i и n у владельца, если только у конкретного человека нет конкретной потребности, и делайте промежутки между числами иммунитета, чтобы позже можно было добавить роль, не перенумеровывая всех.

Переопределения: какой флаг нужен для команды#

Плагины сами выбирают флаг по умолчанию для каждой команды. Когда он не подходит к структуре вашей команды, admin_overrides.cfg меняет его без правки плагина:

addons/sourcemod/configs/admin_overrides.cfg
Overrides{	"sm_map"		"k"     // let vote-trusted staff change the map	"sm_rcon"		"z"     // rcon only for root, not for flag m	"sm_chat"		""      // anyone can message admins}

Пустая строка означает, что команду может использовать кто угодно. Имя, начинающееся с @, например "@CSDM" "m", - это группа команд, которую регистрируют некоторые плагины, чтобы несколько связанных команд можно было переопределить разом; если у плагина есть такая группа, её имя указано в документации.

Именно в переопределениях находится ответ на большинство вопросов «почему мой модератор может это делать?», поэтому оставляйте рядом с каждым короткий комментарий о том, зачем оно существует.

Проверка и решение проблем#

Команды, которые показывают, что на самом деле думает SourceMod:

code
sm_who                  // connected players and their admin flagssm_reloadadmins         // re-read every admin filesm plugins list         // confirm admin-flatfile.smx is loadedsm_dump_admcache        // write the full admin cache to a file for inspection

У администратора вообще нет прав. SteamID не совпадает (скопируйте его из status), в строке синтаксическая ошибка, или admin-flatfile.smx не загружен либо перемещён в plugins/disabled. Проверьте addons/sourcemod/logs/ на ошибки разбора.

Права работают после смены карты, но не сразу. Вы отредактировали файл, но не выполнили sm_reloadadmins.

Администратор может кикнуть другого администратора, которого не должен. Их иммунитет равен, а sm_immunity_mode стоит в 1. Поднимите иммунитет одному, переключитесь на режим 2 или используйте групповой иммунитет через @GroupName.

Команда плагина отказывает администратору, у которого есть нужный флаг. У него нет b, или переопределение изменило требуемый флаг. Посмотрите в admin_overrides.cfg и в блок Overrides его группы.

У кого-то есть права, которых вы не выдавали. Проверьте и admins_simple.ini, и admins.cfg, каждую группу, в которую он входит, и таблицы SQL-администраторов, если вы их используете. Если объяснения всё равно нет, считайте это взломом - порядок действий есть в статье что делать, если ваш сервер взломали.

Действия администраторов, логи и видимость#

SourceMod пишет действия администраторов в addons/sourcemod/logs/, по файлу на день, так что видно, кто кого кикнул или забанил и когда. Читайте их, когда игрок жалуется на кого-то из команды, и иногда - когда никто не жалуется.

sm_show_activity в cfg/sourcemod.cfg управляет тем, как действия администраторов объявляются в игре. Это сумма значений: 1 показывает действия не-администраторам анонимно, 2 добавляет для них имена администраторов, 4 показывает действия администраторам анонимно, 8 добавляет имена для администраторов, а 16 всегда показывает имена root-администраторам. Значение по умолчанию 13 означает, что игроки видят, что «администратор» что-то сделал, а администраторы видят, кто именно. Многие сообщества ставят 15, чтобы игроки видели, какой администратор действовал, - это отбивает охоту злоупотреблять.

На RE:NODE консоль панели выполняет каждую из этих команд без RCON-клиента, а субпользователям можно дать доступ к консоли без доступа к файлам - так модератор может выполнить sm_reloadadmins или посмотреть sm_who, не имея возможности редактировать файлы администраторов. У Team Fortress 2, Garry's Mod и Counter-Strike 1.6 есть собственные страницы в разделе игровых серверов, а установка SourceMod с нуля описана в статье плагины SourceMod для Team Fortress 2.

FAQ#

В чём разница между флагом b и флагом z?

b делает человека администратором без каких-то особых полномочий; каждый другой флаг добавляет конкретную возможность. z - это все флаги сразу, включая флаги, которые плагины добавят позже, и он игнорирует иммунитет. Давайте b всей команде, а z - владельцу.

Можно ли дать администратору доступ только к одной команде?

Да. Дайте ему b, затем используйте блок Overrides в группе с "command" "allow" или измените в admin_overrides.cfg требуемый флаг команды на пользовательский флаг, который есть только у него.

Защищает ли иммунитет администраторов от голосований?

Сам по себе нет. Иммунитет применяется к админ-командам, направленным на игрока. Может ли голосование за кик убрать администратора, зависит от плагина голосований, и многие из них проверяют иммунитет или флаги отдельно.

Использовать admins_simple.ini или admins.cfg?

admins_simple.ini - для нескольких администраторов на одном сервере. admins.cfg с группами - когда появились роли. База данных - когда несколько серверов делят одну команду.

Почему администратор сохраняет права после удаления?

Кеш администраторов всё ещё загружен. Выполните sm_reloadadmins и проверьте, не описан ли он ещё и в другом файле администраторов или в SQL-схеме на основе групп.


Комментарии

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

0/2000