Денис Назаров
Проект берет свое начало из системы NetBSD, когда один из
четырех главных разработчиков проекта Theo de Raadt (Тео де Радт) решил создать
свою собственную реализацию UNIX-подобной системы, делая максимальный упор на
безопасность. OpenBSD унаследовала из NetBSD в основном только
мультиплатформенность. Остальное же было написано с нуля или кардинально
переделано. Вся переписка, предшествующая появлению OpenBSD, находится тут: http://zeus.theos.com/deraadt/coremail.html.
Код системы полностью открыт и каждый желающий может помочь с разработкой
системы. В процессе работы над OpenBSD был проделан огромный труд. Разработчики
затратили много времени, выявляя и устраняя слабые места в системе защиты
OpenBSD.
n Одна удаленная уязвимость в системе за 7 лет
при инсталляции «по умолчанию».
n В системе широко используется кодирование
данных.
n В состав системы входит KerberosIV, KerberosV.
n Большинство идентификаторов (таких, например,
как PID) генерируется по случайному закону.
n Полностью контролируется использование каталога
/tmp.
n Полностью контролируется работа с буферами
данных, в частности отслеживается момент их переполнения.
n Устранены недостатки работы с протоколами при
копировании файлов, маршрутизации, использовании зарезервированных портов и
прочее.
n Система активно противодействует незаконным
попыткам сбора информации (OS fingerprinting).
n Используется новый системный вызов mkstemp (и
прочее), улучшающий обработку каталога /tmp.
n IP-фильтры являются стандартными компонентами
ядра.
n В ядро включены средства кодирования IP
Photuris.
n Модифицированы средства обработки сигналов,
затрагивающих ядро.
n Устранены нарушения защиты в strcpy и других
системных вызовах.
n Присутствует контроль за переполнением
переменных окружения.
n В Kerberos устранены ошибки, связанные с
переполнением буферов.
n В libc включены средства кодирования.
n В системе используются гибкие механизмы
кодирования паролей (Blowfish и прочее).
n В стандартные утилиты встроена поддержка S/Key.
n Выбор портов для прикладных программ
осуществляется по случайному закону.
n В систему входит мощнейший пакетный фильтр PF
(OpenBSD’s Packet Filter).
n Контроль за всеми обращениями к ядру приложений
при помощи systrace.
n В компилятор (GCC), начиная с версии 3.3,
встроена защита propolicy.
n Большинство стандартных сервисов,
предоставляемых системой, запускаются в изолированном пространстве (chroot).
Это лишь малая часть всех тех
прелестей, которыми обладает OpenBSD. Разработчики предоставляют вам
возможность иметь 3 вида реализации OpenBSD:
n RELEASE – релиз, система, которую вы получаете,
устанавливая OpenBSD с официальных CD-ROM или других источников.
n STABLE – система, на которую наложены все
необходимые исправления и выполнены все рекомендации по настройке.
n CURRENT – текущая, сырая система. В нее
постоянно вносятся исправления, улучшения, добавляется новое ПО и прочее. Из
этой версии в итоге вытекает новая система RELEASE.
На одном из серверов, которые я контролирую, была
установлена OpenBSD CURRENT версии 3.0 и она успешно обновляется и по сей день.
Использование ветки STABLE предпочтительней на production-серверах, где важна
стабильность и надежность. Однако по собственному опыту могу сказать, что CURRENT
ничуть не хуже STABLE, а порой даже лучше, удерживает лишь мысль «вдруг на
CURRENT что-то перестанет работать?»
После установки системы можно сразу заметить
«чистоту» системы. Большинство сервисов отключено (но установлено!),
конфигурационные файлы дают понять, что система уже довольно жестко настроена.
Отличный ход OpenBSD team – это страница мануала afterboot (man afterboot), на
которой очень хорошо описано, что нужно сделать сразу после установки системы,
чтобы привести ее в идеальное состояние.
Система очень компактна, после установки она
заняла у меня всего 210 Mб без системы X Windows. При этом вы получаете
полноценную систему с компилятором, которая готова служить вам верой и правдой
с этой же минуты.
Очевидные для меня минусы
системы:
n Отсутствие поддержки SMP (symmetric
multiprocessor), но в данный момент уже есть проект, который разрабатывает
поддержку SMP для i386 и Sparc.
n Отсутствие поддержки некоторых RAID-массивов.
n Отсутствие поддержки некоторых сетевых карт
(хотя эта проблема решилась портированием драйвера из FreeBSD).
OpenBSD часто используется на границах сети как
межсетевой экран (firewall) и/или роутер (router). Система обладает мощнейшим
пакетным фильтром и интегрированным контролем полосы пропускания. Использование
OpenBSD также обусловлено низким приростом удаленных уязвимостей, делая ее
надежным, дешевым и гибким решением.
Инсталляция системы
Хорошо, приступим к инсталляции данной прелести на наш
подопытный сервер. Сразу оговорюсь про железо. P4 1,75 ГГц / 1 Гб RAM / 80 Гб
HDD / Intel-Ethernet Express Pro 100 Мб/с. Да, железо неслабое, но ставлю на
то, что есть. По поводу работы OpenBSD на более «плохом» железе можно смело
ответить «Да!». У меня в руках 3 диска:
n Базовый инсталляционный диск.
n Набор заранее скомпилированного ПО для системы
(Packages).
n Дополнительное ПО для других платформ (Sparc,
Alpha…).
Ставить систему, конечно, можно и
не с CD-ROM, но это наиболее удобный способ, по моему мнению. Прежде всего,
перед началом инсталляции вы должны четко знать:
n Имя будущей машины (hostname).
n Совместимость всего hardware с системой.
n Метод установки (CD-ROM, FTP…).
n Разметку диска.
n Сетевые настройки, если вы не собираетесь
использовать DHCP. Имя домена (domain name), сервера имен (DNS servers),
IP-адрес, сетевую маску для ваших сетевых карт и шлюз (gateway).
n Собираетесь ли вы использовать систему
X-Windows.
Отлично, включаем в BIOS загрузку с CD-ROM,
вставляем первый диск и перегружаемся. Дальше вы видите нечто вроде:
rootdev=0x1100
rrootdev=0x2f00 rawdev=0x2f02
erase ^?, werase
^W, kill ^U, intr ^C, status ^T
(I)nstall,
(U)pgrade or (S)hell? I
Что это значит:
n Install – полная установка системы с записью
всех файлов и каталогов, созданием новой разметки диска (хотя если диск
размечен уже был, можно оставить как есть) и выполнению всех процедур
установки.
n Upgrade – установка только «install files», без
внесения каких-либо изменений в конфигурацию системы, данных или же разметки
диска.
n Shell – иногда требуется внести изменения в
текущую систему с использованием другого ядра, данная опция как раз позволяет
делать это.
Смело выбираем «I» и идем дальше. Видим
следующее:
Welcome
to the OpenBSD/i386 3.3 install program.
This program will
help you install OpenBSD in a simple and rational way. At any prompt except
password prompts you can run
a shell command
by typing '!foo', or escape to a shell by typing '!'. Default answers are shown
in []'s and are selected by pressing
RETURN. At any
time you can exit this program by pressing Control-C and then RETURN, but
quitting during an install can leave
your system in an
inconsistent state.
Specify terminal
type: [vt220]
Do you wish to
select a keyboard encoding table? [n] y
Информация для ознакомления с процедурами ввода
данных при инсталляции, в принципе ничего сложного.
Идем дальше. Предупреждение о возможной потери
всех данных.
IS YOUR DATA
BACKED UP? As with anything that modifies disk contents, this
program can cause SIGNIFICANT data loss.
It is
often helpful to have the installation notes handy. For complex disk
configurations, relevant disk hardware manuals and
a calculator are
useful.
Proceed with
install? [n] y
Вот тут уже и начинается самое интересное –
разбиение диска:
Cool!Let's
get to it...
You will now
initialize the disk(s) that OpenBSD will use. To enable all available security
features you should configure the disk(s)
to allow the
creation of separate filesystems for /, /tmp, /var, /usr, and /home.
Available disks
are: wd0.
Which one is the
root disk? (or done) [wd0] Enter
Однако хочу предупредить, понятие partition тут
двояко. Partition может рассматриваться как общий кусок диска для OpenBSD, если
на компьютере установлено больше одной ОС, иначе же partition будет
рассматриваться как filesystem. Не морочьте себе голову, после первого общения
с fdisk OpenBSD вы разберетесь в этом раз и навсегда.
Do you want to
use *all* of wd0 for OpenBSD? [no] Enter
Система спрашивает, будем ли мы использовать весь
диск для нее или же выделим ей отдельный partition.
You will now
create a single MBR partition to contain your OpenBSD data. This
partition must have an id of 'A6'; must *NOT*
overlap other
partitions; and must be marked as the only active partition.
The 'manual' command
describes all the fdisk commands in detail.
Disk: wd0
geometry: 2586/240/63 [39100320 Sectors]
Offset: 0
Signature: 0xAA55
Starting Ending
LBA Info:
#: idC HS -C HS [
start:size ]
------------------------------------------------------------------------
*0: 060 11 -202
239 63 [63: 3069297 ] DOS > 32MB
1: 000 00 -0 00 [
0: 0 ] unused
2: 000 00 -0 00 [
0: 0 ] unused
3: 000 00 -0 00 [
0: 0 ] unused
Enter 'help' for
information
fdisk: 1> help
helpCommand help
list
manualShow entire
OpenBSD man page for fdisk
reinitRe-initialize
loaded MBR (to defaults)
setpidSet the
identifier of a given table entry
diskEdit current
drive stats
editEdit given
table entry
flagFlag given
table entry as bootable
updateUpdate
machine code in loaded MBR
selectSelect
extended partition table entry MBR
print Print
loaded MBR partition table
write Write
loaded MBR to disk
exitExit edit of
current MBR, without saving changes
quitQuit edit of
current MBR, saving current changes
abort Abort
program without saving current changes
fdisk: 1>Abort
program without saving current changes
fdisk: 1>
Вот он! Тот самый fdisk, который
кажется всем страшным и пугает. Но на самом деле это довольно безобидная и
очень гибкая (в умелых руках) утилита. Расскажу о ней подробнее. Команды можно
сокращать, например, так:
n r или reinit: очищает весь диск и создает одну
большую partition для OpenBSD. Равносильно ответу «yes» в вопросе «use *all* of
...».
n p или print: выводит информацию о текущем
разделе в секторах. «p m» покажет информацию в мегабайтах, «p g»,
соответственно, в гигабайтах.
n e или edit: редактировать запись в таблице.
n f или flag: помечает раздел как загрузочный и
разрешает грузиться с него.
n exit и quit: внимание, команды «exit» and
«quit» имеют разные значения. Команда exit заставляет fdisk завершиться
«фатально», т.е изменения не будут внесены, в то время как комадна quit
подразумевает успешное завершение программы, запись всех изменений на диск,
однако перед quit все-таки еще стоит использовать команду write для большей
надежности.
Прежде чем начинать работать с fdisk, сохраните
все важные данные. Хорошо, начинаем:
> p m
device:
/dev/rwd0c
type: ESDI
disk: ESDI/IDE
disk
label: ST320011A
bytes/sector: 512
sectors/track: 63
tracks/cylinder:
16
sectors/cylinder:
1008
cylinders: 16383
total sectors:
39102336
free sectors:
36030960
rpm: 3600
16 partitions:
#size
offsetfstype [fsize bsize cpg]
a:
17593.2M1498.7Munused0 0
c: 19092.9M
0.0Munused0 0
i:1498.7M 0.0M
MSDOS
> d a
> a a
offset: [3069360]
Enter
size: [36030960]
150M
Rounding to nearest
cylinder: 307440
FS type: [4.2BSD]
Enter
mount point:
[none] /
> a b
offset: [3376800]
Enter
size: [35723520]
300M
Rounding to
nearest cylinder: 614880
FS type: [swap]
Enter
> a d
offset: [3991680]
Enter
size: [35108640]
120m
Rounding to
nearest cylinder: 245952
FS type: [4.2BSD]
Enter
mount point:
[none] /tmp
> a e
offset: [4237632]
Enter
size: [34862688]
80m
Rounding to
nearest cylinder: 164304
FS type: [4.2BSD]
Enter
mount point:
[none] /var
> a g
offset: [4401936]
Enter
size: [34698384]
2g
Rounding to
nearest cylinder: 4194288
FS type: [4.2BSD]
Enter
mount point:
[none] /usr
> a h
offset: [8596224]
Enter
size: [30504096]
4g
Rounding to
nearest cylinder: 8388576
FS type: [4.2BSD]
Enter
mount point:
[none] /home
> p m
device:
/dev/rwd0c
type: ESDI
disk: ESDI/IDE
disk
label: ST320011A
bytes/sector: 512
sectors/track: 63
tracks/cylinder:
16
sectors/cylinder:
1008
cylinders: 16383
total sectors:
39102336
free sectors:
22115520
rpm: 3600
16 partitions:
#size
offsetfstype [fsize bsize cpg]
a: 150.1M1498.7M4.2BSD
1024819216# /
b:
300.2M1648.8Mswap
c: 19092.9M
0.0Munused0 0
d:
120.1M1949.1M4.2BSD 1024819216# /tmp
e:80.2M2069.2M4.2BSD
1024819216# /var
g:2048.0M2149.4M4.2BSD
1024819216# /usr
h:4096.0M4197.4M4.2BSD
1024819216# /home
i:1498.7M 0.0M
MSDOS
> q
Write new label?:
[y] Enter
Типичная сессия работы с fdisk.
Теперь по строчкам:
n p m – просматриваем информацию о разделах в
мегабайтах;
n d a – удаляем раздел «a», т.к. он пустой и
ничем не занят;
n a a – теперь вновь добавляем его, но уже со
своими параметрами для него:
n offset: [3069360] Enter – offset-смещение
относительно секторов;
n size: [36030960] 150M – размер раздела в
мегабайтах Rounding to nearest cylinder: 307440 – ближайший цилиндр оставляем
как есть;
n FS type: [4.2BSD] Enter – тип файловой системы;
n mount point: [none] / – точка монтирования.
Следующий раздел (a b) по умолчанию принимается
системой как SWAP, поэтому нужно сделать необходимые изменения в размере
раздела. Продолжая процесс, добавляем все необходимые нам разделы и записываем
информацию командами w и q (write, quit).
Дальше начинается процесс непосредственного
форматирования разделов:
The
root filesystem will be mounted on wd0a.
wd0b will be used
for swap space.
Mount point for
wd0d (size=122976k), none or done? [/tmp] Enter
Mount point for
wd0e (size=82152k), none or done? [/var] Enter
Mount point for
wd0g (size=2097144k), none or done? [/usr] Enter
Mount point for
wd0h (size=4194288k), none or done? [/home] Enter
Mount point for
wd0d (size=122976k), none or done? [/tmp] done
Done - no
available disks found.
You have
configured the following partitions and mount points:
wd0a /
wd0d /tmp
wd0e /var
wd0g /usr
wd0h /home
The next step
creates a filesystem on each partition, ERASING existing data.
Are you really
sure that you're ready to proceed? [n] y
/dev/rwd0a:
307440 sectors in 305 cylinders of 16 tracks, 63 sectors 150.1MB in 20 cyl
groups (16 c/g, 7.88MB/g, 1920 i/g)
/dev/rwd0d:
245952 sectors in 244 cylinders of 16 tracks, 63 sectors 120.1MB in 16 cyl
groups (16 c/g, 7.88MB/g, 1920 i/g)
/dev/rwd0e:
164304 sectors in 163 cylinders of 16 tracks, 63 sectors 80.2MB in 11 cyl
groups (16 c/g, 7.88MB/g, 1920 i/g)
/dev/rwd0g:
4194288 sectors in 4161 cylinders of 16 tracks, 63 sectors 2048.0MB in 261 cyl
groups (16 c/g, 7.88MB/g, 1920 i/g)
/dev/rwd0h:
8388576 sectors in 8322 cylinders of 16 tracks, 63 sectors 4096.0MB in 521 cyl
groups (16 c/g, 7.88MB/g, 1920 i/g)
/dev/wd0a on /mnt
type ffs (rw, asynchronous, local, ctime=Thu Oct 10 21:50:36 2 002)
/dev/wd0h on
/mnt/home type ffs (rw, asynchronous, local, nodev, nosuid, ctime=Thu Oct 10
21:50:36 2002)
/dev/wd0d on
/mnt/tmp type ffs (rw, asynchronous, local, nodev, nosuid, ctime=Thu Oct 10
21:50:36 2002)
/dev/wd0g on
/mnt/usr type ffs (rw, asynchronous, local, nodev, ctime=Thu Oct 10 21:50:36
2002)
/dev/wd0e
on /mnt/var type ffs (rw, asynchronous, local, nodev, nosuid, ctime=Th u Oct 10
21:50:36 2002)
После создания разделов начинается этап
переконфигурирования системы.
Нас спрашивают, как будет называться машина:
Enter
system hostname (short form, e.g. 'foo'): mybox
Эта информация будет сохранена в файле
/etc/myname и в дальнейшем может быть легко изменена.
Вот мы уже и на пороге кофигурации сети.
Configure the
network? [y] Enter
Available
interfaces are: fxp0.
Which one do you
wish to initialize? (or 'done') [fxp0] Enter
Symbolic (host)
name for fxp0? [puffy] Enter
The default media
for fxp0 is media: Ethernet autoselect (100baseTX full-duplex)
Do you want to
change the default media? [n] Enter
IP address for
fxp0? (or 'dhcp') 199.185.137.55
Netmask?
[255.255.255.0] Enter
Done - no
available interfaces found.
DNS domain name?
(e.g. 'bar.com') [my.domain] example.com
DNS nameserver?
(IP address or 'none') [none] 199.185.137.1
Use the
nameserver now? [y] Enter
Default route?
(IP address, 'dhcp' or 'none') 199.185.137.128
add net default:
gateway 199.185.137.128
Edit hosts with
ed? [n] Enter
Do you want to do
any manual network configuration? [n] Enter
Система сама определяет сетевой интерфейс (если
таковой имеется) и предлагает настроить его путем введения IP-адреса, маски
сети, DNS-серверов и шлюза.
Отлично, мы добрались до установки пароля суперпользователя.
Password for root
account? (will not echo) mYpAszW0rd
Password for root
account? (again) mYpAszW0rd
Думаю, рассказывать, как важен пароль
суперпользователя и каким он должен быть, мне нет смысла, т.к. имеется очень
много документов, описывающих способы выбора правильного пароля.
Выбор метода инсталляции:
You will now
specify the location and names of the install sets you want to load. You
will be able to repeat this step until all of your
Sets have
been successfully loaded. If you are not sure what sets to install, refer to
the installation notes for details on the contents
of each.
Sets can be
located on a (m)ounted filesystem; a (c)drom, (d)isk or (t)ape device; or a
(f)tp, (n)fs or (h)ttp server.
Where are the
install sets? c
Available CD-ROMs
are: cd0.
Выбираем
установку с CD-ROM путем ввода «c». Дальше система спрашивает, где находятся
необходимые файлы.
Which one
contains the install media? (or 'done') [cd0] Enter
Pathname
to the sets?(or 'done') [3.3/i386] Enter
Переходим к выбору компонентов системы:
The following
sets are available. Enter a filename, 'all' to select all the sets, or 'done'. You
may de-select a set by prepending
a '-'
to its name.
[X] bsd
[ ] bsd.rd
[X]
base33.tgz
[X] etc33.tgz
[X]
misc33.tgz
[X]
comp33.tgz
[X] man33.tgz
[X]
game33.tgz
[ ]
xbase33.tgz
[ ]
xshare33.tgz
[ ]
xfont33.tgz
[ ]
xserv33.tgz
File Name? (or
'done')
Добавить компонент можно так^ +xbase33*, а убрать
–misc33*. Выбрав все необходимое, переходим к процедурее переноса и установки
компонентов:
File Name? (or
'done') [done] Enter
Ready to install
sets? [y] Enter
Getting bsd ...
100%
|**************************************************|4472 KB00:03
Getting
base33.tgz ...
100%
|**************************************************| 30255 KB00:21
Getting etc33.tgz
...
100%
|**************************************************|1469 KB00:01
Getting
misc33.tgz ...
100%
|**************************************************|1828 KB00:01
Getting
comp33.tgz ...
100%
|**************************************************| 16207 KB00:13
Getting man33.tgz
...
100%
|**************************************************|5921 KB00:04
Getting
game33.tgz ...
100% |**************************************************|2545
KB00:01
Sets can be
located on a (m)ounted filesystem; a (c)drom, (d)isk or (t)ape device; or a
(f)tp, (n)fs or (h)ttp server.
Where are the
install sets? (or 'done')
Отлично, мои поздравления, вы поставили OpenBSD!
Осталось совсем чуть-чуть для того, чтобы увидеть ее в полной красе. Выставляем
время и сообщаем системе, что не будем использовать X Windows.
Extract more
sets? [n] Enter
Do you expect to
run the X Window System? [y] n
Saving
configuration files......done.
Generating
initial host.random file ......done.
What timezone are
you in? ('?' for list) [US/Pacific] ?
Africa/
Chile/ GB-Eire Israel NZ-CHAT Turkey
America/
Cuba GMT Jamaica Navajo UCT
Antarctica/
EET GMT+0 Japan PRC US/
Arctic/
EST GMT-0 Kwajalein PST8PDT UTC
Asia/
EST5EDT GMT0 Libya Pacific/ Universal
Atlantic/
Egypt Greenwich MET Poland W-SU
Australia/
Eire HST MST Portugal WET
Brazil/
Etc/ Hongkong MST7MDT ROC Zulu
CET
Europe/ Iceland Mexico/ ROK posix/
CST6CDT Factory
Indian/ Mideast/ Singapore posixrules
Canada/
GB Iran NZ SystemV/ right/
What timezone are
you in? ('?' for list) [US/Pacific] US
What sub-timezone
of 'US' are you in? ('?' for list) ?
Alaska Central
Hawaii Mountain Samoa
Aleutian
East-Indiana Indiana-Starke Pacific
Arizona
Eastern Michigan Pacific-New
Select a
sub-timezone of 'US' ('?' for list): Eastern
Setting
local timezone to 'US/Eastern'...done.
Последний взмах волшебной палочкой:
Making
all device nodes...done.
Installing boot
block...
boot: /mnt/boot
proto:
/usr/mdec/biosboot
device:
/dev/rwd0c
/usr/mdec/biosboot:
entry point 0
proto bootblock
size 512
room for 12
filesystem blocks at 0x16f
Will load 7
blocks of size 8192 each.
Using disk
geometry of 63 sectors and 240 heads.
0: 9 @(203 150
55) (3078864-3078872)
1: 63 @(203 151
1) (3078873-3078935)
2: 24 @(203 152
1) (3078936-3078959)
3: 16 @(203 8
47) (3069910-3069925)
/mnt/boot: 4
entries total
using MBR
partition 1: type 166 (0xa6) offset 3069360 (0x2ed5b0)
...done.
Система поставлена. Осталось лишь нажать кнопку
перезагрузки и увидеть всю красоту, чистоту и прелесть системы. Ну а что делать
с ней дальше, я расскажу в следующей статье.
Ссылки по теме: