1. Разбивка по разделам
2. Модификация файловой системы
3. Установка локального часового пояса (отклонение от UTC)
4. Синхронизация времени с NTP-сервером
5. Модификация пользовательской среды и добавление пользователей
6. Установка доменного имени и IP-адреса системы
7. Установка параметров ядра
8. Настройка запуска системы
9. Настройка syslog и newsyslog
10. Настройка Cron и at
11. Настройка периодических процессов
12. Установка прав доступа к системе
13. Конфигурирование ядра
14. Подключение модулей ядра и первоначальное конфигурирование системы
15. Установка специфических параметров сборки
16. Работа через proxy, mirror
17. Пересборка базовой системы и ядра
18. Установка базовой системы и ядра
1. Разбивка по разделам
150M - /
RAM * 1.5 - swap
3G - /var/tmp
2-4G * N - /var/cache # (squid, frox) ТОЛЬКО ЕСЛИ БУДУТ proxy servers!
сколько надо - /var/ftp # (vsftpd, samba) ТОЛЬКО ЕСЛИ БУДЕТ file server !
сколько надо - /var/mail # (sendmail) ТОЛЬКО ЕСЛИ БУДЕТ mail server !
сколько надо - /var/db # (mysql) ТОЛЬКО ЕСЛИ БУДЕТ database server !
10-20G - /usr
1G или более - /home
остальное - /var
2. Модификация файловой системы
а) Удалить каталог /tmp и создать символическую ссылку /tmp на /var/tmp
'rm -rf /tmp && ln -s /var/tmp /tmp'. Это сделает единое хранилище
временных файлов в отдельном разделе.
б) Переместить все каталоги /cdrom* в /mnt: 'mv -f /cdrom* /mnt/', создав тем
самым логическую структуру для присоединённых файловых систем (всё
монтируем в /mnt).
в) Создать в /mnt каталоги flash, floppy: 'cd /mnt && mkdir flash floppy'
Подготавливаем точки монтирования для внешних устройств.
г) Выносим из /usr хранилище пакетов. Создать каталог /var/pkgs и символическую ссылку /usr/ports/packages,
которая ссылается на него 'mkdir /var/pkgs && ln -s /var/pkgs /usr/ports/packages'.
В последствии в /var/pkgs можно будет подмонтировать по SMB внешний репозитарий
пакетов либо создавать в нём свои. Недостающие данные для монтирования файловый
системы по SMB (например пароль, IP), указываем в файле /etc/nsmb.conf:
д) Если предполагается наличие каталога /var/ftp (для file-сервера),
необходимо создать группу ftp (pw groupadd ftp) и пользователя ftp
'pw useradd ftp -c ftp -d /nonexistent -g ftp -s /usr/sbin/nologin'.
Установить на каталог /var/ftp владельца и группу ftp:ftp
'chown -Rf ftp:ftp /var/ftp' и права 'chmod 4755 /var/ftp'. В совокупности
с опцией ядра SUIDDIR это позволит создавать файлы внутри /var/ftp только
с владельцем и группой как у /var/ftp.
е) В результате файл /etc/fstab должен быть похож на:
3. Установка локального часового пояса (отклонение от UTC)
Запустить /usr/sbin/tzsetup. Определиться со временем в CMOS: UTC или локальное.
Если в CMOS установлено локальное время, то на вопрос надо ответить 'NO',
что приведёт к созданию пустого файла /etc/wall_cmos_clock и установке
запуска через cron программы 'adjkerntz -a' для выравнивания времени ядра
до UTC. Далее выбрать нужную временную зону, что приведёт к копированию
соответствующего файла из /usr/share/zoneinfo/ в /etc/localtime. Список
всех временных зон лежит в /usr/share/zoneinfo/zone.tab
Пример ручной настройки для Киева (Украина):
а) создать символическую ссылку /etc/localtime на /usr/share/zoneinfo/Europe/Kiev
Обязательно синхронизировать таким образом перед запуском NTP-сервера (если таковой
используется конечно) для предотвращения аварийного завершения ntpd из-за большой разницы
во времени.
Для периодического обновления времени добавить от имени root в Cron задание 'crontab -u root -e':
и) Добавить аналогично ваши маршруты к "серым" сетям для перекрытия блокировки.
В случае динамического конфигурирования интерфейса:
а) В файл /etc/rc.conf прописать:
ifconfig_NET_IF="DHCP"
б) В файле /etc/rc.conf закомментировать:
hostname=""
defaultrouter=""
в) Оставить в файле /etc/hosts только:
127.0.0.1 localhost.localdomain localhost
7. Установка параметров ядра
Добавить в файл /etc/sysctl.conf следующие строки:
# Блокировка видимости процессов, запущенных от других UID,GID
security.bsd.see_other_uids=0
security.bsd.see_other_gids=0
# Изменяет стандартное значение TTL для Unix (маскируемся под Windows)
net.inet.ip.ttl=128
# Отправляем в Blackhole (без RST или icmp-сообщений) все сегменты, пришедшие
# на порты без слушающих сокетов
# 2 - блокируем все сегменты, 1 - блокируем только SYN-сегменты
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
# Протоколировать обращения к портам без слушающих сокетов
# ВНИМАНИЕ! Возможен очень большой поток сообщений
#net.inet.tcp.log_in_vain=1
#net.inet.udp.log_in_vain=1
# Предупреждение SYN flood
kern.ipc.somaxconn=1024
# Создавать жёсткие ссылки только на его файлы
security.bsd.hardlink_check_uid=1
security.bsd.hardlink_check_gid=1
# Синхронизировать диски во время kernel panic
kern.sync_on_panic=1
# Не создавать coredump
kern.coredump=0
8. Настройка запуска системы
Отредактировать файл /etc/rc.conf в соответствии:
#
# Common
#
fsck_y_enable="yes"
background_fsck="NO" # На сервера ОБЯЗАТЕЛЬНО!
local_startup="/usr/local/etc/rc.d" # Только для сервера!
virecover_enable="NO"
accounting_enable="YES" # Полезно на сервере
kern_securelevel_enable="YES" # Для рабочей станции отключить ("NO")
kern_securelevel="1"
#
# Console
#
moused_enable="YES" # Если используется USB mouse - отключить ("NO")
mousechar_start="3"
font8x8="cp866u-8x8"
font8x14="cp866u-8x14"
font8x16="cp866u-8x16"
scrnmap="koi8-u2cp866u"
keyrate="fast"
keymap="ua.koi8-u.shift.alt"
allscreens_flags="-m on -r yellow green -g 100x37 VESA_800x600 green black"
# изменение видеорежима всех консолей
# необходимо наличие в ядре параметров
# SC_PIXEL_MODE, VESA
#
# Services
#
syslogd_flags="-ss -cc" # Отключает возможность работы по сети и группировку
# однотипных сообщений
#sendmail_enable="NONE" # Для полного отключения Sendmail
sendmail_enable="NO" # Оставляет Sendmail только на локальном интерфейсе
sshd_enable="YES"
usbd_enable="YES"
#
# Network
#
hostname="your-hostname.your-domain"
defaultrouter="_Default_Router_"
gateway_enable="YES" # Только для маршрутизатора
#
# TCP/IP options
#
tcp_extensions="NO"
tcp_drop_synfin="YES"
tcp_restrict_rst="YES"
#
# Interfaces
#
cloned_interfaces="vlan0"
ifconfig_fxp0="inet 2.2.2.2/30"
ifconfig_em0="inet 10.1.0.1/30"
ifconfig_vlan0="inet 10.1.0.10/29 vlan 7 vlandev em0"
#
# Firewall
#
firewall_enable="YES"
firewall_type="OPEN" # Для сервера ОБЯЗАТЕЛЬНО усилить защиту!
firewall_quiet="YES"
firewall_logging="YES"
9. Настройка syslog и newsyslog
а) Установить на все файлы в каталоге /var/log право на чтение/запись только
для владельца 'find /var/log -type f -exec chmod 600 {} ;'
б) Закомментировать в файле /etc/syslog.conf все неиспользуемые в системе
протоколы (например slip.log, lpd-errs, xferlog). Удалить файлы
неиспользуемых протоколов.
в) Переделать активные facilities в файле /etc/syslog.conf примерно так:
a) Создать файл allow, блокируя всем непривилегированным пользователям возможность добавлять
свои собственные задания в Cron: 'touch /var/cron/allow && chmod 600 /var/cron/allow'
б) Создать файл at.allow, блокируя всем непривилегированным пользователям возможность добавлять
свои собственные задания в at: 'touch /var/at/at.allow && chmod 600 /var/at/at.allow'
в) Перечислить в файле /var/cron/allow тех пользователей, кому разрешено пользоваться Cron,
по одному на строку (не забываем про пользователя root)
г) Перечислить в файле /var/at/at.allow тех пользователей, кому разрешено пользоваться at,
по одному на строку (не забываем про пользователя root)
д) После добавления всех требуемых заданий в Cron от имени пользователя, сохранить их копию
в домашнем каталоге пользователя: 'crontab -u USER -l > ~USER/USER.cron'
е) Для восстановления списка заданий Cron, запустить: 'crontab -u USER ~USER/USER.cron'
11. Настройка периодических процессов
a) Скопировать файл /etc/defaults/periodic.conf в /etc
cp -f /etc/defaults/periodic.conf /etc/
б) Отредактировать файл, оставив только те строки, которые изменялись.
В результате может получиться примерно так:
в) Убедиться, что в файле /etc/crontab переменная PATH содержит необходимые каталоги,
иначе могут не запускаться некоторые команды с относительным путём:
г) Создать файлы, в которые можно в последствии добавлять свои скрипты,
по одному на строку: 'cd /etc/periodic && touch daily.local weekly.local monthly.local'
и добавить в /etc/periodic.conf:
д) Если нет желания получать отчёты на почту root'у, их можно перенаправить в файлы.
Для этого необходимо создать файлы для протоколирования:
'cd /var/log && touch daily.log weekly.log monthly.log', убедиться в присутствии
соответствующих записей для данных файлов в /etc/newsyslog.conf
и добавить в /etc/periodic.conf:
log_rotate_dir="/var/log/rotate" # в случае запуска newsyslog с параметром '-a rotate'
и поменять строку в файле /etc/periodic/monthly/200.accounting:
W=/var/log/wtmp
на
W=${log_rotate_dir}/wtmp
12. Установка прав доступа к системе
а) Установить sudo из пакета 'pkg_add -r sudo'
б) Отредактировать файл /usr/local/etc/sudoers:
# User privilege specification
root ALL=(ALL) ALL
# Uncomment to allow people in group wheel to run all commands
%wheel ALL=(ALL) ALL
в) Запустить 'vipw':
* Удалить строку с пользователем "toor"
* Поменять пароль пользователя root на звёздочку "*"
* Поменять shell для пользователя "uucp" на /usr/sbin/nologin
* Поменять идентификатор группы на 0 для админских логинов
* Поменять все домашние каталоги "/" у всех записей на "/nonexistent"
В определении местоположения каждого поля может поможет 'chsh'
г) Отредактировать /etc/login.access:
# Если установлен Squid
+:nobody squid mysql:local
# Для привилегированных пользователей. Блокируем вход root
-:ALL EXCEPT _user_1_ _user_2_:ALL
д) 'chmod 0400 /etc/login.access'
е) В /etc/ttys установить на всех консолях, кроме "console", тип insecure
в место secure
ж) Отключить 0-ю консоль, переключив ttyv0 из режима on перевести в off
з) 'kill -1 1'
13. Конфигурирование ядра
а) cd /sys/{your_arch}/conf/
б) Скопировать GENERIC в _YOUR_KERN_
в) Переименовать параметр 'ident' в файле ядра с GENERIC на _YOUR_KERN_
з) Добавить по желанию следующие параметры ядра (описание в /usr/src/sys/conf/NOTES и
/usr/src/sys/_ARCH_/conf/NOTES):
#
options HZ=1000
# Автоматическая перезагрузка через 16 сек после kernel panic
options PANIC_REBOOT_WAIT_TIME=16
# Не перезагружаться при нажатии Ctrl+Alt+Del
options SC_DISABLE_REBOOT
# Установка цветов консоли в "зелёный на чёрном", а ядра в "жёлтый на чёрном"
options SC_NORM_ATTR=(FG_GREEN|BG_BLACK)
options SC_KERNEL_CONS_ATTR=(FG_YELLOW|BG_BLACK)
# Добавляет поддержку растрового текстового режима (не стандартные режимы)
options SC_PIXEL_MODE
options VESA
# Включает вставку содержимого буффера мышки по нажатию правой кнопки
options SC_TWOBUTTON_MOUSE
# Включает поддержку SUIDDIR для mount(8)
options SUIDDIR
# Эмулирует ATAPI устройства как SCSI (необходимо для поддержки CR-RW, DVD-RW)
device atapicam
# Поддержка многопроцессорности (необходимо для Hyper Threading)
options SMP
device apic
# Необходимо для специфических параметров монтирования для mount(8)
options LIBICONV
options LIBMCHAIN
options CD9660_ICONV
options MSDOSFS_ICONV
options MSDOSFS_LARGE
options NTFS
options NTFS_ICONV
options UDF
options UDF_ICONV
# Для включения SSE/MMX2
options CPU_ENABLE_SSE
# Включение SSE, если BIOS сам не включает (AMD only)
options CPU_ATHLON_SSE_HACK
# Если есть ISA COM multiport
options COM_MULTIPORT
14. Подключение модулей ядра и первоначальное конфигурирование системы
а) Описываем необходимые модули и параметры ядра, добавляя их в
файл /boot/loader.conf. Например такие:
#
# Common
#
linux_load="YES" # Linux emulation
autoboot_delay="5"
smbfs_load="YES"
#
# ACPI/APM
#
acpi_video_load="YES"
#
# HyperThreading (требуется SMP в ядре)
#
#machdep.hyperthreading_allowed="1"
#
# ATA
#
hw.ata.ata_dma="1" # Enable DMA access for ATA devices
hw.ata.atapi_dma="1" # Enable DMA access for ATAPI devices
#
# Sound
#
speaker_load="YES"
snd_driver_load="YES"
#
# Screen saver at startup
#
bitmap_load="YES"
bitmap_name="/boot/fbsd-boot.pcx"
splash_pcx_load="YES"
#
# USB
#
usb_load="YES" # USB subsystem
ugen_load="YES" # USB generic device, if all else fails ...
uhid_load="YES" # Human Interface Devices
ums_load="YES" # Mouse
umass_load="YES" # Mass Storage Devices
15. Установка специфических параметров сборки
Отредактировать файл /etc/make.conf в соответствии
с /usr/share/examples/etc/make.conf. У меня он выглядит примерно так:
#
# Compile
#
CPUTYPE?= pentium2
CFLAGS= -O -pipe
COPTFLAGS= -O2 -pipe
#
# Common
#
KERNCONF=_YOUR_KERN_ # kernel по-умолчанию
MTREE_FOLLOWS_SYMLINKS= -L
#NO_DYNAMICROOT= true # Собирать статически /bin /sbin
NO_FORTRAN= true
NO_IPFILTER= true
NO_PF= true
NOATM= true
NOGAMES= true
NOINET6= true # если пересобрали "мир" с этим параметром, то
# то обязательно закомментировать строку
# "O DaemonPortOptions=Name=IPv6, Family=inet6, Modifiers=O"
# в /etc/mail/sendmail.cf и запустить 'cd /etc/mail && make all restart'
WITHOUT_X11=yes # Cтроить порты без поддержки X
DOC_LANG= en_US.ISO8859-1 ru_RU.KOI8-R
#
# Update
#
# Список зеркал для поиска distfiles программ из портов
MASTER_SITE_OVERRIDE=http://ftp2.ua.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/
SUP_UPDATE= true # Производить обновление через 'make update'
NO_PORTSUPDATE= true
#NO_DOCUPDATE= true
#
SUP= /usr/local/bin/cvsup # установить из /usr/ports/net/cvsup-without-gui
SUPFLAGS= -g -L 3
SUPFILE= /usr/local/etc/cvsup.src
PORTSSUPFILE= /usr/local/etc/cvsup.ports
DOCSUPFILE= /usr/local/etc/cvsup.doc
16. Работа через proxy, mirror
По-умолчанию ОС использует утилиту fetch для загрузки файлов по протоколу
HTTP и FTP во время установки/обновления (pkg_add, pkg_fetch, portupgrade)
программ из портов. Для того, чтобы fetch устанавливал соединения через PROXY-сервер,
необходимо установить аналогичные значения переменных окружения:
В данном случае, http proxy-сервер должен поддерживать ftp проксирование.
Если данные переменные окружения записывать в нижнем регистре, то сохраняется
совместимость с альтернативным менеджером закачек wget для работы через proxy.
Если в качестве shell используется csh/tcsh, то для определения указанных
переменных окружения необходимо добавить в файл /etc/csh.cshrc такие строки
(обязательно перелогиниться!):
Для установки зеркала пакетов по-умолчанию (pkg_add -r, pkg_fetch, portupgrade -PP, portinstall -PP)
аналогично в файл /etc/csh.cshrc дописываем:
setenv PACKAGEROOT http://package-mirror.org
Данный сайт должен содержать каталог /pub/FreeBSD/ports/$arch/packages-$release/
В противном случае переопределить сайт и каталог в переменной окружения PKG_SITES,
добавляя в файл /etc/csh.cshrc запись:
Поиск пакетов происходит в каталоге All при указании полного имени пакета (с версией).
Иначе - в каталоге Latest, в котором должны содержаться символические ссылки с именами
без версий, ссылающиеся на полные имена пакетов в каталоге All.
Чтобы поиск distfiles (исходников) программ из портов изначально осуществлялся
на альтернативных зеркалах, необходимо в файле /etc/make.conf определить значение
переменной MASTER_SITE_OVERRIDE: