ДЕНИС НАЗАРОВ
OpenBSD. Первые шаги
Продолжим наше знакомство с OpenBSD (начало см. в июньском номере журнала). Мы остановились на успешной установке системы и предложением перезагрузиться, что, собственно говоря, и выполняем. Итак, первая загрузка уже по традиции для BSD-систем выполняется на синем фоне, и вы можете видеть, как ядро системы опрашивает все устройства, которые находит. Отлично, ядро загрузилось, дальше пошел init системы (процесс, который запускает все остальные процессы). Мы видим, как поднимается сетевой интерфейс (в моем случае le1), добавляется маршрут по умолчанию (в большинстве случаев надо прописать его в /etc/mygate, я расскажу об этом файле при конфигурировании сети), запускаются демоны sendmail inetd и sshd. Торжественный момент...
OpenBSD/i386 (princess) ttyC0
login:
|
Волшебная дверь в систему, которая тщательно выбирает себе друзей, но если вы станете ее другом – она сделает все для вас. Твердо и уверенно вводим root, затем пароль, который мы указали при инсталляции.
Первое, о чем стоит позаботиться – проверка наличия патчей (исправлений) для вашей системы. Конечно, шанс, что критические исправления присутствуют, очень мал, однако он есть. Итак, нам прямая дорога на http://www.openbsd.org/errata.html. Веб-страница содержит листинги всех патчей, доступных для вашей версии системы и описания к ним. И вообще в дальнейшем, если у вас не CURRENT-система с постоянным обновлением – рекомендую регулярно навещать эту страницу.
Зайти как пользователь root вы можете в систему с консоли и используя ssh (1) по сети. Доступ пользователя root в систему из сети сложно назвать простой глупостью, это огромная глупость! Он разрешен по умолчанию лишь для тех случаев, когда система ставится удаленно (как раз все мои случаи) и других пользователей в системе просто нет. Успешно зайдя в систему под root, вы увидите сообщение «Don’t login as root, use su» – даже тут система подсказывает, как надо обращаться с ней. Еще одно маленькое НО. Прежде чем запрещать вход пользователя root по сети, обязательно добавьте простого пользователя и занесите его в группу «wheel», иначе при удаленном администрировании вы потеряете все шансы вернуть права суперпользователя. Кстати, при adduser указание группы «wheel» бесполезно! Вручную отредактируйте файл /etc/group, чтобы он выглядел следующим образом:
wheel:*:0:root,myusername
Теперь смело устанавливайте опцию:
PermitRootLogin no
в файле /etc/ssh/sshd_config и перезапускайте демон sshd. Зайдя в систему под добавленным пользователем, вы сможете использовать команды su (1) и sudo (8) для получения привилегий суперпользователя. Используя команду «su», система просто меняет ваш UID на 0, а используя команду «su –», система дополнительно перечитывает файл профиля (например, /root/.profile или /root/.bash_profile и т. д.).
Пароль суперпользователя
Я думаю, не стоит описывать в этой статье, как правильно выбрать пароль, слишком много уже подобных статей, просто скажу, что пароль As52DjZ921cOx считается нормальным для root. Изменить пароль можно уже знакомой командой:
/usr/sbin/passwd
Маленькое дополнение: привыкайте сразу использовать полные пути к критически важным командам. Используйте, например, «/usr/sbin/su –», а не просто «su –», порой такие мелочи бывают очень важны. Об этом в следующих статьях.
Проверьте переменную окружения PATH (echo $PATH) – в ней ни в коем случае не должно быть относительных путей (начинающихся с «./») и в дальнейшем PATH суперпользователя ни за что не должна содержать путь текущей директории «.».
Системное время
Системное время устанавливается с помощью date (1). Если требуется поменять временной пояс системы, то это делается пересозданием символической ссылки /etc/localtime на правильный пояс в директории /usr/share/zoneinfo.
Примеры установки времени:
Установить время и дату 22 июля 2003, 18:25 PM:
# date 200306221825
Изменить часовой пояс:
# ln -fs /usr/share/zoneinfo/Asia/Bishkek /etc/localtime
Системные демоны
Файл /etc/rc.conf отвечает за процесс загрузки системы. В нем содержатся опции для разных загружаемых демонов (например, sshd и sendmail). Администратор должен сделать копию этого файла в /etc/rc.conf.local и уже в нем вносить все исправления, которые нужны. Но я так никогда не делаю. Просто привык работать напрямую с /etc/rc.conf.
Используя команду hostname (1), вы можете проверить имя хоста в сети. Можно изменить имя, используя эту же команду hostname (1) или изменив имя в файле /etc/myname и перезапустив систему.
Сетевая конфигурация
Самое первое, что надо сделать – это набрать команду «ifconfig –a» и посмотреть на все сетевые интерфейсы, найденные и отконфигурированные системой. Исправить настройки можно, отредактировав файл /etc/hostname.interface (где interface – имя сетевого интерфейса, например, le1) или использовать ifconfig (8) для исправления настроек. Прочитав страницу мануала hostname.if (5), у вас не останется никаких вопросов по формату файла.
# ifconfig –a
lo0: flags=8049 mtu 33224
inet 127.0.0.1 netmask 0xff000000
lo1: flags=8008 mtu 33224
le1: flags=8863 mtu 1500
address: 00:50:56:58:f8:5e
inet 172.16.13.37 netmask 0xfffffff0 broadcast 172.16.13.63
pflog0: flags=141 mtu 33224
pfsync0: flags=0<> mtu 1896
sl0: flags=c010 mtu 296
sl1: flags=c010 mtu 296
ppp0: flags=8010 mtu 1500
ppp1: flags=8010 mtu 1500
tun0: flags=10 mtu 3000
tun1: flags=10 mtu 3000
enc0: flags=0<> mtu 1536
bridge0: flags=0<> mtu 1500
bridge1: flags=0<> mtu 1500
vlan0: flags=0<> mtu 1500
address: 00:00:00:00:00:00
vlan1: flags=0<> mtu 1500
address: 00:00:00:00:00:00
gre0: flags=9010 mtu 1450
gif0: flags=8010 mtu 1280
gif1: flags=8010 mtu 1280
gif2: flags=8010 mtu 1280
gif3: flags=8010 mtu 1280
|
Вот пример текущего листинга ifconfig –a одного из моих OpenBSD –CURRENT-боксов с GENERIC-ядром.
Для конфигурирования multicast routing смотрите страницу мануала netstat (8) и страницу dhcp (8) для интерфейсов DHCP.
Проверьте таблицы роутинга командой netstat –rn. Вывод будет примерно таким:
# netstat –nr
Routing tables
Internet:
Destination Gateway Flags Refs Use Mtu Interface
default 172.16.13.62 UGS 2 63190 - le1
127/8 127.0.0.1 UGRS 0 0 33224 lo0
127.0.0.1 127.0.0.1 UH 2 609 33224 lo0
172.16.13.48/28 link#1 UC 0 0 - le1
172.16.13.37 127.0.0.1 UGHS 0 666 33224 lo0
172.16.13.62 0:b:fd:d:9d:40 UHL 1 0 - le1
224/4 127.0.0.1 URS 0 0 33224 lo0
Encap:
Source Port Destination Port Proto SA(Address/Proto/Type/Direction)
::/96 ::1UGRS 0 0 32972 lo0 =>
::1 ::1UH 4 0 32972 lo0
::ffff:0.0.0.0/96 ::1UGRS 0 0 32972 lo0
fc80::/10 ::1UGRS 0 0 32972 lo0
fe80::/10 ::1UGRS 0 0 32972 lo0
fe80::%le0/64 link#1 UC 0 0 1500 le1
fe80::%lo0/64 fe80::1%lo0 U 0 0 32972 lo0
ff01::/32 ::1U 0 0 32972 lo0
ff02::%le0/32 link#1 UC 0 0 1500 le1
ff02::%lo0/32 fe80::1%lo0 UC 0 0 32972 lo0
|
Адрес маршрута по умолчанию находится в файле /etc/mygate (если файла нет – создайте его вручную, прописав туда нужный IP-адрес). Добавить маршрут вручную поможет команда:
route add default xxx.xxx.xxx.xxx
Для детального анализа конфигурации сетевых интерфейсов смотрите файл /etc/netstart, именно в нем находятся сценарии запуска сетевой подсистемы
Если вы собираетесь маршрутизировать пакеты между интерфейсами, добавьте опцию:
net.inet.ip.forwarding=1
или
net.inet6.ip.forwarding=1
в файл /etc/sysctl.conf или пересоберите ядро с опцией GATEWAY. Пакеты не перенаправляются по умолчанию в соответствии требованиям RFC.
BIND Name Server (DNS)
Если вы используете DNS, то настройки хранятся в файле /etc/resolv.conf. Он может выглядеть примерно так:
# cat /etc/resolv.conf
lookup file bind
nameserver 127.0.0.1
nameserver 172.16.13.35
Чтобы использовать локальный кэширующий сервер имен (как раз мой случай) первая строчка nameserver должна выглядеть именно так: «nameserver 127.0.0.1». Вы также должны выставить named_flags в файле /etc/rc.conf.local, в моем случае /etc/rc.conf и создать файл named.boot (в версии OpenBSD 3.3 используется BIND версии 9.x и файл называется named.conf) в соответствии со страницей мануала named (8). Если же преобразование имен в IP-адреса происходит слишком долго, проверьте, что демон named запущен.
RPC-based сетевые сервисы
Некоторые сетевые сервисы ориентированы на использование RPC portmapper, должен быть запущен для их работы portmap (8). Эти сервисы включают в себя YP и NFS и множество других сервисов. Для запуска RPC portmapper автоматически вы должны прописать директиву:
portmap=YES
в файле /etc/rc.conf.local.
Настройка YP (Yellow Pages)
Рассказывать, что такое YP в деталях я не буду, это отдельная тема для статьи, вкратце же можно сказать, что это подобие Windows Active Directory, где пользователи и прочая информация хранятся на центральном сервере и все машины в сети работают с ним. Первое, что надо сделать, – это проверить имя домена YP. Это делается при помощи команды domainname (1). В случае ошибки отредактируйте файл /etc/defaultdomain и перезапустите систему. Осуществить смену defaultdomain без перезапуска системы можно при помощи той же команды domainname (1).
Запустить клиентскую часть YP-сервисов можно просто запустив ypbind и затем осуществив переход на YP-сервер, как описано на страницах мануала passwd (5) и group (5). Чтобы включить поддержку YP, вы должны добавить линию:
+:*::::::::
в файл /etc/master.passwd, и это может быть корректно выполнено при помощи команды vipw (8). В дальнейшем любые исправления файла /etc/master.passwd осуществляйте только при помощи команды vipw (8), т.к. авторизация в системе опирается сразу на 4 файла. Это /etc/passwd, /etc/master.passwd, /etc/pwd.db, /etc/spwd.db и vipw (8) работает с ними всеми сразу. Всю дополнительную информацию относительно работы с YP вы можете найти на странице мануала yp (8).
Проверьте правильность монтирования дисков системы, сравнивая содержание файла /etc/fstab и выводы команд mount (8) и df (1). Например:
# cat /etc/fstab
/dev/wd0a / ffs rw 1 1
/dev/wd0g /archive ffs rw,nodev,nosuid 1 2
/dev/wd0h /home ffs rw,nodev,nosuid 1 2
/dev/wd0d /honeycombs ffs rw,nodev,nosuid 1 2
/dev/wd0f /usr ffs rw,nodev 1 2
/dev/wd0j /usr/local ffs rw,nodev 1 2
/dev/wd0e /var ffs rw,nodev,nosuid 1 2
|
# mount
/dev/wd0a on / type ffs (local)
/dev/wd0g on /archive type ffs (local, nodev, nosuid)
/dev/wd0h on /home type ffs (local, nodev, nosuid)
/dev/wd0d on /honeycombs type ffs (local, nodev, nosuid)
/dev/wd0f on /usr type ffs (local, nodev)
/dev/wd0j on /usr/local type ffs (local, nodev)
/dev/wd0e on /var type ffs (local, nodev, nosuid)
|
# df
Filesystem 512-blocks Used Avail Capacity Mounted on
/dev/wd0a 4060550 126946 3730578 3% /
/dev/wd0g 10152858 6952916 2692300 72% /archive
/dev/wd0h 2030538 68554 1860458 4% /home
/dev/wd0d 10152858 380272 9264944 4% /honeycombs
/dev/wd0f 4060614 1965490 1892094 51% /usr
/dev/wd0j 4060614 69368 3788216 2% /usr/local
/dev/wd0e 10152858 16304 9628912 0% /var
|
# pstat –s
Device 512-blocks Used Avail Capacity Priority
swap_device 1048320 0 1048320 0% 0
|
Отредактируйте файл /etc/fstab и используйте команды mount (8) umount (8) в дальнейшем для работы с дисками. Формат файла /etc/fstab вы можете опять же узнать из страницы мануала fstab (5).
Concatenated disks (ccd)
Если вы используете Concatenated disks, отредактируйте файл /etc/ccd.conf и используйте команды:
ccdconfig –U
ccdconfig –C
для удаления и создания ccd общих таблиц файлов. Затем вы можете пользоваться mount (8) и umount (8) для работы с ccd-дисками как с обычными и отредактировать файл /etc/fstab в случае надобности.
Ну вот, на данном этапе система уже будет сносно работать, однако это совсем не дело – оставлять ее в таком все еще сыром виде. Нам нужна большая гибкость и более тонкая настройка, например, новые пользователи и т. д. Конечно, очень многое из арсенала OpenBSD нам может и не пригодиться (например, авторизация по Kerberos), но все же стоит знать, что большинство файлов конфигурации располагаются в директории /etc. Смело пишем cd /etc и редактируем файлы, нужные нам.
Небольшая оговорка. Файл /etc/motd, содержащий Message Of The Day, перезаписывается каждый раз при перезапуске системы, а если вы хотите, чтобы ваше сообщение оставалось, как, например, у меня:
Last login: Tue Jul 22 16:21:10 2003 from 213.145.148.62
Welcome l33t hax0rz to the princess. Hack me, i"ll pay you!
OpenBSD Ultra-secure UNIX like operation system.
pheonix@princess pheonix$
|
Вы должны просто добавить 2 пустые строчки в начало файла /etc/motd и система не будет трогать его. Мне с моими пользователями как раз стоит держать файл /etc/motd без изменений:
pheonix@princess pheonix$ wc -l /etc/passwd
5006 /etc/passwd
Добавление пользователей
Я немного отвлекся, идем дальше. В OpenBSD имеются команды user, useradd, userdel, userinfo, usermod, users для работы с пользователями системы. Нас интересует команда useradd, но разработчики решили не грузить администраторов бесполезным заучиванием опций этой команды и создали замечательный скрипт /usr/sbin/adduser, который в интерактивном режиме задаст вам вопросы относительно новых пользователей и добавит их без проблем. Типичная сессия добавления пользователя:
root@princess root# adduser
Use option ``-silent"" if you don"t want to see all warnings and questions.
Reading /etc/shells
Reading /etc/login.conf
Check /etc/master.passwd
Check /etc/group
User ``postfix"" has gid 12345 but a group with this gid does not exist.
Ok, let"s go.
Don"t worry about mistakes. I will give you the chance later to correct any input.
Enter username []: myself
Enter full name []: unknown user who can kill system
Enter shell bash csh ksh nologin sh [bash]:
Uid [6007]:
Login group myself users [users]: wheel
Login group is ``wheel"". Invite myself into other groups: guest no
[no]:
Login class auth-defaults auth-ftp-defaults daemon default staff
[default]:
Enter password []:
Enter password again []:
Name: myself
Password: ****
Fullname: unknown user who can kill system
Uid: 6007
Gid: 0 (wheel)
Groups: wheel
Login Class: default
HOME: /home/myself
Shell: /usr/local/bin/bash
OK? (y/n) [y]:
Added user ``myself""
Copy files from /etc/skel to /home/myself
Add another user? (y/n) [y]: n
Goodbye!
|
Что примечательно и сразу бросается в глаза? Конечно же проверка файлов авторизации системы. Скрипт ругается на то, что мой пользователь postfix имеет GID (Group Identificator), которого нет в системе, однако это требование почтовой системы Postfix, поэтому не обращаем на это внимание. Что еще? Конечно, Login class. OpenBSD поддерживает классы пользователей, на которые будут накладываться те или иные ограничения. Какие именно ограничения есть в системе, вы можете узнать, используя команду «ulimit -a». Например, лимиты для суперпользователя выглядят так:
# ulimit –a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) 1048576
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) 58693
max memory size (kbytes, -m) 175104
open files (-n) 128
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 532
virtual memory (kbytes, -v) 1056768
|
Все классы определяются в файле /etc/login.conf и прочитав страницу мануала login.conf (5), вы без труда создадите или внесете исправления в нужный вам класс.
RC-файлы
Еще раз о них. Проверьте файлы rc.conf, rc.conf.local, rc.local, rc.securelevel, rc.shutdown и внесите в них все изменения, которые вам нужны. Обычно это 5-минутное дело, однако очень многие вещи завязаны на этих файлах.
Подтяните безопасность
Вы можете еще более обезопасить систему, отредактировав файл /etc/inetd.conf и выключив в нем такие службы/демоны, как telnetd (8) и ftpd (8), которые легко заменяются более безопасной службой SSH (Secure Shell).
Почтовая система
OpenBSD включает в себя Sendmail MTA, которая настроена только на локальную доставку почты. Это значит, что посылать письма локальным пользователям вы можете, а вот принимать почту из сети – нет. Если вы хотите использовать Sendmail MTA в дальнейшем, то вам надо отредактировать файл /etc/mail/sendmail.cf и sendmail_flags в файле /etc/rc.conf.local. Файл /etc/mail/localhost.cf, сгенерированный из openbsd-localhost.mc как раз и служит только для «локальной MTA» и используется по умолчанию. Я использую Postfix MTA на моих боксах, но объяснять почему в этой статье я не буду. Слишком много разных мнений на эту тему. Я лишь могу рекомендовать вам, если вы еще не определились с выбором MTA, использовать Postfix. OpenBSD очень хорошо с ним дружит.
DHCP-сервер
В случае надобности этого сервиса в вашей сети, я думаю, вы уже догадываетесь, что надо сделать.
Редактируем файл /etc/rc.conf.local:
dhcpd_flags=-q
затем файлs /etc/dhcpd.conf и /etc/dhcpd.interfaces и запускаем демон dhcpd (8).
Дневные, недельные и месячные скрипты
Если смотреть в директорию /etc, можно увидеть там скрипты daily, weekly, monthly. Вы можете напрямую редактировать эти скрипты, как я, или же делать «правильно», создав файлы daily.local, weekly.local, monthly.local и внеся в них нужные вам исправления. Наверное, уже сложно не догадаться, что эти скрипты будут выполняться демоном cron один раз в день, неделю, месяц. Скрипты генерируют очень полезный отчет о системе. Вот, например, такой:
Checking root csh paths, umask values:
/etc/csh.cshrc /etc/csh.login /root/.cshrc /root/.login
Root csh startup files do not set the umask.
Checking root sh paths, umask values:
/etc/profile /root/.profile
Root sh startup files do not set the umask.
Checking mailbox ownership.
user amir mailbox is owned by 1013
user director mailbox is owned by 1016
Checking special files and directories.
Output format is:
filename:
criteria (shouldbe, reallyis)
missing: ./root/.cshrc
missing: ./root/.klogin
missing: ./root/.login
missing: ./root/.profile
Removing scratch and junk files:
Checking subsystem status:
disks:
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/wd0a 2030275 56712 1872050 3% /
/dev/wd0g 5076429 3476427 1346181 72% /archive
/dev/wd0h 1015269 34275 930231 4% /home
/dev/wd0d 5076429 170639 4651969 4% /honeycombs
/dev/wd0f 2030307 982745 946047 51% /usr
/dev/wd0j 2030307 34684 1894108 2% /usr/local
/dev/wd0e 5076429 8135 4814473 0% /var
Last dump(s) done (Dump ">" file systems):
network:
Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Colls
lo0 33224 364 0 364 0 0
lo0 33224 127/8 127.0.0.1 364 0 364 0 0
lo1* 33224 0 0 0 0 0
le1 1500 00:50:56:58:f8:5e 94618 0 7134 0 0
le1 1500 172.16.13.48/28 94618 0 7134 0 0
172.16.13.37
pflog0 33224 0 0 0 0 0
pfsync0 1896 0 0 0 0 0
sl0* 296 0 0 0 0 0
sl1* 296 0 0 0 0 0
ppp0* 1500 0 0 0 0 0
ppp1* 1500 0 0 0 0 0
tun0* 3000 0 0 0 0 0
tun1* 3000 0 0 0 0 0
enc0* 1536 0 0 0 0 0
bridge0 1500 0 0 0 0 0
bridge1 1500 0 0 0 0 0
vlan0* 1500 00:00:00:00:00:00 0 0 0 0 0
vlan1* 1500 00:00:00:00:00:00 0 0 0 0 0
gre0* 1450 0 0 0 0 0
gif0* 1280 0 0 0 0 0
gif1* 1280 0 0 0 0 0
gif2* 1280 0 0 0 0 0
gif3* 1280 0 0 0 0 0
Running calendar in the background.
|
И высылают его пользователю root на почту. Просмотрев скрипты, вы без проблем разберетесь, как и где они собирают данную информацию. Отдельная тема для статьи пакет mtree в OpenBSD. Именно он генерирует отчет о пропущенных и измененных файлах в системе.
Заранее скомпилированное программное обеспечение (Packages, упаковки)
Любителям лениво сидеть перед монитором посвящается. OpenBSD имеет огромный набор packages на любой вкус, начиная от системных утилит и демонов, заканчивая пакетами для графической среды X Windows. На втором (обычно) диске дистрибутива как раз и идут файлы в формате tar.gz, содержащие скомпилированное и порой уже отконфигурированное ПО. Достаточно лишь использовать команду pkg_add (1) и пакет уже установлен в вашей системе. В системе FreeBSD имеются PORTS, прославившие ее, чем мы хуже? У нас тоже они есть, и еще сколько! Ставим дистрибутив портов с первого диска или же выкачиваем его из сети, используя ftp://ftp.openbsd.org, разворачиваем в папке /usr и вуаля! У нас стоят порты. Дальнейшую работу с портами в этой статье описывать не буду, скажу лишь только:
cd /usr/ports/packagename;
make install
и в большинстве случаев все. Вы обладатель установленного ПО. Вам стоит прочитать страницы ports (7) packages (7) из мануала, и мне не придется краснеть за то, что я оставил вас в неведении относительно быстрой установки ПО в OpenBSD. Опять же, обратившись к ftp://ftp.openbsd.org, вы найдете много интересных вещей. Не забывайте, это лишь первые шаги, и мы делаем все, чтобы система «точно работала», но не всегда «лучше работала». «Who wanna have, must work»,– как говорят некоторые, так вот и мы с вами будем потихоньку доводить нашу работу с системой до совершенства.
Опять получилось лирическое отступление, доиграла «Enigma – Sadeness», допита четвертая чашка кофе, статья перед вами. Осталось только ввести имя пользователя, пароль и погрузиться в темный, дремучий лес OpenBSD с фонариком в виде журнала «Системный администратор». В следующей статье я расскажу подробнее о сетевой подсистеме OpenBSD и о ее тюнинге.
Вот список страниц мануала, которые я рекомендую вам для прочтения к данной статье:
- chgrp (1)
- chmod (1)
- crontab (1)
- date (1)
- df (1)
- domainname (1)
- hostname (1)
- ls (1)
- make (1)
- man (1)
- netstat (1)
- passwd (1)
- pkg_add (1)
- ssh (1)
- su (1)
- xdm (1)
- ccd (4)
- aliases (5)
- bootptab (5)
- crontab (5)
- exports (5)
- fstab (5)
- group (5)
- hostname.if (5)
- login.conf (5)
- passwd (5)
- printcap (5)
- resolv.conf (5)
- ssh_config (5)
- hostname (7)
- packages (7)
- ports (7)