Разговор всегда должен начинаться с приветствия. Приветствие для авторизовавшегося по ssh (или с физической консоли) пользователя можно поменять в файле /etc/motd (Message Of The Day, Сообщение дня). В motd можно добавить контакты технического отдела, важную информацию об особенностях настройки, текущие невыполненные работы по серверу «TO DO» и многое другое, что важно увидеть залогиневшемуся пользователю.
# vi /etc/motd Welcome to the Online Sever company! Have a nice day!
Работать под суперпользователем root не рекомендуется. Человек - не машина, и даже самый ответственный и внимательный администратор может допустить такую критическую ошибку (даже в один символ), которая может вывести систему из строя, или даже безвозвратно уничтожить важные данные.
Заводим пользователя с логином kak (Kotov Andrey Konstantinovich), и, для возможности получения привилегий суперпользователя, добавим данного пользователя в группу wheel. Когда утилита запросит пароль для нового пользователя, не удивляйтесь, что при вводе не отображаются «звёздочки», как это повсеместно в мире Windows. В мире FreeBSD, Linux и других UNIX- и UNIX-подобных системах это нормально, аспект безопасности.
# adduser Username: kak Full name: Kotov Andrey Konstantinovich Uid (Leave empty for default): Login group [kak]: wheel Login group is wheel. Invite kak into other groups? []: Login class [default]: Shell (sh csh tcsh nologin) [sh]: tcsh Home directory [/home/kak]: Home directory permissions (Leave empty for default): Use password-based authentication? [yes]: Use an empty password? (yes/no) [no]: Use a random password? (yes/no) [no]: Enter password: указываем пароль Enter password again: указываем пароль Lock out the account after creation? [no]:
Проверяем введённую информацию и подтверждаем её правильность.
OK? (yes/no): yes adduser: INFO: Successfully added (kak) to the user database. Add another user? (yes/no): no Goodbye!
Укажем утилите make собирать всё без X11 (для серверного назначения машины).
# echo "OPTIONS_UNSET=X11" >> /etc/make.conf
Теперь, собственно, скачиваем и разворачиваем порты.
# portsnap fetch extract
Если есть интерес в русификации консоли и отображении русских символов - нужно настроить для консоли кодировку KOI8-R.
Добавляем в /etc/rc.conf.
font8x8="cp866-8x8" font8x14="cp866-8x14" font8x16="cp866b-8x16" scrnmap="koi8-r2cp866" keymap="ru.koi8-r"
Редактируем в /etc/ttys.
ttyv0 "/usr/libexec/getty Pc" cons25r on secure
Т.е. там, где было cons25, стало cons25r (т.е. +r).
Сделаем стандартное приглашение prompt (символы »#» или »>» в начале строки, перед вводом команды) более информативным. Для этого в файле /usr/share/skel/dot.cshrc (для всех новых пользователей) и в файле /home/kak/.cshrc (для уже созданного пользователя kak) заменим одну строку.
# vi /usr/share/skel/dot.cshrc # vi /home/kak/.cshrc
Удаляем строки содержащие какое-либо приглашение (set prompt):
set prompt = "..."
Вставляем строку:
set prompt = "%{\033[33m%}[%T] %{\033[0;4;31m%}`/usr/bin/whoami`%{\033[0;1;31m%}@%{\033[0;4;31m%}%m%{\033[0;1;34m%} %/%{\033[0;32m%} # "
Также, нужно изменить приглашение для суперпользователя.
# vi /root/.cshrc
Удаляем строки содержащие какое-либо приглашение (set prompt):
set prompt = "..."
Добавить взамен строку:
set prompt = "%{\033[33m%}[%T] %{\033[0;4;31m%}`/usr/bin/whoami`%{\033[0;1;31m%}@%{\033[0;4;31m%}%m%{\033[0;1;34m%} %/%{\033[0;32m%} # "
Тем самым, вместо стандартных промптов # и > мы получим информативное (текущее время, имя авторизованного пользователь, хостнэйм сервера, текущая директория) и цветное приглашение на ввод команд.
[1:51] kak@gate /home/kak #
В повседневной жизни системному администратору приходится использовать системную утилиту grep каждый день. Для того, чтобы искомые строки подсвечивались цветом, что очень удобно, добавим алиас рядом со стандартными алиасами в .cshrc для root'a, системного пользователя kak и для всех новых пользователей.
# vi /home/kak/.cshrc # vi /root/.cshrc # vi /usr/share/skel/dot.cshrc alias grep grep --color=auto
Также, для суперпользователя, системного пользователя и всех создаваемых пользователей добавим подсветку консоли. Необходимо в .cshrc-файлах после всех алиасов (alias) добавить следующие четыре строки.
# vi /home/kak/.cshrc # vi /root/.cshrc # vi /usr/share/skel/dot.cshrc setenv LSCOLORS ExFxBxDxCxEgEdAbAgAcAd setenv CLICOLOR set autolist set color
Укажем сколько системе можно ждать бездействия пользователя, прежде чем перевести экран монитора в энергосбережающий режим (в секундах, 90 секунд).
# vi /etc/rc.conf blanktime="90"
Также следует указать, что мы будем использовать в виде заставке в энергосберегающем режиме монитора, например, графический логотип FreeBSD.
# vi /etc/rc.conf saver="logo_saver"
Если хочется, чтобы отклик клавиатуры был больше (а мы хотим, чтобы курсор перемещался быстро), опять же в /etc/rc.conf укажем скорость нажатия клавиш.
# vi /etc/rc.conf keyrate="fast"
Проверим текущую дату и время, установленные на сервере.
# date четверг, 6 июня 2013 г. 08:38:45 (MSD)
Если всё в порядке, то двигаемся дальше, если же нет, указываем часовой пояс нахождения сервера (Europe/Moscow) и устанавливаем точные дата и время.
# cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime # date 201306061345 # date четверг, 6 июня 2013 г. 13:45:10 (MSK)
Дополнительно добавим в крон сверку времени каждые 10 минут.
# crontab -e */10 * * * * /usr/sbin/ntpdate pool.ntp.org >> /var/log/ntp.log
В 2011 и 2014 году некоторые политические личности отменили в России переход на зимнее время. В связи с этим, программное обеспечение множества устройств работало некорректно, по-старинке переводило время на зимнее, ведь устройства не в состоянии читать новые законы и подстраиваться под них. Этим должен заниматься системный администратор, добрым словом вспоминая слуг народа, принявших эти полезные законы.
В новых версиях FreeBSD часовые пояса уже сделаны на новый лад. Но если вам, как и мне попался дистрибутив FreeBSD, вышедшей перед принятием закона - необходимо обновить файлы часовых поясов на сервере.
Можно обновить временные зоны часовых поясов автоматически, запустив одну единственную команду.
# fetch http://wiki.onsever.ru/_media/freebsd/update_zoneinfo.sh; chmod 500 ./update_zoneinfo.sh; ./update_zoneinfo.sh
Или произвести операцию обновления вручную.
Можно настроить через sysinstall, но привычнее вручную. Для начала смотрим что у нас с сетевыми интерфейсами
# ifconfig nfe0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=8010b<RXCSUM,TXCSUM,VLAN_MTU,TSO4> ether 90:e6:ba:40:d7:1d inet 195.9.14.15 netmask 0xffffffff broadcast 195.9.14.15 media: Ethernet autoselect (100baseTX <full-duplex,flag0,flag1>) status: active ipfw0: flags=8801<UP,SIMPLEX,MULTICAST> metric 0 mtu 65536 lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384 options=3<RXCSUM,TXCSUM>
После этого пишем в /etc/rc.conf:
hostname="def.wm.ru" ifconfig_nfe0="inet 195.9.14.15 netmask 255.255.255.0 -nopromisc" ifconfig_nfe0="DHCP" (взамен, если DHCP) defaultrouter="195.9.14.6" (если DHCP, то не нужно)
Далее добавляем dns-сервера в /etc/resolve.conf:
domain wm.ru nameserver 195.9.14.117 nameserver 193.125.152.91
Можно вместо «domain wm.ru» указать несколько, только внимательно следим, чтобы были точки на конце доменов, например так…
search wm.ru. relis.ru. nameserver 195.9.14.117 nameserver 193.125.152.91
Лучше будет всем, когда сканеры сетей не могут определить информацию об операционной системе. Заберём у них эту возможность.
# echo 'tcp_drop_synfin="YES"' >> /etc/rc.conf
Рекомендуется также собирать ядро с указанной опцией.
options TCP_DROP_SYNFIN
Также, чтобы интерфейс работал в одном режиме full-duplex и внезапно не переключался - желательно явно указывать, в каком режиме ему следует работать (чтобы в какой-то нежелательный момент канал резко не ужался или не отвалился вовсе). Для этого смотрим текущий режим работы интерфейса.
# ifconfig | grep media media: Ethernet autoselect (100baseTX <full-duplex>)
Добавляем в /etc/rc.conf.
ifconfig_nfe0="inet 195.9.14.50 netmask 255.255.255.0 media 100baseTX mediaopt full-duplex"
И либо перезагружаем сервер, либо перезапускаем netif и routing.
# shutdown -r now # /etc/rc.d/netif restart && /etc/rc.d/routing restart
Для запуска демона SSH при старте системы добавляем в /etc/rc.conf.
sshd_enable="YES"
Отключаем в конфиге sshd резолвинг IP, чтобы не было тормозов при медленной работе DNS. Также, запретим удалённым пользователям авторизовываться в системе под root'ом. В таком случае, даже если пароль будет правильный - система сбросить соединение.
# vi /etc/ssh/sshd_config UseDNS no PermitRootLogin no
Также, можно указать порт, на котором будет прослушивать соединения ssh, указать принимать соединения только по протоколу второй версии (аспект безопасности, протокол 1 версии не безопасен и практически не используется в современных системах). Директивой Allow Groups можно устанавливать группы пользователей, которым разрешена авторизация по ssh.
Port 22 Protocol 2 AllowGroups wheel
После этого нужно перезапустить sshd.
# /etc/rc.d/sshd restart
Если не требуется - отключаем входящую и исходящую почту от sendmail.
sendmail_enable="NO" sendmail_submit_enable="NO" sendmail_outbound_enable="NO" sendmail_msp_queue_enable="NO"
Если планируется только отправлять сообщения - отключаем входящую почту.
sendmail_enable="NO"
Для того, чтобы сократить время загрузки, уменьшим ожидание выбора в boot loader'e (меню перед стартом системы).
# echo 'autoboot_delay="2"' >> /boot/loader.conf
Для поддержки модуля linux и linux-вещей добавляем в /etc/rc.conf.
# echo 'linux_enable="YES"' >> /etc/rc.conf
Для того, чтобы система не тормозилась при старте восстановлением сессий vi.
# echo 'virecover_enable="NO"' >> /etc/rc.conf
Если новое ядро уже собрано и в него добавлена поддержка firewall'а, неплохим шагом будет увеличить в ядре количество допустимых динамических правил для ipfw.
# sysctl net.inet.ip.fw.dyn_max=65536 net.inet.ip.fw.dyn_max: 4096 -> 65536 # echo "net.inet.ip.fw.dyn_max=65536" >> /etc/sysctl.conf
Делаем из сервера чёрную дыру для непрослушиваемых портов. Установка данных директив замедляет работу сетевых сканеров и система не тратит ресурсы на формирование ответа на такие запросы. TCP и UDP.
# sysctl net.inet.tcp.blackhole=2 net.inet.tcp.blackhole: 0 -> 2 # echo 'net.inet.tcp.blackhole=2' >> /etc/sysctl.conf # sysctl net.inet.udp.blackhole=1 net.inet.udp.blackhole: 0 -> 1 # echo 'net.inet.udp.blackhole=1' >> /etc/sysctl.conf
Запрещаем всем пользователям кроме root'а просматривать информацию о всех процессах, сокеты и тому подобное. Непривилегированный пользователь сможет наблюдать только за своими процессами.
# sysctl security.bsd.see_other_uids=0 security.bsd.see_other_uids: 1 -> 0 # echo 'security.bsd.see_other_uids=0' >> /etc/sysctl.conf # sysctl security.bsd.see_other_gids=0 security.bsd.see_other_gids: 1 -> 0 # echo 'security.bsd.see_other_gids=0' >> /etc/sysctl.conf
Если спикер (speaker) на машине не нужен (например, на десктопе уже надоел, а на сервере нет надобности), отключаем.
# sysctl hw.syscons.bell=0 # echo "hw.syscons.bell=0" >> /etc/sysctl.conf
После того, как соединение устанавливается, оно попадает в очередь «listen socket queue», пока серверный демон, прослушивающий порт, не займётся обработкой запроса в этом соединении. Увеличиваем размер очереди на порты TCP (до 4096).
# echo 'kern.ipc.somaxconn=4096' >> /etc/sysctl.conf
Увеличиваем допустимое количество кэшированных файлов, это помогает разгрузить дисковую подсистему, при наличии большого объёма памяти. Например, для 16ГБ ОЗУ подойдёт 400 тысяч виртуальных узлов (vnodes).
# sysctl kern.maxvnodes=400000 kern.maxvnodes: 100000 -> 400000 # echo 'kern.maxvnodes=400000' >> /etc/sysctl.conf
Для того чтобы во время простоя процессора экономить электричество, можно включить демон powerd. По-умолчанию, рабочая частота процессора установлена в максимальное значение.
# sysctl dev.cpu.0.freq dev.cpu.0.freq: 3600
При работающем powerd и при отсутствии нагрузки, частота процессора занижается данным демоном. По-умолчанию powerd управляет частотой процессора в адаптивном режиме. Включаем powerd при старте системы.
# vi /etc/rc.conf powerd_enable="YES" # /etc/rc.d/powerd start Starting powerd.
Чтобы узнать текущую частоту работы процессора, просматриваем sysctl-переменную dev.cpu.0.freq.
# sysctl dev.cpu.0.freq dev.cpu.0.freq: 200
В данном случае, сервер из-за простоя с максимальной частоты 3600 переключился на минимальную 200! Счета за электроэнергию станут меньше, если действительно большую часть времени серверные ресурсы не используются.
Если требуется, чтобы каждый раз при старте системы очищался раздел временных файлов /tmp, можно включить опцию clear_tmp_enable в rc.conf. При использовании FreeBSD в качестве рабочей станции, желательно эту опцию включать, но если система выполняет серверную роль - не всегда. Например, для хостинг-серверов эту опцию лучше не включать, потому что в /tmp как минимум могут храниться файлы пользовательские веб-сессии, которые могут «жить» и после перезагрузки сервера, а при включённой опции clear_tmp_enable они, как полагается, удалятся, что создаст пользователям некоторый дискомфорт. Так что, на вкус и цвет.
# echo 'clear_tmp_enable="YES"' >> /etc/rc.conf
При старте, прежде чем монтировать разделы, система проверяет все разделы на ошибки и на корректность размонтирования в предыдущем сеансе работы. По-умолчанию поведение системы различается:
# fsck -y
Добавим в rc.conf следующие директивы.
# echo 'fsck_y_enable="YES"' >> /etc/rc.conf # echo 'background_fsck="NO"' >> /etc/rc.conf
Первая строка указывает системе при старте и обнаружении ошибок запускать fsck с ключом » -y » (на все вопросы отвечать «Yes»).
Второй строкой background_fsck=«NO» мы запрещаем при незначительных ошибках запускать многопользовательский режим и в нём фоновую проверку, ведь это создаёт на дисковую подсистему большую нагрузку от background fsck и пользовательских процессов, работающих в многопользовательском режиме. Диск будет в итоге перегружен и все процессы будут медленно исполняться, «тормозить».
Что получаем в итоге. Система стартует, проверяет разделы. Если ошибок нет - загружается многопользовательский режим. Если есть хоть одна незначительная ошибка - fsck проверяет все сбойные разделы и только после этого загружает многопользовательский режим.
В случае отсутствия исходного кода системы, можно исходники установить через subversion. Собственно устанавливаем сам subversion.
# cd /usr/ports/devel/subversion # make install clean
Потом устанавливаем исходный код в /usr/src. Обращаем внимание на версию операционной системы в URL'е ниже.
# svn checkout https://svn0.us-west.freebsd.org/base/release/10.0.0 /usr/src
Искушённым рекомендуется установить на сервер дополнительные системные утилиты администрирования. Как минимум не будет лишним с ними познакомиться.