Установка Slackware и настройка безопасности

Эта статья описывает две группы скриптов: первая используется для установки и удаления отдельных пакетов, вторая - для настройки безопасности. Обе спроектированы для Slackware Linux. Утилиты для установки и удаления пакетов не так наворочены, как программы из SlackPkg или Packware, но они дают полный контроль над системой. То же самое верно и для скриптов настройки безопасности. Они выполняют только элементарные операции. Оба набора мы собрали в связку slack*more.

[Cezary M Kruk. Перевод Андрей Романычев]

Установка Slackware и настройка безопасности

Автор: Cezary M Kruk
Перевод: Андрей Романчев


Эта статья была переведена автором с польского языка. Оригинал будет опубликован в летнем выпуске CHIP Special Linux.

[Прим.ред. -- Уточнение: с польского на английский. Так она попала в Linux Gazette и только после этого была переведена на русский. Если всё это обратно перевести на польский -- автор свою статью может не узнать. ;-)]

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

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

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

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

От установки к безопасности

Эта статья описывает две группы скриптов: первая используется для установки и удаления отдельных пакетов, вторая - для настройки безопасности. Обе спроектированы для Slackware Linux. Утилиты для установки и удаления пакетов не так наворочены, как программы из SlackPkg или Packware, но они дают полный контроль над системой. То же самое верно и для скриптов настройки безопасности. Они выполняют только элементарные операции. Оба набора мы собрали в связку slack*more.

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

Мы будем использовать в качестве примера Slackware Linux, потому что этот дистрибутив заставляет пользователей изменять конфигурационные файлы напрямую. Другие дистрибутивы Linux, предлагая комплексные программы для этих целей, отдаляют пользователя от файлов настройки. Таким образом они или делают пользователей ленивыми или заставляют их проводить сложные исследования, чтобы установить, что и где на самом деле было изменено в их системе "дружелюбными программами".

[Прим.ред. -- "Что русскому в радость, то немцу смерть." Пользователя любознательного (usufructuarius studiosus -- да простят меня знатоки латыни) такой подход устроит, он ему просто необходим. А вот для простых смертных, чей компьютер это инструмент для работы, а не средство для познавания окружающего мира, такая особенность ни к чему. Она его только пугает. К тому же автор немного передёргивает -- призрак единого реестра для конфигурационных файлов Linux ещё бродит по миру. Пусть и дальше бродит, а до тех пор любой желающий может в обход конфигурирующих программ, выполнять настройку вручную.]

Slack*more делится на две части. INSTALL.tgz содержит инструменты для установки, удаления и обновления программ, SECURE.tgz - инструменты для предварительной настройки безопасности.

группа пакетов d

Рисунок 1. С помощью SCRIPT.sh из директории ./Slackware-9.0 генерируются списки пакетов отдельных групп. На скриншоте пакеты из группы d (development)

Установка и удаление пакетов

Наиболее важные части пакета INSTALL.tgz - это скрипт INSTALL.sh и директория ./Slackware-9.0, содержащая SCRIPT.sh и файл Slackware.

Чтобы инициализировать эти утилиты, вам надо смонтировать установочный диск со Slackware к /mnt/cdrom и запустить SCRIPT.sh из ./Slackware-9.0. Скрипт просмотрит директории на CD-ROM и, руководствуясь расположенными здесь тэг-файлами, создаст файлы, содержащие информацию о пакетах (Рисунок 1.). Каждый файл будет иметь имя, соответствующее имени его группы. Например, в файле e, используемом для сборки Emacs, вы найдёте среди прочего следующие записи:

emacs: ADD 
emacs-misc: REC 
emacs-nox: OPT 

Пользователи, разбирающиеся в Slackware Linux, знают, что категория ADD указывает пакеты, необходимые для данной программы, категория REC означает рекомендуемые пакеты, а категория OPT - опциональные.

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

