Pull to refresh
122.37

Отчёт с Олимпиады по Linux + задания с ответами

Reading time 6 min
Views 34K
7 декабря прошел финальный тур Олимпиады по GNU/Linux среди студентов и молодых специалистов. Вот топик с анонсом: первый тур проводился дистанционно, второй — очно в Москве. Ниже отчёт и примеры заданий заочного и очного туров.


Геннадий Мазуров занял первое место.

Победители:
  • I место — Геннадий Мазуров
  • II место — Бова Боваев
  • III место — Вячеслав Карпухин


Отчёт


Мы уже далеко не первый год проводим Олимпиады по системному администрированию, но в этот раз события развивались несколько стремительнее, чем обычно. После топика с анонсом мы поймали хабраэффект, который, в частности, выразился в том, что формат из межвузовского очень быстро перерос в международный. Часть претендентов просилась участвовать вне конкурса – из интереса. Мы решили никого не ограничивать, и допустили к участию в первом туре всех желающих. По нашим подсчетам примерно 60% участников пришло с Хабра, остальные узнавали про олимпиаду в социальных сетях, а также из объявлений в университетах. Многие звали друзей.

Из-за того, что было много участников не из Москвы, нам пришлось на ходу менять даты второго тура (не все успевали приехать) и некоторые правила. Возникли также разночтения в трактовке, кто такие “молодые специалисты”. Мы ориентировались на людей, закончивших ВУЗы 1-3 года назад (то есть примерно до 25 лет), но нечетко это проговорили. Я прошу прощения у всех участников, которые из-за этого могли ощутить некоторую скомканность организации. Второй раз на эти грабли не наступим.

Мы намерено упростили задания первого тура, чтобы не возник отпугивающий эффект, как это было год назад, когда до финала добрались только 12 человек. В этом году на второй тур мы отобрали 30 лучших участников, из них к нам 7 декабря смогли приехать 22 человека. Зато, по мнению нашего победителя, Геннадия Мазурова, который уже принимал участие в нашей олимпиаде 2 года назад, на этот раз во втором туре задания были существенно сложнее, чем ранее.

Геннадий вышел вперёд с большим отрывом. В первом туре можно было набрать максимум 30 баллов, во втором – 70. Победитель набрал по итогам двух туров 80 баллов (в среднем у участников было по 45 баллов). Геннадий живет в Москве, он закончил МГТУ им Баумана и уже работает. Второе место завоевал Бова Боваев (66 баллов), который, можно сказать, пробился к нам на финал: его допустили участвовать в первом туре вне конкурса, а потом уже разобрались с наличием-отсутствием у него высшего образования. Бова родом из Элисты (Калмыкии), заканчивает университет и сейчас также живет в Москве. Третье место занял Вячеслав Карпухин из Уфы (63 балла).

О формате проведения второго тура участники могли догадаться: мы всячески давали понять, что наш финал будет похож на экзамены RedHat. Готовиться можно было по Exam Objectives на сайте RedHat. Но в отличие от экзаменов RedHat мы разрешали пользоваться интернетом. Во втором туре было 20 заданий с разными баллами, которые нужно было выполнить за 4 с половиной часа. После подведения итогов мы разослали всем финалистам правильные варианты решения для заданий второго тура.

Всех приехавших к нам в гости во время проверки работ развлекли экскурсией по офису и одному из наших дата-центров. После олимпиады несколько участников выразили желание у нас работать, и сейчас мы рассматриваем их резюме. Но появления большого количества новых сотрудников после Олимпиады мы не ждем — высокие результаты, как правило, показывают те, кто уже где-то работает: понятно, что наличие практического опыта дает большое преимущество. Наша Олимпиада, скорее, ориентирована на других людей: на тех, кто пришел, попробовал и понял, что есть ещё чему учиться — и решил совершенствоваться. На одной из прошлых Олимпиад у нас был участник, студент Бауманки, занявший далеко не призовое место. Но в очередной год он снова участвовал и завоевал первое место – хорошо прокачался.

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



Задания первого тура с ответами


UPD: скачать PDF

Выборочные задания второго тура, вызвавшие наибольшие затруднения


Исходная ситуация: в вашем распоряжении находятся 2 виртуальные машины с установленной CentOS 6.3 x64, расположенные в одном VLAN. Имена машин — node1 и node2. SELinux на момент проверки выполнения заданий должен работать в режиме targeted enforcing. Перед проверкой заданий машины будут перезагружены.

7. Создайте на node1 каталог /pub. Корневая файловая система, которой принадлежит каталог /pub, должна быть смонтирована с опциями по умолчанию. Каталог /pub предназначен для совместной работы пользователей user1 и user2. Необходимо, чтобы каждый из них мог создавать в /pub файлы, а другой пользователь мог их редактировать. Остальные пользователи не должны иметь доступа в данный каталог.

