OpenBSD FAQ - Управление системой [FAQ - На главную]



Обновления безопасности (Security Updates)

При обнаружении и исправлении критической ошибки, исправление сразу же будет добавлено в дерево -current нашего репозитория (оно так же будет доступно во всех последующих сборках снапошотов). Затем оно будет перенесено в два последних релиза OpenBSD в виде errata, а подробности будут отправлены в почтовую рассылку announce.

Загрузить эти исправления можно разными способами:

Security исправления для сторонних программ, установленных при помощи пакетов, затрагивают лишь последние версии. Тут есть несколько вариантов: Чтобы получать уведомления об обновлениях портов, подпишитесь на рассылку ports-changes

Системные демоны (System Daemons)

Системные демоны (или "сервисы") запускаются, останавливаются и управляются при помощи rc(8) скриптов через rc.d(8).

Большинство демонов и сервисов, которые поставляются вместе с OpenBSD, контролируются во время загрузки системы при помощи переменных, установленных в /etc/rc.conf. В этом файле присутствуют строки подобной этой:

httpd_flags=NO
Мы видим, что httpd(8) не должен запускаться во время загрузки системы при помощи rc(8). В каждой строке есть комментарий, показывающий вам параметры/флаги общего использования этого демона или сервиса.

Не редактируйте файл rc.conf(8). Вместо этого используйте утилиту rcctl(8) для внесение изменений в /etc/rc.conf.local. Это упрощает процесс обновления, так как все изменения находятся в одном файле, который не затрагивается во время обновления.

Например, чтобы запустить демон apmd(8) для CPU scaling, можно сделать:

# rcctl enable apmd
# rcctl set apmd flags -A
# rcctl start apmd

Выполнение команд от имени другого пользователя

doas(1) позволяет системному администратору разрешать определенным пользователям запускать определенные команды от имени другого пользователя. Обычные пользователи могут выполнять административные команды, используя только пароль собственной учетной записи, а не пароль root.

Например, при соответствующей настройке следующая команда покажет содержимое файла crontab(5), принадлежащего пользователю root.

$ doas -u root crontab -l
Команды, запускаемые при помощи doas(1), по умолчанию протоколируются в /var/log/secure. Примеры конфигурации можно найти в руководстве doas.conf(5).

Редактирование файла паролей

Основным файлом паролей OpenBSD является /etc/master.passwd. Он доступен для чтения только пользователю root. Утилита pwd_mkdb(8) генерирует читабельные файлы /etc/passwd и базы паролей (/etc/pwd.db и /etc/spwd.db) из основного файла. Формат описан в passwd(5).

Всегда используйте vipw(8) для редактирования файла паролей. После того, как вы закончите редактирование, он сначала проверит изменения, затем создаст /etc/passwd и базы паролей и, наконец, установит копию вместо исходного файла /etc/master.passwd.

Я забыл свой пароль root

Процесс восстановления пароля включает следующие шаги: загрузку в однопользовательском режиме, монтирование разделов / и /usr, выполнение команды passwd(1) для смены пароля root:

Использование OpenNTPD

OpenNTPD это надежный и простой NTP-совместимый способ иметь точное время в системе. ntpd(8) демон включается по умолчанию во время установки. Во время загрузки ntpd постарается установить дату и время, используемое в системе, в зависимости от данных, которые он получит от NTP-узлов, найденных при помощи constraints по https. Как только часы будут точно настроенны, ntpd будет следить за тем, чтобы они не убежали, используя сервера, указанные в ntpd.conf(5). Во время загрузки, ntpd корректирует настройки часов только в том случае, если они отстали (подгоняет их вперед). Если же ваши часы спешат, т.е. время на них нужно переместить назад, установите часы вручную, используя date(1)..

Для использования OpenNTPD в качестве сервера, добавьте строку listen on * в ваш ntpd.conf(5) файл и перезапустите демон. Можно настроить его и так, чтобы он работал только со специально указанным адресом или интерфейсом.

После того как вы запустите ntpd(8) в качестве сервера, другие машины, возможно, не смогут синхронизировать настройки времени сразу же. Это связано с тем, что информация о времени не будет предоставляться сервером до тех пор, пока не будет достигнут достаточный уровень стабильности. Как только этот уровень будет досигнут, в /var/log/daemon появится сообщение "clock is now synced".

Часовые пояса

