Решения первого тура root.yandex.ru

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

Условия были следующими. Каждой команде выделялся предварительно зашифрованный одинаковый образ VirtualBox. Его следовало расшифровать (пароль для расшифровки становился доступным при старте игры), запустить и организовать OpenVPN соединение по сертификату (который тоже выделялся в момент старта в зашифрованном виде) к серверу проверки заданий. Отправив команду на проверку, можно было получить хеш-код в случае успеха. Этот код капитан команды должен был ввести на страничке команды. Побеждают те команды, которые раньше всех решат больше всех задач.
Теперь о самих задачах. Их 10, они касаются различных аспектов системного администрирования. Некоторые из них относятся к разряду «экстремального администрирования», который требует восстановить работоспособность приложения во что бы то ни стало. В прошлом у меня была работа подобного типа, и я был в таких условиях как рыба в воде.
Внутри работала Ubuntu 12.04 Server. Пароль root на вход в систему был, естественно, неизвестен, его следовало просто сбросить в single-режиме.

Итак, вопросы и решения.

Цитата:
Задание 1
На вашем сервере есть Drupal, но он работает не так, как нужно. Почините его. Администратор должен иметь возможность зайти на сайт под root : FgrThx36hhDsacf

Так как наш сайт крутится на Drupal, это задание не вызвало у нас особых проблем :). Осложнениями выступали отсутствующий модуль MySQL к PHP и неправильная конфигурация MySQL (в которой сервер не запускался). Нужно было исправить путь к каталогу с базами, подправить один параметр и сбросить пароль root.

Цитата:
Задание 2
На вашем сервере установлен dovecot с RoundCube. Ничего не работает, почта не ходит. Домен: root2012.yandex.ru. Мы отправляем письма на ваш сервер пользователю test @ root2012.yandex.ru, а затем пытаемся их получить с паролем dss354Ggdfg5

Эту задачу решал я. Она казалась легче, чем на самом деле есть. Часть проблем с RoundCube лечилась еще при выполнении первой задачи. Дополнительно было нужно расскоментировать модуль mysql.so в конфигурации PHP. Dovecot был настроен на системных пользователей, поэтому test с нужным паролем следовало добавлять через useradd. В exim (почтовик по умолчанию для Ubuntu) следовало убрать настройку квоты, которая резала почту при ее объеме свыше 1 байта (то есть практически всю). Сделав все это, я добился того, чтобы тестовое письмо через RoundCube попадало абоненту. Однако серверу проверки это оказалось недостаточно - он пытался отправить письмо, сделав запрос на сервер виртуалки на предмет MX-записи. Оказалось, что нужно еще поднимать DNS-сервер, который будет держать зону root2012.yandex.ru. Сделал, проверил, получил хеш. Как два байта переслать.

Цитата:
Задание 3
Настройте Squid на порту 3128, который бы, помимо прочего, проверял трафик на вирусы.

Несмотря на кажущуюся простоту, с этой задачей мы порядочно повозились. Squid настраивается стандартно, с поддержкой ICAP и Clamav. Но проверяющему серверу не нравилось то, как мы обходимся с запросом, пытающимся скачать вирус. По умолчанию модуль ICAP выкидывал страницу с редиректора, в котором говорилось, что доступ к контенту запрещен, а проверяющему серверу нужна была страничка с HTTP-кодом 403. Подобные задачи с угадайками довольно часто попадались, что очень сильно нас раздражало. Мы возились с редиректором, меняли настройки, все без толку, пока наш капитан просто не решил задачу в лоб. Нужен 403? На, получай! В месте редиректора был просто размещен адрес, который был не доступен пользователям (ошибка 403). Проверка на этом, удовлетворилась.

Цитата:
Задание 4
Настройте samba так, чтобы \\ip\pub\ был доступен гостю, и там лежал «Master Foo and the Ten Thousand Lines.txt».