Ответ
Это задание про SETGID directory, которые используются для организации совместной работы пользователей. Правильно это задание выполнили только 2 участника.

mkdir /pub
chown root:grp1 /pub
chmod u=rwx,g=rws,o= /pub


SETGID (s) обеспечивает, что все файлы и каталоги, которые создаются внутри /pub, имеют ту же группу, что и /pub, т.е. grp1.
Далее надо было удостовериться, что для пользователей grp1 параметр umask=0002, чтобы по умолчанию вновь создаваемые объекты разрешали группе писать g=rwx.


11. На node1 предоставьте каталог /d01 и его подкаталоги в общий доступ по NFS только на чтение для всех адресов сети. Убедитесь, что содержимое всех каталогов доступно с узла node2.

С этим заданием никто из участников на 100% не справился.

Ответ
Первая хитрость заключалась в том, что /d01 содержит точки монтирования других файловых систем, которые по умолчанию не экспортируются. Поэтому предпочтительный вариант решения – добавить в /etc/exports отдельные записи для /d01, /d01/public и /d01/private.

Еще один вариант – использовать при экспорте /d01 опцию nohide, однако в реальной жизни ее следует использовать с осторожностью (man 5 exports)

Вторая хитрость, которая поджидала на пути, это запись:
rpcbind:ALL
в /etc/hosts.deny на node2.


Также надо было не забыть включить автозапуск служб:
chkconfig nfs on


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

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -j ACCEPT


15. На node2 используйте часть неразмеченного пространства диска размером 2ГБ и подключите его по протоколу iSCSI к node1. На узле node1 это пространство должно быть доступно в виде блочного устройства.

С этим заданием справился только один участник.

Ответ
Сделать средствами LVM логический том размером 2Гб (но можно, конечно, было сделать просто раздел на диске). Уставить на node2 пакет scsi-target-utils. Добавить в /etc/tgt/targets.conf:
<target iqn.2012-12.bla-bla-bla:target0>
    backing-store /dev/newvg/iscsi-vol
</target>


Перезапустить службу tgtd и активировать ее автозагрузку:

service tgtd restart
chkconfig tgtd on


Открыть порт iscsi-target 3260/tcp с помощью iptables.
На node1 убедиться, что установлен пакет iscsi-initiator-utils, обнаружить target:
iscsiadm -m discovery -t st -p 10.1.x.2:3260
Starting iscsid: [ OK ]
10.1.x.2:3260,1 iqn.2012-12.com.example:server.target0


Проверить, что доступен новый диск:
fdisk –l


17. На node2 установите и настройте web-сервер с двумя виртуальными сайтами — www.example.com и www.test.net. Сайт www.example.com должен быть доступен при обращении к серверу по 8088 порту, а www.test.net — по 8088 и 443. web-сервер должен автоматически запускаться при старте системы.

Это задание вызвало много затруднений, видимо, из-за зависимости от настроек SELinux. Про SSL в задании прямо не оговаривалось, но мы заложились на очевидность такого требования.

Ответ
Нужно было установить пакеты httpd и mod_ssl. В конфиге /etc/httpd/conf/httpd.conf исправить:
Listen 8088
NameVirtualHost *:8088


Конфигурация virtual hosts в минималистичном варианте может быть такой (можно там же в httpd.conf):
<VirtualHost *:8088>
    ServerName www.example.com
</VirtualHost>
<VirtualHost *:8088>
    ServerName www.test.net
</VirtualHost>



По SSL-части нужно было изменить в /etc/httpd/conf.d/ssl.conf:
Listen 443
<VirtualHost *:443>
ServerName www.test.net:443


Остальное по умолчанию.
Поскольку SELinux работает в режиме targeted enforcing, apache не может использовать порт 8088, этого порта нет среди разрешенных для него политикой:

semanage port -l | grep -w http_port_t
http_port_t tcp 8080, 80, 443, 488, 8008, 8009, 8443


добавляем для контекста http_port_t еще один разрешенный порт (утилита semanage входит в пакет policycoreutils-python, его нужно было установить):

semanage port -a -t http_port_t -p tcp 8088


После этих действий можно запустить apache и установить автозагрузку:
service httpd start
chkconfig httpd on


Также необходимо было открыть порты 8088 и 443 с помощью iptables.


Следующая олимпиада


В следующем году будет очередная Олимпиада по системному администрированию. Я с удовольствием выслушаю ваши пожелания и обратную связь по этой. Из возможных изюминок следующего года — скорее всего это будут уже не разрозненные задачи, а этапы создания одного решения, каждый из которых дополняет остальные.
Tags:
Hubs:
+30
Comments 30
Comments Comments 30

Articles

Information

Website
croc.ru
Registered
Founded
Employees
1,001–5,000 employees
Location
Россия