RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Для начала, я разобралась c sysutils/pkg_cutleaves, описанном на Richard Bejtlich's weblog. У Ричарда жуткая способность шагать в ногу с тремя моими любимыми предметами: FreeBSD, коллекцией портов и безопасностью.
Если вы используете portupgrade для поддержания ваших портов в актуальном состоянии, рекомендую добавить в ваш набор pkg_cutleaves. Этот интерактивный Perl-скрипт исследует вашу базу данных установленных портов на предмет "листьев", или программ, которые были установлены, как зависимости и уже не нужны. Это даёт вам возможность очищать ваш винчестер от программ, которые вам больше не нужны или от неиспользуемых, в связи с модернизацией, зависимостей.
После того, как вы собрали порт из /usr/ports/sysutils/pkg_cutleaves, потратьте минуту на чтение man pkg_cutleaves. Затем, выполните как superuser:
# pkg_cutleaves
Package 1 of 73:
AbiWord2-2.0.5 - An open-source, cross-platform WYSIWYG word processor
AbiWord2-2.0.5 - [keep]/(d)elete/(f)lush marked pkgs/(a)bort? k
** Keeping AbiWord2-2.0.5.
На этой конкретной системе, у меня есть 250 установленных портов, 73 из которых полностью независимы. pkg_cutleaves покажет каждый из них, делая паузу, чтобы я могла решить - оставить или удалить этот порт. Я решила сохранить AbiWord-2, равно как и 6 следующих портов, связанных с XFree86.
Package 8 of 73:
apache-ant-1.6.1 - Java- and XML-based build tool, \
conceptually similar to make
apache-ant-1.6.1 - [keep]/(d)elete/(f)lush marked pkgs/(a)bort? d
** Marking apache-ant-1.6.1 for removal.
Тем не менее, я решила удалить apache-ant поскольку он остался как память о давно удаленном приложении, чьей зависимостью он являлся. Я буду продолжать, пока не приму решение по всем 73 портам. Когда я закончу, pkg_delete выполнит удаление выбранных приложений. В этом примере я решила удалить 25 портов:
Package 73 of 73:
zip-2.3_1 - Create/update ZIP files compatible with pkzip
zip-2.3_1 - [keep]/(d)elete/(f)lush marked pkgs/(a)bort? k
** Keeping zip-2.3_1.
Deleting apache-ant-1.6.1 (package 1 of 25).
---> Deinstalling 'apache-ant-1.6.1'
[Updating the pkgdb <format:bdb1_btree> in /var/db/pkg ... - 250
packages found (-1 +0) (...) done]
Когда удаление будет завершено, pkg_cutleaves еще раз пройдётся по базе данных установленных портов, чтобы выяснить, не появились ли новые "листья":
Go on with new leaf packages ((y)es/[no])? y
Этот процесс будет продолжаться, пока я не покончу со всеми "листьями". После этого он подведёт итог модификации пакетов:
Didn't find any new leaves, exiting.
** Deinstalled packages:
apache-ant-1.6.1
<snip>
** Number of deinstalled packages: 53
Когда вы запустите pkg_cutleaves в следующий раз, он снова спросит вас о портах, которые вы хотите сохранить. В моём примере это были AbiWord2 и несколько портов XFree86. Если вы знаете, что хотите сохранить, и вас раздражает необходимость подтверждать это каждый раз, создайте файл /usr/local/etc/pkg_leaves.exclude, содержащий имена портов, которые требуется сохранить:
AbiWord2
XFree86
Не забудьте включить ключ x (исключение):
% pkg_cutleaves -x
Эта команда указывает pkg_cutleaves прочитать файл исключений. Для тех случаев, когда вы не хотите использовать файл исключений, просто не используйте этот ключ.
Улучшим Fortunes
Следующий порт для тех, кому нравится юмор в стиле BOFH (Bastard Operator From Hell - Адский Ублюдок Сисадмин - прим. переводчика; незаконнорожденный оператор из древнегерманской преисподней - это круто, прим. редактора:-)). Если шутки в стиле юмора забавляют вас, добавьте к своим fortunes BOFH-стиль, установив /usr/ports/misc/fortune-mod-bofh.
После установки, попробуйте его:
% fortune /usr/local/share/games/fortune/bofh
BOFH excuse #419:
overflow error in /dev/null
Если вы хотите, чтобы эти шутки случайным образом появлялись вместе с другими fortunes, скопируйте их как superuser в системную fortunes-директорию:
После копирования BOFH файлов, можете попробовать стиль BOFH в fortune набрав:
% fortune bofh
Это намного короче, чем предыдущее заклинание.
Ну и наконец, если вы фанат Futurama, повторите вышеописанное, для порта /usr/ports/misc/fortune-mod-futurama:
% cd /usr/ports/misc/fortune-mod-futurama
% make install clean
% cp /usr/local/share/games/fortune/futurama* /usr/share/games/fortune/
% exit
% fortune futurama
Fry: I want to see the edge of the universe.
Amy: Ooh, that sounds cool.
Zoidberg: It's funny. You live in the universe but you
never do these things 'til someone comes to visit.
Эта забава заставила меня поискать fortunes по Дугласу Адамсу. Быстрый поиск в Google навёл меня на fortune-hitchhiker project. Скачиваем fortune-hitchhiker.tgz, затем:
% tar xzvf fortune-hitchhiker.tgz
% cp fortune-hitchhiker/hitchhiker* /usr/share/games/fortune
% exit
% fortune hitchhiker
"'You know,' said Arthur, 'it's at times like this, when
I'm trapped in a Vogon airlock with a man from Betelgeuse,
and about to die from asphyxiation in deep space that I
really wish I'd listened to what my mother told me when I
was young.'
'Why, what did she tell you?'
'I don't know, I didn't listen.'"
-- Arthur coping with certain death as best as he could.
Возможно, другие фаны "Путеводителя по Галактике..." добавят его в коллекцию портов, что даст мне возможность обнаружить его на FreshPorts.
От переводчика:существует и порт ru-fortunes. Я могу ошибаться, но по-моему там была коллекция анекдотов. Честно говоря, меня этот порт не вдохновил... А вот от перевода fortune-hitchhiker'а я бы не отказался...
Получение подлежащих и согласование глаголов
Следующий порт заинтриговал меня, поскольку был назван как один из любимых литературных героев моего детства:
# cd /usr/ports/textproc/queequeg
# make install clean
Этот порт установит qq - скрипт на Python'е, который может работать с любыми текстовыми, LaTeX, или HTML файлами, примерно так:
% qq filename
Queequeg project все еще на этапе бета-версии. Его цель - помочь автору, для которого английский язык не родной, правильно согласовывать времена, склонять глаголы и т.п. В настоящий момент разработчики всё еще дорабатывают фильтрацию некорректного определения правильных форм, так что результат всё ещё может быть огорчительным для тех, кто не в ладах с английской грамматикой. Что ж, если английская грамматика - ваш конёк и вы располагаете свободным временем, проект ищет экспертов. Когда этот проект перерастёт стадию бета-версии - он будет отличным подспорьем для неанглоязычных разработчиков в нелёгком деле написания man-ов на английском языке.
Укрепляем безопасность системы
Последний порт, который я хотела бы продемонстрировать, я нашла в /usr/ports/security/lockdown. Сначала я отнеслась к нему скептически, поскольку утверждалось, что порт является сценарием, укрепляющим безопасность системы FreeBSD. Я настороженно отношусь к таким утверждениям, поскольку улучшение безопасности системы явно не попадает в категорию один-размер-подходит-всем.
Однако, Daniel Blankensteiner проделал отличную работу по созданию полностью настраиваемого сценария, позволяющего вам использовать различные варианты заказных конфигураций. Администратор может легко создать несколько файлов настроек для каждой из своих систем. Легко использовать не только конфигурационные файлы, так же легко просмотреть полную запись изменений, внесённых в свежеустановленную или обновлённую систему.
После установки порта, познакомьтесь с ним поближе, для чего используйте man lockdown -- это собрание различных опций конфигурации, содержащихся в конфигурационном файле скрипта.
Замечание: Если вы планируете создать конфигурационные файлы для нескольких систем, включите hostname системы в имя копируемого файла конфигурации. Таким образом, вы можете централизованно хранить множество файлов настроек в одном месте. Затем, когда вы будете использовать утилиту lockdown, вы сможете выбрать предпочтительный файл конфигурации, определяя его по имени и используя ключ -f.
Скопируйте файл и откройте его в своём любимом редакторе. вы обнаружите, что он хорошо задокументирован и снабжен множеством примеров, укрепляющих вас в намерении немедленно приступить. К примеру, эта секция ужесточает /etc/fstab для более защищенного монтирования ваших разделов:
####################
# Mounting options #
####################
# If the mount point exists, mount it with the specified options.
# Please remember that /tmp has to be executable to "make world"
# and if you need to jail a process in a partition, don't mount it with
"nodev"
mount /tmp rw,noexec,nosuid,nodev,nosymfollow
mount /var/tmp rw,noexec,nosuid,nodev,nosymfollow
mount /home rw,noexec,nosuid,nodev
mount /usr/home rw,noexec,nosuid,nodev
mount /var rw,nosuid,nodev
mount /var/mail rw,noexec,nodev,nosuid
Если вы впервые сталкиваетесь с этими опциями монтирования, взгляните на раздел секции -o на странице man mount. Также для определения опций, наиболее подходящих для вашей системы, весьма полезным окажется ресурс FreeBSD Security How-To:
Следующий раздел позволяет вам установить опции /etc/rc.conf а также даёт несколько идей - с чего начать. Смотрите man rc.conf для определения каждой опции.
########################
# /etc/rc.conf options #
########################
# This will just add some options to /etc/rc.conf
rc_conf enable_sendmail="NONE"
rc_conf kern_securelevel_enable="YES"
rc_conf portmap_enable="NO"
rc_conf inetd_enable="NO"
rc_conf kern_securelevel="3"
rc_conf clear_tmp_enable="YES"
#rc_conf update_motd="NO"
rc_conf syslogd_flags="-ss" # Comment this if this is a
# log server (or change it)
Следующий раздел позволит вам создать скрытый сервер:
##################
# Stealth server #
##################
# If this is a log server, firewall or gateway you can put it into
# stealth mode.
# This is NOT recommended for normal server use.
# Note: For a stealthier server you should also block some icmp request
# like:
# Echo, Time and Netmask requests
#rc_conf tcp_drop_synfin="YES"
#sysctl net.inet.tcp.blackhole=2
#sysctl net.inet.udp.blackhole=1
#kern options IPSTEALTH
#kern options TCP_DROP_SYNFIN
Securing FreeBSD освещает эти и многие последующие опции более детально.
Следующий раздел посвящен настройке различных сетевых конфигураций:
##############
# Root Login #
##############
allow_direct_root_login NO # Set tty* in /etc/ttys to
# insecure
password_protect_singleuser_mode YES # Set console to insecure
# in /etc/ttys
Теперь пользовательские настройки:
#####################
# Restrict the user #
#####################
allow_cron NO
allow_at NO
sysctl security.bsd.see_other_uids=0 # Use kern.ps_showallprocs
# for 4.X
Как обычно - опции ядра:
##################
# Kernel options #
##################
kern options SC_NO_HISTORY # Don't keep history,
# so there can't be scrolled
kern options SC_DISABLE_REBOOT # Disable ctrl+alt+del
#kern options SC_DISABLE_DDBKEY # Uncomment if using the
# kernel debugger
Наконец, целый раздел о разрешениях и флагах файлов:
#################################
# Restrict access to suid files #
#################################
# If you want /somefile to have:
# Permissions 0000
# User root
# Group wheel
# Flags uappnd and schg
# Just write:
# file /somefile p: 0000 u: root g: wheel f: uappnd,schg
file /bin/rcp p: disable file /sbin/mksnap_ffs p: noWorld
file /sbin/ping p: noWorld <snip long list of files>
################################
# Restrict access to gid files #
################################
file /usr/bin/fstat p: noWorld
file /usr/bin/netstat p: noWorld
file /usr/bin/vmstat p: noWorld
file /usr/bin/wall p: noWorld
file /usr/bin/write p: noWorld
file /usr/bin/lpq p: noWorld
file /usr/bin/lpr p: noWorld
file /usr/bin/lprm p: noWorld
file /usr/libexec/sendmail/sendmail p: noWorld
file /usr/sbin/trpt p: noWorld
file /usr/sbin/lpc p: noWorld
########################################
# Restrict access to information files #
########################################
# if you change permissions on files also
# listed in /etc/newsyslog.conf,
# Lockdown will also adjust /etc/newsyslog.conf accordingly
file /sbin/sysctl p: noWorld
file /usr/bin/uname p: noWorld
file /sbin/kldstat p: noWorld
#file /usr/bin/netstat p: noWorld #Uncomment if using 4.X
file /sbin/route p: noWorld
<snip long list of files>
Меня очень порадовала полнота файла и то, как легко внести свои изменения. Если вы хотите предложить новые секции для добавления в файл, Daniel всегда открыт для предложений. Контактная информация находится на его сайте.
Вывод
Я также открыта для предложений. Пишите мне о том, какие темы вы хотели бы увидеть в будущих статьях этой серии. Если у вас есть идея относительно освещения какого-либо порта или свойства FreeBSD - сообщите мне.
Ну и наконец, если вы живёте в Северной Америке, отметьте 13-16 майские числа в своём календаре и проверьте, сможете ли вы приехать в Оттаву, Онтарио, Канада. Да-да, надвигается BSDCan и на нем будет много докладчиков. Это ваш шанс встретиться с другими пользователями FreeBSD, увидеть лицом к лицу людей, чьи имена вы наверняка видели на сайте и в почтовых рассылках FreeBSD. Я буду заведовать регистрационным столом, и надеюсь увидеть вас там. Мы также попытаемся к тому времени отпечатать BSD Hacks.