OpenBSD предполагает, что ваши аппаратные часы настроены в соответствии с UTC (Universal Coordinated Time), а не по местному времени. Это может причиной проблем при мультизагрузке. Большинство других операционных систем могут быть настроены по тому же принципу, что и OpenBSD, чтобы избежать этой проблемы.

Если использование UTC является причиной проблем, вы всегда можете изменить настройки, в sysctl.conf(5). Например, добавьте следующие строки в /etc/sysctl.conf чтобы сконфигурировать OpenBSD для использования аппаратные часов установленных на US/Eastern (5 часов или 300 минут от UTC):

kern.utc_offset=-300
Ознакомьтесь с параметром "kern.utc_offset" в руководстве sysctl(2).

Обратите внимание, что аппаратные часы (hardware clock) должны работать с вышеуказанной конфигурацией и требуемым смещением перед загрузкой OpenBSD, иначе при загрузке будет неправильно настроено системное время.

Обычно часовой пояс настраивается во время установки. Если вам нужно изменить часовой пояс, вы можете создать новый symbolic link на подходящий файл часового пояса в /usr/share/zoneinfo. Например, чтобы настроить машину для использования EST5EDT в качестве нового локального часового пояса:

# ln -fs /usr/share/zoneinfo/EST5EDT /etc/localtime
Смотрите также руководство по date(1).

Набор символов (character sets) и локализация

Базовая система OpenBSD полностью поддерживает набор символов и кодировку ASCII, а таже частично кодировку UTF-8 набора символов Unicode. Никакие другие кодировки или наборы символов не поддерживаются базовой системой, но порты могут использоваться для их обработки. Уровень поддержки UTF-8 и конфигурация кодировки по умолчанию сильно различаются в зависимости от используемой программы или библиотеки.

Чтобы использовать UTF-8 везде, где это поддерживается, установите значение en_US.UTF-8 для переменной среды LC_CTYPE:

При подключении к удаленным системам через ssh(1) значение переменной LC_CTYPE не будет переданно, поэтому перед подключением убедитесь, что на локальном терминале установлена кодировка символов, используемая на удаленном сервере. Если эта кодировка неизвестна или не поддерживается OpenBSD, убедитесь, что вы используете дефолтную конфигурацию xterm(1), а после подключения настройте консоль (remote shell) при помощи LC_CTYPE=en_US.UTF-8.

Базовая система OpenBSD полностью игнорирует все переменные окружения, связанные с локалью, кроме LC_CTYPE. Даже LC_ALL и LANG влияют только на кодировку символов. Некоторые порты могут учитывать другие LC_* переменные, но использовать их или устанавливать для LC_CTYPE любое другое значение, отличное от C, POSIX или en_US.UTF-8, не рекомендуется.

Symmetric Multithreading, или "почему не все мои процессоры используются?"

Некоторые процессоры используют симметричную многопоточность (SMT; реализация Intel известна как «Hyper-Threading»). В этом случае один физический процессор представляет для ОС дополнительный логический процессор, который отображается как отдельный процессор в dmesg(8) и таких программах, как top(1). Они не имеют полных ресурсов процессора, но позволяют нескольким параллельнм процессам совместно использовать ресурсы одного и то же ядра CPU.

Эта функция может повысить производительность для некоторых рабочих нагрузок, но снизить её для других.

Технология SMT была использована и задействована в нескольких уязвимостях процессоров, в частности, связанных со спекулятивным выполнением. Это приводило к тому, что процессы могут видеть и изучать информацию о из адресного пространства других процессов, к которым у них не должно быть доступа. Чтобы избежать этой проблемы, OpenBSD по умолчанию отключает выполнение кода на обнаруженных «виртуальных» ядрах SMT.

Это можно изменить, т.е. снова включить, установив для sysctl hw.smd значение 1. Однако обычно делать это не рекомендуется.

Использование S/Key

S/Key представляет из себя систему аутентификации по принципу "одноразового пароля". Он генерирует последовательность одноразовых паролей из passphrase (секретной парольной фразы) пользователя вместе с challenge, полученным от сервера, при помощи хэш-функции: md5, sha1 or rmd160.
ВНИМАНИЕ: Системы с одноразовыми паролями защищают только информацию процесса аутентификации. Они не мешают сетевым хулиганам получать доступ к личной информации. Кроме того, если вы обращаетесь к защищенной системе A, рекомендуется сделать это из другой доверенной системы B, чтобы никто не получал доступ к системе A путем регистрации нажатий клавиш или захвата и/или подделки ввода и вывода на вашем терминале.