Задача проста. Ставим samba с гостевым доступом, делаем шару, кладем файл, содержащий полный текст Master Foo and the Ten Thousand Lines. У нашего участника были какие-то затруднения по этому поводу, так как система проверки отказывалась принимать тот текст, что был у нас. Скачали с другого места, проверка прошла.

Цитата:
Задание 5
Сайт должен выглядеть аналогично изображенному на картинках /var/gopher/img/*.

Задача простая и веселая. По адресу лежало три изображения, в которых были отображено содержимое каталогов в /var/gopher/. Файлы наводили на мысль, что тут должен работать ныне забытый сервер Gopher. Эту задачу поначалу делал я, однако пришлось прерваться, так как я уезжал с работы домой (начало было в рабочее время, у нас всех оказался один «мертвый час», когда никто ничего не делал). По прибытию домой я обнаружил, что задача была почти решена. Повозившись еще полчаса, мы добились положительного ответа.

Цитата:
Задание 6
Настройте rsh для пользователей alice и bob так, чтобы они могли заходить и удаленно исполнять команды без пароля под своими именами.

Эта задача вызвала много нареканий ото всех. Во-первых, в первое время сервер проверок отвечал ошибкой на попытку проверки, а во-вторых, сама задача поставлена некорректно. Должно быть «Настройте rsh для пользователей alice и bob так, чтобы они могли заходить и удаленно исполнять команды без пароля только под своими именами». Одно слово, но очень большая разница. Ничего сложно в самой задаче нет, просто нужно вспомнить как настраивается rsh.

Цитата:
Задание 7
В образе установлен NNTP-сервер, который не работает. Кроме этого, на нем должны быть новости с id one @ example.com и two @ example.com. Полезную информацию можно найти в файле /var/lib/news/newsgroups.

Кажется, эту задачу мы решили в последнюю очередь. В файле /var/lib/news/newsgroups были инструкции, что должны быть два пользователя alice и bob, которые могли постить сообщения только в свои группы и только одни. Так как протокол NNTP никто из нас в глаза не видел, мы никак не могли поначалу создать две новости с нужными id (ответ был прост - нужно было постить через telnet, через него можно было указывать id). В конце концов, мы просто подделали два id, после чего сервер проверок слал нам ошибку Access violation. Оказалось что мы чуток не доделали задачу - в группы alice и bob мог постить даже анонимный пользователь. Исправив ошибку, мы решили задачу и закончили игру.

Цитата:
Задание 8
Настройте ssh, http и https на одном порту. Можно использовать самоподписанный сертификат. Пользователь alice должен видеть свой пароль в /mypass.txt. По http и https должен отдаваться файл /check.txt с произвольным содержимым. Сервис должен отвечать по 443 порту.

Я эту задачу не решал, но насколько я помню, решение искали в нужной версии sshl. sshl не умеет отличать http от https. Когда поняли это, поставили nginx и настроили его так, чтобы он в случае ошибки ssl отдавал по http.

Цитата:
Задание 9
Ответ на это задание был в конфигурационном файле.

Задание на сообразительность и острый глаз. В /etc лежал каталог .git, что навело на мысль, что в /etc находится git-репозиторий. Просмотрев логи изменений, находим ключ.

Цитата:
Задание 10
Если программа /home/task/task выведет число от 8 до 12 десять раз подряд, то она скажет ответ.

Задача довольно легкая (по крайней мере мы ее относительно быстро решили). Я ею не занимался, поэтому просто напишу то, что понял со слов коллег по команде: «Сначала прогнали strace и заметили, что он читает, а потом постоянно замеряет время чтения по gettimeofday/read/gettimeofday. Программа статическая, поэтому найти что-то через strings или LD_PRELOAD не получится. Чем больше нагрузка на диск - тем меньше числа. Через strace вставили usleep в sys_read. Вот собственно, и все =)».

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

Это еще не конец, ждите продолжения во второй серии!