emacs: ADD 
#emacs-misc: REC 
!emacs-nox: OPT 

пакет emacs будет установлен, emacs-misc пропущен, а emacs-nox не только пропущен, но и удален, если ранее он был установлен.

В файле Slackware из директории ./Slackware-9.0 содержится информация о группах пакетов:

a 
ap 
d 
e 
f 
... 

Согласно этому файлу, скрипт будет решать, что делать с группами пакетов. Если вы измените этот файл следующим образом:

a 
ap 
#d 
!e 
f 
... 

группа d будет пропущена, а каждый пакет из группы e, установленный ранее, будет удален.

Таким образом, если вы поставите перед именем пакета # - он будет пропущен; если ! - соответствующие компоненты будут удалены из системы. Если пакет или группа пакетов ещё не установлены, # и ! равнозначны. Записи из файла Slackware имеют больший приоритет, чем файлы групп, содержащие названия пакетов. Так, если вы решите не ставить целую группу пакетов или удалить пакеты, входящие в неё, скрипт сделает это, не обращая внимания на информацию, записанную в файлах, содержащих имена отдельных пакетов.

Когда вы подготовите файл Slackware и файлы, содержащие информацию об индивидуальных пакетах, можно запускать скрипт INSTALL.sh. Он добавит или удалит соответствующие компоненты системы. Если это первая установка Slackware и система ещё не была соответствующим образом настроена, неплохо будет оптимизировать работу жесткого диска, используемого для установки. Для этого вы можете использовать скрипты INSTALL.hda или INSTALL.hdb. После этого процесс инсталляции или удаления пакетов пойдет быстрее.

INSTALL.sh спроектирован для многоцелевого использования. Используя его, вы можете выполнить и основную установку Slackware. Достаточно установить пакеты группы a, сначала используя установочную программу Slackware, а затем доверить работу скрипту, закомментировав названия пакетов, которые вам не нужны и, вызвав INSTALL.sh, установить оставшиеся.

Информация о пакетах

В директории ./Packages находится ещё один SCRIPT.sh. Если вы примонтируете Slackware CD-ROM и запустите этот скрипт, создадутся директории, содержащие файлы с информацией о каждом пакете системы. Подобная база данных удобна, так как не придется каждый раз монтировать каждый раз диск, для того чтобы узнать назначение того или иного пакета. Создавать такую базу не обязательно, если вы решили установить Slackware Linux полностью. Тогда вы сможете найти описание всех пакетов в /var/log/packages.

Патчи

В директории ./Patches лежат два скрипта. Для начала стоит запустить 0.check. Он проверит сервер sunsite.icm.edu.pl на наличие обновлений для Slackware 9.0 и создаст файлы: Packages.html с информацией об апдейтах и Packages.txt с названиями пакетов:

mutt-1.4.1i-i386-1 
sendmail-8.12.9-i386-1 
sendmail-cf-8.12.9-noarch-1 

Скрипт 1.get будет использовать Packages.txt, чтобы скачать сами программы и соответствующие файлы .txt и .tgz.asc. Для этого в нем используется команда wget -c -t0, так что вы можете не опасаться, что скачаете одни и те же файлы повторно. С другой стороны проверка, скачан уже файл или ещё нет, занимает некоторое время и лучшим решением будет просмотреть Packages.txt до запуска 1.get и удалить оттуда пакеты, которые у вас установлены или вам не нужны.

