Сборник советов с OpenBSD101.com


Mark Silinio <silinio(at)mail.ru>
--------------------------------------------------------------------------------
Это перевод нескольких разделов советов с сайта OpenBSD101.com, посвящённого операционной системе OpenBSD. Большая часть советов применительна к последней на сегодняшней день версии OpenBSD - 3.9 и вполне пригодится её начинающим пользователям.
--------------------------------------------------------------------------------

Содержание:
Ядро и применение патчей

Введение
Скачивание исходного кода
Скачивание патчей
Наложение патчей на программы
Наложение патчей на ядро
Перекомпиляция ядра после наложения патчей
Загрузка старого ядра
Безопасность

Уровни безопасности
Использование флагов ядра
Флаги ядра для параноиков
Шифрование файла подкачки
Монтирование разделов
использование rm с опцией -P
Увеличение минимальной длины пароля
Обновление с помощью CVSup

Введение
Установка CVSup
Конфигурационные файлы CVSup
Проверка ваших портов(ports)
Обновление портов
Компиляция и установка ядра
Перекомпиляция системы



Ядро и применение патчей
Введение
Наложения патчей применимы к следующим двум вещам:
Программы
Ядро операционной системы
В свою очередь процедуру наложения патчей можно разделить на две части:
Применения патча к исходному коду
Перекомпиляция и установка пропатченного ПО
Патчи представляют из себя текстовые файлы, в начале которых обычно находится инструкция того, как наложить патч и переустановить ПО.
Новые патчи объявляются в списке рассылки security-announce@OpenBSD.org. Список патчей также может быть найден на http://www.openbsd.org/errata.html.
Скачивание исходного кода
Прежде чем применять какие-либо патчи как к программам, так и к ядру системы, Вам необходим их исходный код.
Исходный код core системы OpenBSD 3.9 (99Мб): ftp://ftp.openbsd.org/pub/OpenBSD/3.9/src.tar.gz
Исходный код ядра OpenBSD 3.9 (16Мб): ftp://ftp.openbsd.org/pub/OpenBSD/3.9/sys.tar.gz
Теперь распаковываем исходный код core системы:

# mv src.tar.gz /usr/src
# cd /usr/src
# tar -xvzf src.tar.gz


и исходный код ядра:

# mv sys.tar.gz /usr/src
# cd /usr/src
# tar -xvzf sys.tar.gz


Скачивание патчей
Идём дальше:
Патчи для OpenBSD 3.9: ftp://ftp.openbsd.org/pub/OpenBSD/patches/3.9.tar.gz
Теперь создайте директорию /usr/src/patches, скопируйте туда 3.9.tar.gz и распакуйте:

# mkdir /usr/src/patches
# mv 3.9.tar.gz /usr/src/patches
# cd /usr/src/patches
# tar -xvzf 3.9.tar.gz


Скопируйте все патчи из папок /usr/src/patches/3.9/i386 и /usr/src/patches/3.9/common в /usr/src. Весь процесс применения патчей происходит в папке /usr/src. Каталог i386 обычно не содержит патчей.
Наложение патчей на программы
Для начала мы должны определить, какой тип патчей мы имеем.
Используем команду head, чтобы просмотреть заголовок патча:

# head 001_st.patch

Apply by doing:
cd /usr/src
patch -p0 < 001_st.patch

Rebuild your kernel.

Index: sys/scsi/st.c
=========================
RCS file: /cvs/src/sys/scsi/st.c,v
retrieving revision 1.41


По комментарию Rebuild your kernel определяем, что это патч для ядра.
Далее представлен патч, исправляющий локальную уязвимость в Apache (для OpenBSD 3.6).
Давайте взглянем на заголовок патча:

# head -n 17 009_httpd.patch

Apply by doing:
cd /usr/src
patch -p0 < 009_httpd.patch

And then rebuild and install httpd and its modules:
cd usr.sbin/httpd
make -f Makefile.bsd-wrapper obj
make -f Makefile.bsd-wrapper cleandir
make -f Makefile.bsd-wrapper depend
make -f Makefile.bsd-wrapper
make -f Makefile.bsd-wrapper install

If httpd had been started, you might want to run
apachectl stop
before running "make install", and
apachectl start

afterwards.


В случае следования написанным в начале патча инструкциям у вас не должно возникнуть проблем с его применением и перекомпиляцией программы.
Наложение патчей на ядро
Применение патчей ядра несколько отличается от применения патчей на программы - сначала вы должны наложить все патчи на ядро и после его перекомпилировать.
Посмотрим с помощью head заголовок патча:

