Сборник советов с OpenBSD101.com: различия между версиями

Материал из OpenBSD-Wiki
Перейти к навигации Перейти к поиску
 
Строка 456: Строка 456:
  
 
Выполнение make build занимает около часа на процессоре с частотой 2.6GHz, поэтому будьте терпеливы.
 
Выполнение make build занимает около часа на процессоре с частотой 2.6GHz, поэтому будьте терпеливы.
 +
 +
[[Категория:Howto]]

Текущая версия на 14:59, 26 мая 2013

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

Данная статья 100 % копипаст с www.openbsd101.ru

Введение

Наложения патчей применимы к следующим двум вещам:

  • Программы
  • Ядро операционной системы

В свою очередь процедуру наложения патчей можно разделить на две части:

  1. Применения патча к исходному коду
  2. Перекомпиляция и установка пропатченного ПО

Патчи представляют из себя текстовые файлы, в начале которых обычно находится инструкция того, как наложить патч и переустановить ПО. Новые патчи объявляются в списке рассылки [mailto: security-announce@OpenBSD.org security-announce@OpenBSD.org]. Список патчей также может быть найден на http://www.openbsd.org/errata.html.

Скачивание исходного кода

Прежде чем применять какие-либо патчи как к программам, так и к ядру системы, Вам необходим их исходный код.

Теперь распаковываем исходный код 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

Скачивание патчей

Идём дальше:

Теперь создайте директорию /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 шифрует файл подкачки, для того же, чтобы включить эту функцию для более старых версий, необходимо:

  1. Включить эту функцию без перезагрузки
  2. Изменить конфигурационный файл sysctl, чтобы после перезагрузки системы шифрование файла подкачки было включено

1. От ппользователем root измените значение sysctl переменной:

# sysctl -w vm.swapencrypt.enable=1

2. Измените файл /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. Затем вы можете перекомпилировать ваше ядро, базовую систему и установленные в системе порты. Итак, вам потребуется:

  1. On-line репозиторий
  2. Программа CVSup
  3. Конфигурационные файлы 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, либо соединение с Интернет. Далее необходимо:

  1. Найти каталог порта в дереве портов
  2. Скомпилировать и установить новый порт

1. Находим каталог:

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

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

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

Компиляция и установка ядра

Порядок таков:

  1. Создание резервной копии текущего ядра
  2. Конфигурирование
  3. Компиляция и установка нового ядра

1. Делаем резервную копию ядра:

# cp /bsd /bsd.old

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

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

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

# 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, поэтому будьте терпеливы.