Настройка S/Key

Для начала каталог /etc/skey должен существовать. Если этот каталог не существует, попросите суперпользователя создать его:
# skeyinit -E
Затем используйте skeyinit(1) для инициализации вашего S/Key. Сначала вам будет предложено ввести пароль, затем вы должны будете ввести passphrase (секретную парольную фразу) S/Key длиной не менее 10 символов:
$ skeyinit
Password:
[Adding ericj with md5]
Enter new secret passphrase:
Again secret passphrase:

ID ericj skey is otp-md5 100 oshi45820
Next login password: HAUL BUS JAKE DING HOT HOG
Обратите внимание на информацию в последних двух строках. Программа, использованная для создания вашего S/Key пароля, - otp-md5(1), порядковый номер (sequence number) - 100, а секретный ключ - oshi45820. Шесть коротких слов HAUL BUS JAKE DING HOT HOG составляют S/Key пароль с порядковым номером 100.

Генерация S/Key паролей

Чтобы сгенерировать S/Key пароль для следующего входа в систему, используйте skeyinfo(1), чтобы узнать, какую команду и параметры нужно для этого использовать:
$ skeyinfo -v
otp-md5 95 oshi45820
$ otp-md5 95 oshi45820
Enter secret passphrase:
NOOK CHUB HOYT SAC DOLE FUME
Если же надо сгенерировать несколько S/Key паролей:
$ otp-md5 -n 5 95 oshi45820
Enter secret passphrase:
91: SHIM SET LEST HANS SMUG BOOT
92: SUE ARTY YAW SEED KURD BAND
93: JOEY SOOT PHI KYLE CURT REEK
94: WIRE BOGY MESS JUDE RUNT ADD
95: NOOK CHUB HOYT SAC DOLE FUME

Использование S/Key для входа в систему

Пример сеанса с FTP сервером localhost, где используется S/Key. Для входа в систему при помощи S/Key вы должны добавить :skey к вашему имени:
$ ftp localhost
Connected to localhost.
220 oshibana.shin.ms FTP server (Version 6.5/OpenBSD) ready.
Name (localhost:ericj): ericj:skey
331- otp-md5 93 oshi45820
331 S/Key Password: JOEY SOOT PHI KYLE CURT REEK
[...]
230 User ericj logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quit
221 Goodbye.
Это же относится и к ssh(1):
$ ssh -l ericj:skey localhost
otp-md5 91 oshi45821
S/Key Password: SHIM SET LEST HANS SMUG BOOT
Last login: Thu Apr  7 12:21:48 on ttyp1 from 156.63.248.77
$

Служба каталогов (Directory Services)

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

Конечно, вы можете использовать различные службы каталогов в OpenBSD. Но YP - единственный, к которому можно напрямую обратиться, используя стандартные функции C-библиотеки, такие как getpwent(3), getgrent(3), gethostbyname(3) и так далее. Таким образом, если вы храните свои данные в базе данных YP, вам не нужно копировать их в локальные файлы конфигурации, такие как master.passwd(5), прежде чем вы сможете использовать их, например, для аутентификации пользователей в системе.

YP - это служба каталогов, совместимая с Sun Microsystems NIS (Network Information System). Загляните в yp(8) для обзора доступных справочных страниц. Будьте осторожны, некоторые операционные системы содержат службы каталогов, имеющие одинаковые имена, но, тем не менее, несовместимые, например NIS+.

Чтобы использовать службы каталогов, отличные от YP, вам нужно либо заполнить локальные файлы конфигурации из данными из каталога, либо использовать внешний интерфейс YP для каталога. Например, вы можете использовать порт sysutils/login_ldap при выборе первого, тогда как демон ypldap(8) в свою очередь предоставит второе.

Для некоторых приложений простую синхронизацию небольшого числа файлов конфигурации между группой машин можно реализовать при помощи таких инструментов, как rdist(1), cron(8), scp(1) или rsync (доступен из портов). Этот список представляет собой простую и надежную альтернативу directory services.

Вопросы безопасности YP