# head 001_st.patch

Apply by doing:
cd /usr/src
patch -p0 < 001_st.patch

Rebuild your kernel.

Index: sys/scsi/st.c
=========================
RCS file: /cvs/src/sys/scsi/st.c,v
retrieving revision 1.41


Видим Rebuild your kernel, значит это то, что нам нужно.
Применив последовательно все патчи, переходим к следующему пункту...
Перекомпиляция ядра после наложения патчей
Так, не торопимся и делаем резервную копию текущего ядра:

# cp /bsd /bsd.old


Конфигурируем ядро:

# cd /usr/src/sys/arch/i386/conf/
# config GENERIC
Don't forget to run "make depend"


Теперь компилируем и устанавливаем новое ядро:

# cd /usr/src/sys/arch/i386/compile/GENERIC/
# make clean && make depend && make && make install


Просто перезагрузитесь, чтобы проверить новое ядро.
Загрузка старого ядра
Если у вас возникли проблемы при загрузке с новым ядром, тогда попробуйте загрузиться со старым ядром.
Во время загрузки, когда на экране будет нечто подобное:

Using drive 0, partition 3.
Loading...
probing : pc0 com0 apm mem[634K 319M a20=on]
disk: fd0 hd0+
>> OpenBSD/i386 BOOT 2.06
boot>


наберите название вашего старого ядра:

Using drive 0, partition 3.
Loading...
probing : pc0 com0 apm mem[634K 319M a20=on]
disk: fd0 hd0+
>> OpenBSD/i386 BOOT 2.06
boot> bsd.old





Безопасность
Уровни безопасности
Уровни безопасности позволяют указать ядру требуемую степерь безопасности системы. Всего существует четыре уровня безопасности: -1, 0, 1, 2. Уровень 2 является высшем уровнем безопасности. Уровни безопасности указываются в файле /etc/rc.securelevel.
Вкратце про каждый уровень:
Уровень -1: Дополнительное обеспечение безопасности системы ядром отстутствует, многие обычные возможности. Такие, как права доступа, функционируют. Используйте этот уровень для не-production компьютеров.
Уровень 0: Используется при начальной загрузке OpenBSD. После окончания загрузки система обычно переходит на уровень 1. Какие-либо специфичные вещи в систему этот уровень не добавляет.
Уровень 1: Уровень безопасности по умолчанию в OpenBSD. Операции записи в /dev/mem и /dev/kmem запрещены. Устройства raw-disk доступны только на чтение. Флаги schg и sappnd не могут быть удалены. Модули ядра не могут быть загружены или выгружены "на лету".
Уровень 2: Включает в себя всё из уровня 1, ограничивает изменение системного времени, pfctl не может менять правила PF или NAT, значения sysctl для отладчика ядра DDB не могут быть изменены.

По окончании процесса загрузки системы вы можете узнать текущий уровень безопасности системы набрав в строке:

# sysctl kern.securelevel


Вы можете повысить уровень безопасности командой:

# sysctl -w kern.securelevel=2


И вы не сможете изменить уровень безопасности с более высокого на низкий,- только после перезагрузки.
Использование флагов ядра
Выставление флагов ядра похоже на выставление прав доступа файлам, но лишь с тем различием, что некоторые из них даже пользователь root может поменять лишь определённом(низком) уровне безопасности - или загрузившись в однопользовательском режиме.

Наиболее используемые флаги:
sappnd: Флаг может быть добавлен/удалён только пользователем root. Разрешается добавлять(append) данные в файл, но нельзя удалить или редактировать его. Неплохо использовать для лог-файлов. Этот флаг не может быть удалён при уровне безопасности 1 и выше.
schg: Флаг может быть добавлен/удалён только пользователем root. Файлы с этим флагом не могут быть изменены, перемещены или заменеы. Этот флаг не может быть удалён при уровне безопасности 1 и выше.
uappnd: Флаг может быть добавлен/удалён только пользователем root. Разрешается добавлять(append) данные в файл, но нельзя удалить или редактировать его рядовым пользователям. Пользователь root может модифицировать этот флаг в любое время.

Будьте внимательны при использовании этих флагов,- неумелое использование может привести вашу систему в нерабочее состояние.
Посмотрим, выставлен ли флаг у файла:

#ls -lo /bsd
-rw-r--r-- 1 root wheel schg 5358488 Mar 30 11:47 /bsd