Вы можете изменить команду для скачивания файлов на wget -c -t0 -b . Тогда все файлы будут скачиваться с сервера одновременно - в фоновом режиме. Учтите, что не каждый сервер позволяет устанавливать столько одновременных соединений. Если sunsite.icm.edu.pl не удовлетворяет вашим потребностям, вы можете прописать в скриптах 0.check и 1.get другой хост (прим.ред. -- список зеркал вы найдёте по адресу http://alphageek.dyndns.org/linux/slackware-mirrors.shtml). Затем вы можете изменить команду, генерирующую файл Packages.txt на основе Packages.html. Изначально это такая команда:

cat Packages.html | grep ".tgz.asc" | sed 's/.tgz.asc//g' | sed \ 
's/.*A HREF="//' | sed 's/">.*//' > Packages.txt 

Скрипт 1.get записывает информацию только о некоторых пакетах. Большое количество обновлений для Slackware лежат в отдельных директориях (kde, kdei, и т.д.). Если надо скачать и их, вам придется сделать это вручную или соответственно модифицировать исходный скрипт.

Директория ./usr/local/bin

В ./usr/local/bin находится скрипт catpkg, который делает просмотр файлов, находящихся в /var/log/packages, проще. INSTALL.sh полностью копирует содержимое ./usr/local/bin в аналогичную системную директорию. Поэтому вы можете поместить сюда различные скрипты, которые вы хотите использовать на первое время работы с системой.

удаленные SUID и SGID биты

Рисунок 2. Скрипт SECURE.sh снимает SUID и SGID биты с выбранных фалов и выводит их на экран

Безопасность

Главный скрипт в архиве SECURE.tgz - это SECURE.sh. Он выполняет следующие задачи:

  • В файле /etc/login.defs устанавливает значение переменной PASS_MAX_DAYS равным 182. Благодаря этому пароль для новых пользователей будет действителен только в течение шести месяцев.

  • В файле /etc/profile устанавливает значение переменной HISTFILESIZE равным 100. Благодаря этому длина истории команд ограничится 100 строками.

  • В файле /root/.bashrc устанавливает значение переменной TMOUT равным 900. Благодаря этому неактивная сессия пользователя root будет закрыта после 15 минут.

    (Прим.ред. -- Но если в консоли открыта интерактивная программа, то этот ключ не сработает. Проверялось на mc, думаю, подобная ситуация и с другими программами.)
  • Комментирует в /etc/inetd.conf все незакомментированные, но потенциально опасные сетевые сервисы.

  • Добавляет в /etc/hosts.deny запись ALL: ALL@ALL для блокировки всех внешних доступов к системе.

  • Добавляет в /etc/hosts.allow запись ALL: ALL@127.0.0.1 : ALLOW, разрешающую доступ к ресурсам локальной машины.

  • В файле /etc/host.conf меняет последовательность order hosts, bind на более безопасную order bind, hosts и добавляет строчку nospoof on.

  • В файле /etc/securetty блокирует доступ пользователю root ко всем консолям, кроме /dev/tty1.

  • Удаляет из файла /etc/group группы news и uucp, ненужные в большинстве случаев. Это эквивалентно выполнению команд groupdel news и groupdel uucp.

  • Удаляет из файла /etc/passwd пользователей news, uucp, operator, sync, и shutdown. Это эквивалентно последовательному выполнению команды userdel с соответствующими параметрами.

  • Повторяет действия из предыдущего пункта для файла /etc/shadow.

  • В файле /etc/inittab комментирует строку ca::ctrlaltdel:/sbin/shutdown. Благодаря этому комбинация Ctrl-Alt-Delete больше не перезагружает компьютер.

  • Убирает у всех скриптов из директории /etc/rc.d права на чтение и выполнение непривилегированными пользователями.

  • Добавляет в /etc/rc.d/rc.local несколько команд, включающих или выключающих различные сервисы. Чтобы эти команды работали, в ядро нужно добавить модуль IP: TCP syncookie support.

  • Проверяет несколько дюжин проблемных программ и снимает с них SUID бит. Информация об изменениях сохраняется в лог-файл (Рисунок 2.).

  • Выполняет такие же действия для дюжины ссылок на программы, убирая с них SUID и SGID биты.

  • В файле /etc/mail/sendmail.cf добавляет записи O PrivacyOptions=noexpn и O PrivacyOptions=novrfy . Это предотвращает удаленную проверку аккаунтов.

  • Копирует в директорию /etc/cron.daily скрипт, который автоматически удаляет различные временные директории и файлы.

  • Копирует в директорию /root/bin несколько полезных скриптов.

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

Скрипт модифицирует различные сервисы, но не перезапускает их. Чтобы применить настройки из /etc/inetd.conf, используйте команду killall -HUP inetd. Чтобы запустить измененный /etc/inittab, выполните команду init q. Чтобы перезапустить sendmail, используйте /etc/rc.d/rc.sendmail restart или команду kill -HUP `head -1 /var/run/sendmail.pid`.

[Прим.ред. -- А ещё лучше добавить скрипт с именем service (по аналогии с тем, что используется в пакете service в некоторых rpm-based дистрибутивах):
    #!/bin/sh
    /etc/rc.d/rc.$1 $2
    
Или назвать его ещё короче -- srv. Тогда перезапускать можно будет командой: srv sendmail restart Очень удобно, не приходится каждый раз набирать путь /etc/rc.d. Только с правами не напутайте: chmod 700 srv или даже 500.]

Вы можете включить эти команды в скрипт, но это повлечет за собой потенциальный риск, который вы должны иметь ввиду. Если вы совершите маленькую ошибку при вызове программы sed, вместо модификации etc/inittab вы получите пустой файл.Как результат, после перезапуска init вы потеряете доступ к системе, и вам придется вручную восстанавливать /etc/inittab с копии, используя Linux, установленный на другом разделе или диске. Это не всегда приятно, особенно если у вас нет другого раздела с Linux.

файлы большого размера

Рисунок 3. Листинг файлов большого размера. Как вы можете видеть, значительную их часть занимают файлы OpenOffice.org, установленные в директорию /opt, так же как и файлы RealPlayer и Pingus.

Тесты

Скрипт TEST-SECURE.sh ищет в системе файлы следующих типов:

  • Файлы с установленными SUID или SGID битами.

  • Большие и старые файлы (больше 1 МБ, изменявшиеся или использовавшиеся последний раз три месяца назад или раньше).

  • Очень большие файлы (Рисунок 3.).

  • Файлы без привязки к пользователю или группе, существующим в системе.

Информация о каждой категории подобных файлов заносится в лог-файл. Более того, TEST-SECURE.sh использует результаты работы скрипта SECURE.sh, показывая содержимое лог-файла с информацией о программах без SUID или SGID битов.

Так как не всегда надо запускать все эти тесты вместе, в директории /root/bin вы найдете скрипты 1.suid, 2.huge+old, 3.huge и 4.nobody. Каждый из них выполняет только один тест.

И так далее...

Очень правильным ходом будет расширение SECURE.sh другими функциями, отвечающими за установку и настройку дальнейших защитных возможностей. На его основе вы сможете дописать следующие скрипты для настройки других сервисов: конфигурирование аккаунтов пользователей, настройка сети, e-mail и WWW серверов и клиентов, среды X Window, и т.д. Все ограничивается только вашим воображением, потому что Linux позволяет управлять почти всем. И когда вы закончите создание этих скриптов, вы будете способны настраивать всю систему точно в соответствии с вашими нуждами, нажав всего лишь несколько раз клавишу Enter.

Ресурсы

Slack*more:

freshmeat.net/projects/slackmore

SlackPkg:

freshmeat.net/projects/slackpkg

Packware (Польский сайт):

hacking.pl/packware.php

Cezary живет в Польше, в городе Вроцлав. Он редактор польского издания CHIP Special Linux.


Copyright © 2003, Cezary M Kruk. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 91 of Linux Gazette, June 2003

Перевод можно найти по адресу: http://gazette.linux.ru.net/lg91/kruk.html.

[ опубликовано 31/07/2004 ]

Cezary M Kruk. Перевод Андрей Романычев - Установка Slackware и настройка безопасности   Версия для печати