По соображениям совместимости все функции безопасности, встроенные в реализацию YP OpenBSD, по умолчанию отключены. Даже когда все они включены, протокол NIS по-прежнему небезопасен по двум причинам: все данные, включая конфиденциальные, такие как хеши паролей, передаются незашифрованными по сети, и ни клиент, ни сервер не могут надежно проверить идентичность друг друга.

Таким образом, перед настройкой любого YP-сервера вы должны подумать, приемлемы ли эти недостатки безопасности в вашем конкретном случае. В частности, YP не подходит, если потенциальные злоумышленники имеют физический доступ к вашей сети. Любой, кто получает root-доступ к любому компьютеру, подключенному к сегментам вашей сети, по которым передается трафик YP, может подключиться к вашему домену YP и получить его данные. В некоторых случаях можно использовать SSL- и IPsec-туннели для трафика YP.

Настройка YP сервера

Сервер YP обслуживает группу клиентов, называемых «доменом». Вы должны сначала выбрать доменное имя; это может быть произвольная строка, которая не должна быть каким-либо образом связана с доменными именами DNS. Выбор случайного имени, такого как «Eepoo5vi», может немного улучшить безопасность, хотя эффект в основном заключается в безопасности по незаметности. В случае, если вам нужно поддерживать несколько отдельных доменов YP, вероятно, лучше выбрать описательные имена, такие как «sales», «marketing» или «research», чтобы предотвратить ошибки системного администрирования, вызванные неясностью. Также обратите внимание, что в некоторых версиях SunOS требуется использовать доменное имя DNS хоста, поэтому ваш выбор может быть ограничен.

Используйте утилиту domainname(1), чтобы установить имя домена, и поместите его в файл defaultdomain(5), чтобы он автоматически использовался во время запуска системы.

# echo "puffynet" > /etc/defaultdomain
# domainname `cat /etc/defaultdomain`
Вот так можно инициализировать YP сервер в интерактивном режиме:
# ypinit -m
На этом этапе нет необходимости указывать slave-серверы. Чтобы добавить slave-серверы, вы можете перезапустить ypinit(8) позже, используя опцию -u. Настройка хотя бы одного slave-сервера для каждого домена имеет смысл, чтобы избежать прерываний обслуживания. Например, если главный сервер когда-нибудь выйдет из строя или потеряет сетевое соединение, клиентские процессы, пытающиеся получить доступ к YP maps, блокируются, пока они не получат запрашиваемую информацию. Таким образом, прерывания службы YP обычно делают клиентские хосты полностью непригодными, пока проблемы с YP не будут устранены.

Решите, где хранить файлы для создания ваших YP maps. Хранение конфигурации сервера отдельно от обслуживаемой конфигурации (served configuration) помогает контролировать, какая информация будет обслуживаться, а какая нет, поэтому использование по умолчанию /etc часто является не лучшим выбором.

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

Чтобы определить исходный каталог, отредактируйте файл /var/yp/`domainname`/Makefile и измените переменную DIR, например:

DIR=/etc/yp/src/puffynet
Описание других параметров для файла /var/yp/`domainname`/Makefile можно найти в Makefile.yp(8).

Например, даже если вы используете дефолтный каталог /etc, вам, как правило, не нужны все учетные записи и группы, существующие на сервере для всех ваших клиентских машин. В частности, отсутствие защиты учетной записи root и, следовательно, сохранение конфиденциальности хэша пароля root, рекомендуется с целью безопасности. Просмотрите значения MINUID, MAXUID, MINGID и MAXGID и настройте их в соответствии с вашими потребностями/планами.

Если все ваши YP-клиенты используют OpenBSD или FreeBSD, исключите (exclude) зашифрованные пароли из passwd maps, установив UNSECURE="" в /var/yp/`domainname`/Makefile.

Прежняя практика редактирования файла шаблона /var/yp/Makefile.yp больше не рекомендуется. Изменения в этом файле влияют на все домены, инициализированные после изменения, но не влияют на домены, инициализированные до изменения, так что в любом случае это черевато ошибками: во-первых, предполагаемые изменения не вступают в силу, а во-вторых, вы рискуете забыть о них и их влиянии на другие домены, для которых они никогда и не предназначались.

Создайте source directory и заполните его необходимыми файлами конфигурации. См. Makefile.yp(8), чтобы узнать, какие YP maps требуют какие файлы. Для формата отдельных файлов конфигурации, ознакомьтесь с passwd(5), group(5), hosts(5) и так далее, а также ознакомьтесь с примерами в /etc.