Как мы видим, выставлен флаг schg.
Ниже представлено два популярных примера применения флагов:
Запретим изменение ядра системы:

# chflags schg /bsd


Запретим изменение исполняемых файлов в /bin:

# chflags -R schg /bin


Можно поставить sappnd флаг на history файл пользователя root. Если злоумышленник проникнет в систему, то sappnd не позволит ему скрыть своих действий.
Также выставление флага sappnd на history файл пользователя не позволит злоумышленникам использовать старый трюк с напралением history в устройство /dev/null с помощью мягкой ссылки.
Флаги ядра для параноиков
Вот такие рекомендации для OpenBSD сервера (только после окончательной настройки!):

# chflags schg /bsd
# chflags schg /etc/changelist
# chflags schg /etc/daily
# chflags schg /etc/inetd.conf
# chflags schg /etc/netstart
# chflags schg /etc/pf.conf
# chflags schg /etc/rc
# chflags schg /etc/rc.conf
# chflags schg /etc/rc.local
# chflags schg /etc/rc.securelevel
# chflags schg /etc/rc.shutdown
# chflags schg /etc/security
# chflags schg /etc/mtree/special
# chflags -R schg /bin
# chflags -R schg /sbin
# chflags -R schg /usr/bin
# chflags -R schg /usr/libexec
# chflags -R schg /usr/sbin


Шифрование файла подкачки
Шифрование файла подкачки может предотвратить опасность раскрытия важных данных(таких, как, например, ключи шифрования) локальными пользователями.
По умолчанию OpenBSD 3.9 шифрует файл подкачки, для того же, чтобы включить эту функцию для более старых версий, необходимо:
Включить эту функцию без перезагрузки
Изменить конфигурационный файл sysctl, чтобы после перезагрузки системы шифрование файла подкачки было включено
От ппользователем root измените значение sysctl переменной:

# sysctl -w vm.swapencrypt.enable=1


Измените файл /etc/sysctl.conf с:

#vm.swapencrypt.enable=1


на

vm.swapencrypt.enable=1


и проверьте после перезагрузки, изменилось ли значение sysctl переменной:

sysctl vm.swapencrypt.enable


Монтирование разделов
Правильные параметры монтирования файловых систем способны весьма помочь в плане усиления общей безопасность системы. Файл /etc/fstab контролирует, как будут монтироваться файловые системы на этапе загрузки.
Пара рекомендуемых конфигураций:
Средне-параноидальная конфигурация:

/dev/wd0a / ffs rw 1 1
/dev/wd0h /home ffs rw,nodev,nosuid 1 2
/dev/wd0d /tmp ffs rw,nodev,nosuid,noexec 1 2
/dev/wd0g /usr ffs ro,nodev 1 2
/dev/wd0e /var ffs rw,nodev,nosuid,noexec 1 2


А тут ещё добавляем опцию read-only(ro) на корневой раздел(/) и опцию noexec на раздел /home:

/dev/wd0a / ffs ro 1 1
/dev/wd0h /home ffs rw,nodev,nosuid,noexec 1 2
/dev/wd0d /tmp ffs rw,nodev,nosuid,noexec 1 2
/dev/wd0g /usr ffs ro,nodev 1 2
/dev/wd0e /var ffs rw,nodev,nosuid,noexec 1 2


использование rm с опцией -P
При использовании команды rm с опцией -P содержимое файла перезаписывается 3 раза, прежде чем удалить его. В Linux подобный функционал обеспечивает команда shred.
Использование:

# rm -P filename


Можно также создать псевдоним для команды rm -R в оболочке bash:

# echo "alias rm='rm -P' " >> .bash_profile


Увеличение минимальной длины пароля
По умолчанию минимальная длина пароля в системе OpenBSD равна шести символам.
Чтобы увеличить её до 10-ти символов, добавьте следующую строку под классом default в файле /etc/login.conf:

:minpasswordlen=10:


В отличие от FreeBSD /etc/login.conf не должен быть сконвертирован после в файл БД с помощью cap_mkdb.




Обновление с помощью CVSup
Введение
Программа CVSup позволяет вам скачать и обновить файлы исходных кодов OpenBSD. Затем вы можете перекомпилировать ваше ядро, базовую систему и установленные в системе порты.
Итак, вам потребуется:
On-line репозиторий
Программа CVSup
Конфигурационные файлы CVSup
Установка CVSup
Самый простой способ установки CVSup - это воспользоваться командой pkg_add следующим образом:

# pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/3.9/packages/i386/cvsup-16.1h-no_x11.tgz


Конфигурационные файлы CVSup
Создадим пару конфигурационных файлов для CVSup:
cvsup-file-ports - для скачивания дерева портов
cvsup-file-src - для скачивания исходных текстов системы(в т.ч. ядра)
cvsup-file-port:

# Defaults that apply to all the collections
*default release=cvs
*default delete use-rel-suffix
*default umask=002
*default host=anoncvs3.usa.openbsd.org
*default base=/usr
*default prefix=/usr
*default tag=OPENBSD_3_9

# If your network link is a T1 or faster, comment out the following line.
# *default compress

OpenBSD-ports
#OpenBSD-all
#OpenBSD-src
#OpenBSD-www
#OpenBSD-x11
#OpenBSD-xf4


Вместо anoncvs3.usa.openbsd.org укажите ближайший к Вам сервер.
cvsup-file-src:

# Defaults that apply to all the collections
*default release=cvs
*default delete use-rel-suffix
*default umask=002
*default host=anoncvs3.usa.openbsd.org
*default base=/usr
*default prefix=/usr
*default tag=OPENBSD_3_9

# If your network link is a T1 or faster, comment out the following line.
# *default compress

#OpenBSD-ports
#OpenBSD-all
OpenBSD-src
#OpenBSD-www
#OpenBSD-x11
#OpenBSD-xf4


Не забудьте также заменить anoncvs3.usa.openbsd.org.
Запуск CVSup
Запустим CVSup с использованием этих конфигурационных файлов,-
Обновим дерево портов с cvsup-file-ports:

# cvsup -g -L 2 cvsup-file-ports


...тут вам скачается около 78Мб портов.
Обновим дерево исходных текстов с cvsup-file-src:

# cvsup -g -L 2 cvsup-file-src


...на сей раз вам бухнется 570Мб.
Проверка ваших портов(ports)
После скачивания свежего дерева портов вам может быть необходимо узнать, требуется ли обновление уже установленных в системе портов.
Это делается с помощью скрипта out-of-date, находящемся в каталоге /usr/ports/infrastructure/build.
Так, приведённый ниже вывод работы скрипта указывает на отсутствие необходимости обновления каких-либо портов:

# cd /usr/ports/infrastructure/build/
# ./out-of-date
Collecting installed packages
Collecting port versions: complete
Collecting port signatures: complete
Outdated ports:

#


Противоположный пример:

# cd /usr/ports/infrastructure/build/
# ./out-of-date
Collecting installed packages
Collecting port versions: complete
Collecting port signatures: complete

Outdated ports:

www/mozilla-firefox # 1.5.0.1 -> 1.5.0.3
#


Вывод указывает на необходимость обновления программы Firefox.
Обновление портов
Выше мы искали порты, требующие обновления с помощью специального скрипта, теперь же настала пора их собственно обновить. Вам потребуется наличие исходных файлов программы в папке /usr/ports/distfiles, либо соединение с Интернет. Далее необходимо:
Найти каталог порта в дереве портов
Скомпилировать и установить новый порт
Находим каталог:

# find /usr/ports/ -name mozilla-firefox
/usr/ports/www/mozilla-firefox


Компилируем и устанавливаем:

# cd /usr/ports/www/mozilla-firefox/
# make install


Компиляция и установка ядра
Порядок таков:
Создание резервной копии текущего ядра
Конфигурирование
Компиляция и установка нового ядра
Делаем резервную копию ядра:

# cp /bsd /bsd.old


Конфигурируем ядро:

# cd /usr/src/sys/arch/i386/conf/
# config GENERIC


Компилируем и устанавливаем новое ядро:

# cd /usr/src/sys/arch/i386/compile/GENERIC/
# make depend && make clean && make depend && make && make install


Перезагружаемся, чтобы проверить новое ядро.
Перекомпиляция системы
После загрузки нового ядра можно приступить к обновлению/пересборке системы. Убедитесь, что у Вас существует директория /usr/obj, либо создайте её в случае отсутствия.
Пересоберите систему:

# cd /usr/src
# find . -type l -name obj | xargs rm
# make cleandir
# rm -rf /usr/obj/*
# make obj
# cd /usr/src/etc
# make DESTDIR=/ distrib-dirs
# cd /usr/src
# make build


Выполнение make build занимает около часа на процессоре с частотой 2.6GHz, поэтому будьте терпеливы.

Обновлено: 13.03.2015