ADPASS рекомендует материал к прочтению
Бегет
29.02.2024, 16:21

С блэкджеком и терминалом: Как мы прятали подарки на сервере, а наши пользователи их искали

Всем привет! На связи команда Бегета. Начнем с чистосердечного признания. Есть у нас в компании традиция: в конце каждого года мы стремимся приятно удивлять своих пользователей запоминающейся акцией.

Дело в том, что мы не сторонники скидок ради скидок и когда речь заходит об акциях, нам интереснее выбирать нестандартные механики. Почему? Потому что обычные «голые» скидки — это банально и скучно, тогда как оригинальные активности позволяют отвлечься от рутины, отдохнуть, пошевелить мозгами. Плюс к этому сама по себе скидка — это что-то, что дают все в том или ином виде, а интерактивные механики и элементы геймификации дают возможность выделиться и запомниться, а также, если верить статистике, повысить вовлеченность пользователей на 48%.

Вот и в этом году мы решили не делать исключений. Мы устроили мозговой штурм, по результатам которого решили, вдохновившись CTF (от англ. capture the flag — популярный в компьютерных играх и информационной безопасности формат, при котором игрокам обычно предоставляется набор заданий, которые необходимо решить), подготовить для пользователей задания разного уровня на нашем сервере.

Мы подготовили 24 задания, которые пользователям предстояло решить, чтобы получить подарки. Задания получились разной степени сложности: где-то нужно было выполнить пару простых команд, а где-то — искать файлы, расшифровывать послания и отлавливать аномальные процессы. Задания формировались под разный уровень пользователей, для кого-то просто зайти на сервер по SSH уже было чем-то неприступным, а кто-то писал скрипты прямо в терминале. Нам было важно учесть эту разницу в уровне пользователей.

В качестве канала коммуникации выбрали наш Telegram-чат — специально создали отдельный тред, в котором поделились кредами для доступа к игровому серверу и ежедневно публиковали задания. Участникам было нужно прочитать задание, подключиться к серверу по SSH, найти на сервере ID подарка, выполнив задание, первым прислать ID подарка в тред и получить заслуженный подарок. Telegram мы выбрали потому, что это значительно упрощало взаимодействие. Формат чата легко растягивался на любые задачи акции, плюс это давало существенное облегчение участникам в плане общения с нами и друг с другом.

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

Что ж, приглашаем вас в закулисье поиска сокровищ на сервере!

Подготовка сервера

Итак, для начала расскажем, какие технические манипуляции мы проделали с сервером, чтобы он всё выдержал. Поистине, наш системный администратор постарался на славу.

По предварительному прогнозу единовременно проходить задания могло до 5 тысяч человек, поэтому нам предстояло заранее продумать возможные лимиты и резервы. Выбрали очень мощный сервер: два процессора AMD EPYC 7763, дающих вместе 256 логических ядер с частотой в бусте 3.5 GHz плюс оперативной памяти 2 терабайта.

Для предотвращения DDoS-атак мы использовали сразу несколько сетевых карт по 10 Гб, а для изолированности сессий пользователей написали на bash враппер, который выполнялся при подключении по SSH и создавал для каждой сессии новый docker-контейнер с заданиями. Попутно создали зеркальный soft raid на случай выхода диска из строя. Вероятность крайне низкая, но всегда лучше перестраховаться, правда?

В первый же день стало ясно, что у этого решения есть минус. SSH позволяет выполнять команды неинтерактивно — и несколько пользователей попытались исследовать сервер, выполняя lshw и еще дюжину-другую утилит и скриптов. Это не имело смысла, так как со стороны клиента ответ выполняющихся программ не получить. В итоге решили использовать ForceCommand в конфиге sshd (это отключало интерактивные команды) — и наш сервер оказался еще более защищен от возможного вандализма.

И конечно, сами контейнеры были ограничены по ресурсам — как по объему аллоцирования оперативной памяти, так и по возможностям процессора и скорости записи на диск.

Что за задания

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

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

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

Для наглядности разберем в качестве примера одно из заданий.

В нем пользователям нужно было отыскать скрытый на сервере файл при условии неработающих команд ls, dir, find и tree.

Итак, файл скрыт. Ни для кого не секрет, что в Linux скрытыми условно считаются файлы, начинающиеся с точки. Их и будем искать.

Основная сложность — найти способ вывести список файлов. Можно нагуглить или задать вопрос в ChatGPT и отыскать среди вариантов утилиту vdir, которая едва ли отличается по функциональности от dir.

Выводим рекурсивно все файлы, включая начинающиеся с точки, и далее — находим только те, которые начинаются с точки и имеют после точки буквенные символы:

Смотрим эти файлы и находим заветный ключ.

Кроме такого решения, можно вывести список файлов, начинающихся с точки, пусть и не рекурсивно:

Это только один, не самый заковыристый, пример, а более детальным разбором нескольких из них наш системный администратор Алексей поделился в отдельном лонгриде — осторожно, он очень объемный.

Итоги

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

В среднем на решение понадобилось от 4 до 10 минут, а задание-рекордсмен заняло 1 час 8 минут.

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

Немного обратной связи от участников.

Если у вас возникли вопросы, с удовольствием ответим на них в комментариях, а обсудить акцию в том числе с ее участниками можно в нашем уютном сообществе в Telegram.

И конечно, будем рады узнать, какие оригинальные маркетинговые активности вы встречали у других брендов и чем они особенно вам запомнились.

Вам понравится

Yappy
12.04.2024
Mareven
28.03.2024
Как создать полезный гид
для предпринимателей?