Создайте initial version своих YP maps при помощи команд

# cd /var/yp
# make
Не переживайте сейчас по поводу сообщений об ошибках от yppush(8). YP-cервер еще не запущен.

Для связи с клиентами YP использует rpc(3) (remote procedure calls, удаленные вызовы процедур), поэтому необходимо включить portmap(8). Используйте для этого rcctl(8).

# rcctl enable portmap
# rcctl start portmap
Не забывайте об использовании таких функций безопасности YP сервера как securenet(5) или ypserv.acl(5) Но имейте в виду, что оба они обеспечивают только контроль доступа на основе IP. Таким образом, они помогают только до тех пор, пока потенциальные злоумышленники не имеют ни физического доступа к оборудованию сегментов сети, передающих ваш YP-трафик, ни доступа к любому из хостов, подключенных к этим сегментам сети.

Наконец, запустите YP-сервер:

# rcctl enable ypserv
# rcctl start ypserv
Чтобы протестировать ваш только что запущенный сервер, подумайте о том, чтобы сделать его собственным клиентом, следуя инструкциям в первой части следующего раздела. Если вы не хотите, чтобы сервер использовал свои собственные maps, вы можете отключить клиентскую часть после теста при помощи следующих команд:
# rcctl stop ypbind
# rcctl disable ypbind
Помните, что каждый раз, когда вы изменяете файл, созданный YP map, вы должны заново сгеренировать свои YP maps.
# cd /var/yp
# make
Это обновит все файлы базы данных в /var/yp/`domainname`. Исключением тут является файл ypservers.db, в котором перечислены все ведущие и подчиненные сервера YP, связанные с доменом. Он создается непосредственно при помощи ypinit -m, а изменяется при помощи ypinit -u. Если вы случайно удалили его, при помощи ypinit -u вы можете сгенерировать его снова (воссоздать с нуля).

Настройка YP клиента

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

Как и на сервере, вы должны установить доменное имя и включить portmapper:

# echo "puffynet" > /etc/defaultdomain
# domainname `cat /etc/defaultdomain`
# rcctl enable portmap
# rcctl start portmap
Рекомендуется добавить список YP-серверов в конфиг /etc/yp/`domainname`. В противном случае, демон YP-клиента будет использовать широковещательные рассылки для поиска YP-серверов своего домена. Явное указание серверов более надежно и менее уязвимо для атак. Если вы не настроили никаких slave-серверов, просто поместите имя хоста главного сервера в /etc/yp/`domainname`.

Добавьте в автозагрузку (enable) и запустите демон YP-клиента, ypbind(8).

# rcctl enable ypbind
# rcctl start ypbind
Если всё прошло без ошибок, вы сможете отправлять запросы YP-серверу при помощи ypcat(1) и получать назад passwd map.
# ypcat passwd
bob:*:5001:5000:Bob Nuggets:/home/bob:/usr/local/bin/zsh
...
Еще один полезный инструмент для отладки настройки вашего YP - ypmatch(1).

Вторая часть настройки YP-клиента подразумевает редактирование локальных файлов конфигурации таким образом, чтобы определенные YP maps использовались различными системными средствами. Не все серверы обслуживают все стандартные maps, поддерживаемые операционной системой, некоторые серверы обслуживают дополнительные нестандартные maps, и вы ни в коем случае не обязаны использовать из все. Какая из доступных maps должна или не должна использоваться, и для каких целей, полностью на усмотрение системного администратора хоста-клиента.

Список стандартных YP maps и их стандартное назначение смотрите в Makefile.yp(8).

Если вы хотите включить все учетные записи пользователей из YP-домена, добавьте YP-маркер по умолчанию в master password file и пересоберите базу паролей:

# echo '+:*::::::::' >> /etc/master.passwd
# pwd_mkdb -p /etc/master.passwd
Подробную информацию о выборочном включении и исключении учетных записей пользователей можно найти в passwd(5). Чтобы проверить, действительно ли работает включение, используйте утилиту id(1).

Если вы хотите включить все группы из YP-домена, добавьте дефолтный YP-маркер в group файл:

# echo '+:*::' >> /etc/group
Подробнее о добавлении пользователей в ту или иную группу сказано в group(5).