library.gif (3490 bytes)
 
 
 
 
 
 

FreeBSD глазами администратора

Иван Паскаль


 






1. Перегенерация ядра системы (kernel).
2. Файл конфигурации (мои комментарии к LINT).
3. Добавление компонент из дистрибутива.
4.  Работа администратора с user account.
5.  Приложения.
 



 


1. Перегенерация ядра системы (kernel)


 






1.1 Зачем нужно перегенерировать ядро (kernel)?
1.2 Как перегенерировать ядро системы?
1.2.1  Разворачивание исходников.
1.2.2  Составление конфигурационного файла.
1.2.3  Подготовка к генерированию
1.2.4  Трансляция (собственно само генерирование) ядра
1.2.5  Установка нового ядра и Перезагрузка
1.2.6  Замечание по поводу драйверов устройств.

1.1 Зачем нужно перегенерировать ядро (kernel)?

При инсталяции FreeBSD у вас появится в системе ядро, которое вполне работоспособно. Зачем его переделывать ? Дело в том, что это ядро (так называемая GENERIC конфигурация) как раз предназначена для того, чтобы система успешно развернулась на "железе" любой конфигурации (из поддерживаемых, конечно). В эту конфигурацию встроена поддержка ВСЕХ типов накопителей (HDD и CD) и ВСЕХ сетевых карт, которые на данный момент поддерживаются FreeBSD. Это вполне логично - вы должны иметь возможность поставить свой Unix и дополнительные программы на тот HDD, который имеется у вас в машине и суметь войти в сеть, какой бы сетевой карточкой вы ни пользовались. В то же время, в ядро не включены некоторые полезные модули, которые могут вам понадобится в дальнейшем, особенно, если вы хотите использовать вашу машину в качестве сервера. (Например - поддержка firewall, PPP-сервера, bpf и т.п.). Итак. Перегенерировать ядро стоит для того чтобы :
- убрать все лишнее (драйверы устройств, которых у вас нет);
- добавить то, чего не хватает.
Первое позволит вам ускорить загрузку (так как система не будет тратить время на поиск и тестирование несуществующих в вашей машине устройств) и сэкономить место в ОЗУ, занимаемое ядром. Ну, а без второго, скорее всего, вы не сможете решить свои задачи :).

1.2  Как перегенерировать ядро системы?

В общем виде этот процесс выглядит так:
- развернуть исходники ядра (я обычно заказываю их в процессе инсталяции, но если вы этого не сделали, то можно добавить их "вручную");
- составить свою конфигурацию (конфигурационный файл);
- запустить программу config, которая создаст необходимые файлы *.h и *.c в соответствии с вашей конфигурацией;
- скомпилировать новое ядро с помощью программы make;
- установить новое ядро на место;
- перезагрузиться. Теперь более подробно.

1.2.1  Разворачивание исходников.

Прежде всего посмотрите в директорию /usr/src/sys если она не пустая, то все что вам нужно уже на месте. И вы можете спокойно перейти к следующему пункту. В противном случае, вам надо взять из дистрибутива нужные файлы и установить их. Как это сделать описано в "Добавление компонент из дистрибутива".  Не забудьте, что вам в данном случае необходима только та их часть, которая называется sys.

1.2.2  Составление конфигурационного файла.

Перейдите в директорию /usr/src/sys/i386/conf. Здесь имеются два конфигурационных файла GENERIC и LINT. Первый представляет собой конфигурацию того ядра, которое установилось у вас при инсталяции системы. Вы можете посмотреть там - что в данный момент может ваше ядро.Второй же файл представляет собой скорее описание всех возможных элементов конфигурационного файла, чем реальную конфигурацию. Если вы попытаетесь построить ядро в такой конфигурации, оно, скорее всего даже не будет работать. Во всяком случае, памяти "отожрет" по максимуму :). Вам необходимо составить свой файл. Его название значения не имеет. Можете назвать его MyConfig или MyComputer. Я обычно даю ему то же название, что и доменное имя машины. В качестве основы для нового файла вы можете использовать один из уже имеющихся файлов - GENERIC или LINT. Если вы возьмете за основу GENERIC, то вам придется убрать оттуда описания всех лишних устройств и дописать необходимые вам options. Если же вы возьмете за основу LINT, то все редактирование будет заключаться в удалении всего ненужного. Однако, это может оказаться весьма утомительным занятием. Итак. Скопируйте один из имеющихся конфигов

cp GENERIC MyConfig
или
cp LINT MyConfig

И подправьте его любым текстовым редактором. Hint: Если вы не успели еще поставить никакого текстового редактора "с человеческим лицом", можно использовать редактор ee, который у вас наверняка уже стоит. Он довольно простой, но вполне полноценный экранный редактор.Как я уже сказал, основным "мануалом" по составлению новой конфигурации служит файл LINT. Причем, там должны быть описаны самые "свежие" options, которые появились в той версии, которую вы ставите, и еще не описаны в других "мануалах". (К сожалению, "должны быть" и "есть" - не одно и то же.) На всякий случай я попытался написать свои "Комментарии к config файлу".

1.2.3  Подготовка к генерированию

После того, как вы закончили редактировать свою конфигурацию (пусть она называется MyConfig, например), наберите команду

config MyConfig

Она создаст в директории /usr/src/sys директорию compile/MyConfig (о чем и сообщит вам в конце своей работы) и поместит туда файлы, необходимые для компиляции ядра.

1.2.4  Трансляция (собственно само генерирование) ядра

Перейдите в директорию /usr/src/sys/compile/MyConfig и наберите команду

make

она сделает все что нужно.
Учтите, что kernel - достаточно сложная программа, поэтому ее компиляция потребует довольно много времени. От 15-20 минут на Pentium'е до часа, на 386 процессоре. Если в процессе компиляции обнаружатся фатальные ошибки, придется пересмотреть свой конфиг, исправить его и повторить пункты 1.2.3 - 1.2.4. (У меня такие случаи были, когда я попросил некоторые опции, возможные только для Pentium, забыв указать в начале файла, что хочу поддержку процессора i586)

1.2.5   Установка нового ядра и Перезагрузка

После того, как компиляция ядра успешно завершилась наберите комманду

make install

она переименует старое ядро в kernel.old и поместит в корневую директорию ваш новый kernel. После этого можно (и нужно) перегрузить компьютер. Если загрузка нового ядра не получилась (такое тоже возможно), вы можете загрузится со старым ядром. Для этого, в начале загрузки на подсказку Boot: надо быстро сказать kernel.old. Естественно, после этого надо снова вернуться к редактированию вашей конфигурации и повторить все последующие пункты. Только не торопитесь. Если новое ядро опять окажется неработоспособным, вы можете попасть в неприятную ситуацию, так как после очередного "make install" -

kernel.old - предыдущая неработающая версия kernel
kernel - новая, столь же бесполезная.

Конечно, если вы не пожалели места на диске, у вас должен был остаться в корневой директории файл kernel.GENERIC и вы можете всегда загрузить его. Однако, в остальных случаях он не нужен, поэтому я, например, его обычно удаляю. А чтобы при этом не попасть в вышеописаную ситуацию, можно переименовать пока еще работающий kernel.old в kernel.work или kernel.original и продолжать свои эксперименты. Во всяком случае, у вас всегда останется по крайней мере один "загружабельный" вариант ядра.

1.2.6  Замечание по поводу драйверов устройств.

Если вы добавили в конфигурации ядра устройства (реальные или pseudo-device), возможно потребуется создать для них файлы-устройства в директории /dev. Какие-то общие рекомендации по этому поводу дать трудно, поскольку это зависит от того - какие устройства вы добавляли в конфиг-файл, а их много разных. Во всяком случае, если вы знаете какого файла (в /dev) не хватает, его можно создать с помощью программки MAKEDEV, которая лежит в той же /dev. Это даже не программа, а командный файл, в начале которого есть коментарии, в которых более-менее подробно описаны возможные аргументы (имена устройств) для MAKEDEV.  И еще, поскольку, /dev наверняка не прописана в вашем PATH, запускать ее нужно /dev/MAKEDEV ... , или, если вы находитесь в самой директории /dev, то ./MAKEDEV ...



 


2. Файл конфигурации (мои комментарии к LINT)


 






Это мои комментарии к файлу LINT из исходников FreeBSD 2.2.1. Я выкинул из него наиболее экзотические опции. Которые, обычно, сопровождаются комментариями типа - "не работает и оставлено только для тех, кому будет интересно там покопаться и пофиксить баги" или просто "пока не работает". Я, также, выкинул те строчки, смысл которых не знаю и, следовательно, ничего умного сказать о них не могу. Если вам интересно - читайте оригинальный LINT или ищите разъяснения на www.freebsd.org

2.1  Общие определения.
2.1.1  machine "i386"
2.1.2  cpu "I386_CPU"
2.1.3  cpu "I486_CPU"
2.1.4  cpu "I586_CPU"
2.1.5  cpu "I686_CPU"
2.1.6  ident LINT
2.1.7  maxusers 10
2.1.8  options "CHILD_MAX=128"
2.1.9  options "OPEN_MAX=128"
2.1.10  options MATH_EMULATE
2.1.11  options GPL_MATH_EMULATE
2.1.12  options FAILSAFE
2.1.13  options INCLUDE_CONFIG_FILE
2.1.14  config kernel root on wd0 dumps on wd0
В оригинальном LINT на этом первый раздел и заканчивается. Но, по смыслу, в этом же разделе должны быть еще опции:
Из раздела HARDWARE:
2.1.15  options "MAXMEM=(128*1024)"
из раздела DEBUGGING:
2.1.16  options USERCONFIG
2.1.17  options USERCONFIG_BOOT
2.1.18  options VISUAL_USERCONFIG

2.2  NETWORKING OPTIONS
2.2.1  options INET
2.2.2  options IPX
2.2.3  options "IPXPRINTFS=0"
2.2.4  options "IPX_ERRPRINTFS=0"
2.2.5  options NETATALK
[Здесь в оригинальном LINT еще идут опции для других сетевых протоколов (X.25, Xerox NS и т.п.), но с пометкой, что они не работают и не поддерживаются командой разработчиков. Поэтому, я их пропускаю.]
2.2.6  Network interfaces:
2.2.7  pseudo-device loop
2.2.8  pseudo-device ether
2.2.9  pseudo-device fddi
2.2.10  pseudo-device sl
2.2.11  pseudo-device ppp
2.2.12  pseudo-device sppp
2.2.13  pseudo-device bpfilter
2.2.14  pseudo-device disc
2.2.15  pseudo-device tun
2.2.16  Internet family options:
2.2.17  options "TCP_COMPAT_42"
2.2.18  options MROUTING
2.2.19  options IPFIREWALL
2.2.20  options IPFIREWALL_VERBOSE
2.2.21  options "IPFIREWALL_VERBOSE_LIMIT=100"
2.2.22  options IPDIVERT
2.2.23  options TCPDEBUG

2.3  FILESYSTEM OPTIONS
2.3.1  "Реальные" FS
2.3.1.1  options FFS
2.3.1.2  options "CD9660"
2.3.1.3  options MSDOSFS
2.3.1.4  options MFS
2.3.1.5  options "MFS_ROOT=10"
2.3.1.6  options MFS_AUTOLOAD
2.3.1.6  options LFS
2.3.1.7  options NFS
2.3.1.8  options NQNFS
2.3.1.9  options NFS_NOSERVER
2.3.1.10  options "EXT2FS"
2.3.2  "Специальные" FS.
2.3.2.1  options PROCFS
2.3.2.2  options KERNFS
2.3.2.3  options FDESC
2.3.2.4  options PORTAL
2.3.2.5  options DEVFS
2.3.3  "Вспомогательные" FS.
2.3.3.1  options UNION
2.3.3.2  options UMAPFS
2.3.3.3  options NULLFS
2.3.4  Некоторые опции, имеющие отношение к файловым системам.
2.3.4.1  options "NSWAPDEV=20"
2.3.4.2  options QUOTA
2.3.4.3  options NULLFS_DIAGNOSTIC
2.3.4.4  options KERNFS_DIAGNOSTIC
2.3.4.5  options UMAPFS_DIAGNOSTIC
2.3.4.6  options UNION_DIAGNOSTIC

2.4  MISCELLANEOUS DEVICES AND OPTIONS
2.4.1  pseudo-device pty
2.4.2  pseudo-device speaker
2.4.3  pseudo-device log
2.4.4  pseudo-device gzip
2.4.5  pseudo-device vn
2.4.6  pseudo-device snp
2.4.7  pseudo-device ccd
 
 

2.1  Общие определения.

machine "i386"

Говорит о том, что архитектура процессора из семейства Intel 386.
Обязательный параметр.

cpu "I386_CPU"
cpu "I486_CPU"
cpu "I586_CPU" # aka Pentium(tm)
cpu "I686_CPU" # aka Pentium Pro(tm)

"Подстройка" под конкретный тип процессора. Можно оставить только тот тип, который у вас реально стоит. Однако, если вы в дальнейшем захотите поменять процессор, или просто перетащить винчестер в машину с другим CPU, то могут возникнуть проблемы. Во всяком случае - ничего страшного не произойдет, если вы оставите здесь несколько разных строчек.
Обязательно должна быть хотя бы одна из этих строчек.

ident LINT

Это собственно имя конкретной конфигурации ядра. Можно поставить такое же, как название конфигурационного файла (MyConfig - например). Но строчка должна быть обязательно.

maxusers 10

Вообще-то по смыслу - это максимальное количество юзеров, одновременно работающих на машине. Однако, исходя из этого количества вычисляется размер некоторых таблиц в ядре (количество одновременно работающих процессов, количество открытых файлов, количество буферов памяти и т.п.). Подробнее можно посмотреть в файле /usr/src/sys/conf/param.c Поэтому, даже если на вашей машине и не планируется много юзеров, но вы собираетесь запускать одновременно много приложений (сервер ftp, http, mail'овый, базы данных и т.п.), лучше сделать это число побольше.
Естественно, этот параметр - обязательный.

options "CHILD_MAX=128"

Максимальное число "порожденных" процессов, которых может создать "родительский" процесс. По умолчанию - 40. Некоторые программы могут захотеть больше. (В оригинальном LINT в качестве примера
приводится news-сервер, который открывает "процесс-потомок" для каждого клиента, который "прийдет"
почитать ньюсы. Если таких пользователей прийдет достаточно много одновременно, то "процессов-потомков" может не хватить). Короче, если обнаружите, что какая-либо задача сообщает, что не может "породить" дополнительный процесс - скорее всего надо менять этот параметр.

options "OPEN_MAX=128"

Максимальное число файлов, которых может открыть одновременно один процесс. По умолчанию - 64. Некоторые программы могут захотеть больше. Если какая-либо программа сообщает, что у нее "слишком много файлов" открыто - имеет смысл поменят этот параметр.

options MATH_EMULATE #Support for x87 emulation
options GPL_MATH_EMULATE #new math emulator

Включить в ядро код для эмуляции математического сопроцессора. Эти опции включают два разных эмулятора, поэтому нужна только одна из них. Если у вас встроен реальный сопроцессор (что скорее всего), то эмуляторы вам не нужны. В противном случае эта строчка должна быть обязательно.

options FAILSAFE

Включает в ядро дополнительные проверки в критических местах. Естественно, уменьшается скорость некоторых операций, но повышается надежность. Реально эта опция используется сейчас только в одном месте (по-моему) - в драйвере PCI-SCSI-контроллера. Но, возможно, в дальнейшем она может встретиться в других частях ядра.
Короче, скорее всего, не нужна.

options INCLUDE_CONFIG_FILE # Include this file in kernel

Включить этот конфиг-файл внутрь ядра. Если вы потеряеете конфиг, то сможете достать его из самого файла kernel :-). Скорее всего, это лишнее.

config kernel root on wd0 dumps on wd0

Эта строчка задает несколько параметров, важных при загрузке системы.

Последнюю часть (dumps on ...) рекомендуют здесь не задавать, а пользоваться командой dumpon (см man dumpon).

Кроме того, заметьте, что wd0 - драйвер IDE-винчестеров. Если у вас SCSI-винчестер, то это слово нужно поменять на sd0. Ну и, возможно, номер винчестера у вас будет не 0.
Но строчка должна быть обязательно.

options "MAXMEM=(128*1024)"

Размер оперативной памяти машины.
Вообще-то, этот параметр читается при загрузке из BIOS, однако стандартная функция, считывающая из BIOS этот параметр ограничивает возможное значение числом 64M (а "расширенный" вариант этой функции разработчики не используют для экономии места в коде загрузчика).
Поэтому, если у вас размер ОЗУ больше 64M, то его надо указать явно в конфиге.

options USERCONFIG #boot -c editor

Включить в ядро "-editor" - редактор конфигурации "железа". Этот редактор можно вызвать при загрузке, введя на приглашение "Boot:" ключ . Редактор позволяет поменять для устройств базовый адрес, номер прерывания (irq) и флаги (если они есть). Кроме того, можно вообще исключить устройство из списка поддерживаемых ядром (естественно, код соответствующего драйвера в ядре останется, но устройство не будет проверяться при старте и, соответственно, не будет доступно при работе). Если вы не собираетесь менять "железную" конфигурацию машины, то этот редактор вам не очень-то нужен. Если вы правильно зададите все параметры в разделе HARDWARE, то все будет работать. Включать его в ядро имеет смысл, если вы собираетесь в ближайшем будущем добавлять новые "карточки" в машину. Только не забудьте включить все соответствующие драйвера в ядро (в разделе HARDWARE), так как этот редактор сам поддержку в код ядра, естественно, не добавляет.

options USERCONFIG_BOOT #imply -c and parse info area

Если в ядро включен "-c editor" (предыдущая опция), то эта строчка заставляет его запускаться всегда при загрузке, не не дожидаясь от вас соответствующего ключа. (Если вы сами инсталлировали систему, то, наверняка, уже видели - как это выглядит :-).
В нормальной работе - совершенно лишнее.

options VISUAL_USERCONFIG #visual boot -c editor

Если включен "-c editor", эта строчка добавляет его "visual" версию, которая намного приятнее и удобнее, чем старый вариант "командной строки".
Если уж вы решили включить в ядро "-с редактор", то с этой опцией конечно будет лучше.

2.2  NETWORKING OPTIONS

Здесь все, что относится к поддержке сети (кроме драйверов самих "железных" сетевых карт).

options INET #Internet communications protocols

Включает в ядро поддержку TCP/IP.
Скорее всего, вам это необходимо.

options IPX #IPX/SPX communications protocols

Поддержка IPX. Насколько вам это нужно решайте сами. В настоящее время в FreeBSD есть только маршрутизатор IPX. Ни серверной, ни клиентской программы для сетей Novell NetWare (где в основном и используется IPX) в FreeBSD нет. (Вообще-то, "софт" для сетей Novell NetWare под FreeBSD существует в виде коммерческого продукта - http://www.netcon.com/. Но он "родной" поддержкой IPX не пользуется и, соответственно, эта опция к нему отношения не имеет.) Не забудьте, что FreeBSD понимает (на ethernet) только фреймы Ethernet_II.

options "IPXPRINTFS=0" #IPX/SPX Console Debugging Information

При включенной поддержке IPX определяет - выводить ли сообщения (через syslogd) о каждом "отфорварденом" IPX пакете (1 - выводить, 0 - нет).
По умолчанию этот параметр - 1. Так что, для подавления лишней диагностики желательно эту опцию включить.

options "IPX_ERRPRINTFS=0" #IPX/SPX Console Debugging Information

При включенной поддержке IPX определяет - выводить ли сообщения об ошибках при работе с IPX пакетами (1 - выводить, 0 - нет).
По умолчанию этот параметр - 0. Так что, в таком виде эта опция особого смысла не имеет, а вот для того, чтобы включить эту диагностику, вставте эту опцию, заменив 0 на 1.

options NETATALK #Appletalk communications protocols

Ничего, кроме того, что в комментарии, сказать не могу.

Network interfaces:

pseudo-device loop #Network loopback device

"Драйвер" loopback интерфейса. Используется во многих ситуациях.
Поэтому, это устройство должно быть обязательно.

pseudo-device ether #Generic Ethernet

Общие подпрограммы для всех ethernet'овских драйверов (независимо, какая карточка у вас стоит). Количество "псевдо-девайсов" значения не имеет (даже если у вас несколько ethernet'ов). Поэтому, если у вас используется хоть какой-нибудь ethernet-адаптер, эта строчка должна быть обязательно.

pseudo-device fddi #Generic FDDI

Общие подпрограммы для всех fddi драйверов. Если у вас какая-либо fddi карта, эта строчка обязательна.

pseudo-device sl 2 #Serial Line IP

Драйвер SLIP (протокол для передачи IP через COM-порт и, соответственно, через модем).
Естественно, у вас должны быть включены драйверы для COM-портов (в разделе hardware). Эта строчка только определяет - сможете ли вы на них использовать SLIP. Количество "псевдо-девайсов" в данном случае важно, именно столько SLIP-коннектов вы сможете поддерживать одновременно (лучше всего их иметь столько, сколько у вас COM-портов).
Подробнее - man sl.

pseudo-device ppp 2 #Point-to-point protocol

Драйвер PPP (как и SLIP это протокол для передачи IP через COM-порт).
Комментарии те же, что и для "pseudo-device sl" (заменяя SLIP на PPP :-).
Подробнее - man 4 ppp.

pseudo-device sppp #Generic Synchronous PPP

Драйвер PPP для синхронных последовательных каналов.
Нужен в том случае если у вас есть специальная карточка (ar,cx,sr).

pseudo-device bpfilter 4 #Berkeley packet filter

Это драйвер для программ, которые "подсматривают" траффик через какой-нибудь сетевой интерфейс (tcpdump и т.п.). Кстати, этот драйвер может потребоваться и другим программам (например, DHCP-серверу).
Подробнее - man bpf.
Полезно их иметь (и побольше :-).

Важное замечание!
Поскольку через этот "девайс" соответствующие программы могут просматривать содержимое пакетов, "пробегающих" по сети, юзер, запустивщий программу, может подсмотреть чужие пароли, содержимое "пролетающих" писем, файлов и т.п. Поэтому, bpfilter может оказаться не только полезной "фичей", но и опасной. К счастью, по умолчанию, соответствующие устройства /dev/bpf* доступны для чтения только root'у.
Так вот. Не надо менять права доступа к этим устройствам. Будет лучше, если "рядовые юзеры" не смогут ими воспользоваться.

pseudo-device disc #Discard device

Это устройство аналогично устройству null для файлов. То есть в него можно посылать пакеты "в никуда". Включено в систему для тестов.
В реальной работе вещь практически бесполезная. Можно выкинуть.

pseudo-device tun 1 #Tunnel driver(user process ppp)

Это устройство используется только программой ppp (смотри man 8 ppp).
Если вы этой программой не пользуетесь (не путайте ее с pppd), то и устройство вам не нужно.

Internet family options:

options "TCP_COMPAT_42" #emulate 4.2BSD TCP bugs

Нужна только для совместимости с очень старой реализацией TCP протокола (на других машинах).
Скорее всего, вам она не нужна.

options MROUTING # Multicast routing

Вставляет в ядро поддержку маршрутизации пакетов с multicast адресами.
Обратите внимание, эта опция нужна только если вы собираетесь маршрутизировать (пропускать через свою машину из одной подсетки в другую) такие пакеты с помощью mrouted (смотри man mrouted). Для того, чтобы ваша машина могла принимать и посылать multicast-пакеты, эта опция НЕ нужна. Короче, вам она врядли понадобится.

options IPFIREWALL #firewall

Поддержка FireWall. В данном случае это означает включение в ядро фильтра для IP пакетов, который может выборочно запрещать/разрешать прохождение через сетевые интерфейсы определенных пакетов (в зависимости от адреса "кому" или "от кого", номера TCP-порта и т.п.). Кроме того, этот модуль может считать количество пакетов (прошедших или, наоборот, задержанных). Сами правила (кого куда пускать/не пускать) задаются с помощью программы ipfw (можете почитать man ipfw). Важное замечание: в последних версиях FreeBSD, если FireWall включен в ядро, по умолчанию все пакеты запрещаются. Поэтому, не забудьте сразу же настроить этот firewall в файле /etc/rc.firewall и указать, что он у вас есть, в файле /etc/sysconf (или /etc/rc.conf).

options IPFIREWALL_VERBOSE #print information about dropped packets

Добавляет в модуль FireWall вывод сообщений (через syslogd) о каждом "загубленном" пакете.
Скорее всего, это лишнее.

options "IPFIREWALL_VERBOSE_LIMIT=100" #limit verbosity

Если вы включили опцию IPFIREWALL_VERBOSE, то эта строчка ограничивает количество сообщений. Будут выводится только первые 100 (в данном примере). После этого сообщения прекратятся.
Наверное, с этой опцией будет лучше.

options IPDIVERT #divert sockets

Эта опция добавляет к FireWall еще возможность некоторые IP-пакеты "заворачивать" на дополнительную обработку в прикладные программы (основные проверки делаются в ядре). С помощью этого механизма вы можете писать свои программы, которые смогут выполнить более сложную фильтрацию пакетов или даже их преобразование (NAT, тунель IP в IP, и т.п.). Кстати, NAT-демон, использующий этот механизм уже существует.
Подпробнее man divert.
Вещь полезная, если, конечно, вы знаете, что с ней делать :-).

options TCPDEBUG

Включает в подпрограммы TCP дополнительный код для диагностики. Похоже, нужна только разработчикам.

2.3  FILESYSTEM OPTIONS

Этот раздел определяет - поддержка каких файловых систем будет включена в ядро. Обратите внимание, если вы не включите поддержку какой-либо FS, это еще не означает, что вы не сможете ей воспользоваться. Некоторые из модулей поддержки FS оформлены в виде lkm(загружаемые модули ядра) и могут "подстыковываться" к ядру по мере необходимости во время работы. Однако, некоторые из типов FS не имеют таких загружаемых модулей и, поэтому, их поддержка должна быть "встроена" в ядро (если, конечно, она вам нужна).И, кроме того, обязательно встраивать в ядро поддержку той FS, с которой будет грузиться ваша система (где находятся /, /usr и /tmp). Обычно, это FFS. Но, если вы, например, собираетесь делать систему загружаемую по сети (типа discless station), то необходимо включить в ядро поддержку NFS (Network File System), хотя в других случаях она может подгружаться во время работы.

"Реальные" FS

Это обычные файловые системы, предназначенные для хранения файлов.

options FFS #Fast filesystem

Основная FS для FreeBSD. Должна быть обязательно.

options "CD9660" #ISO 9660 filesystem

Наиболее распространенная FS для CD-ROM. Существует в виде lkm, поэтому, в ядро можно не включать.

options MSDOSFS #MS DOS File System

FS для MS DOS. Существует в виде lkm, поэтому, в ядро можно не включать.

options MFS #Memory File System

FS для построения "виртуального диска" в ОЗУ машины. Модуля lkm нет, поэтому, если хотите ее использовать, то необходимо включить в ядро. (Я слабо представляю себе - когда ее использование оправдано. Не забывайте, что под этот "виртуальный диск" отдается часть оперативной памяти, которой, обычно, не бывает в избытке).

options "MFS_ROOT=10"

Размер (в килобайтах) памяти, зарезервированой внутри ядра для MFS

options MFS_AUTOLOAD

Эта опция позволяет ядру автоматически загружать разметку для "виртуального диска" с флопика, при необходимости. (Поскольку, при перезагрузке машины разметка диска в памяти не сохраняется, ее приходится каждый раз копировать с какого-нибудь реального диска).

options LFS #Log filesystem

Еще одна (продвинутая) FS для UNIX. Пока в стадии экспериментальной. Модуля lkm нет, поэтому, если хотите ее использовать, то необходимо включить в ядро.

options NFS #Network File System

Сетевая FS. В UNIX это основной механизм, позволяющий работать с дисками других машин через сеть.
Существует в виде lkm, поэтому, в ядро можно не включать (если, конечно, система грузится не по сети).

options NQNFS #Enable NQNFS lease checking

Некоторое расширение функций NFS.

options NFS_NOSERVER #Disable the NFS-server code.

Если ваша машина будет только NFS-клиентом, то есть только пользоваться чужими дисками и не отдавать свои в сеть, то этой опцией можно подсократить скомпилированный код. Кстати, интересно - с какими опциями скомпилирован lkm для NFS?

options "EXT2FS"

Еще одна FS для UNIX. В оригинальном LINT эта опция стоит в разделе "еще некоторые недокументированные опции". Поэтому, я не знаю - насколько она работоспособна. Модуля lkm нет, поэтому, если хотите ее использовать, то необходимо включить в ядро.

"Специальные" FS.

Эти "псевдо-" файловые системы предназначены для того, чтобы обращаться (считывать/изменять) к различным объектам операционной системы и их некоторым параметрам как к файлам, то есть обычными операциями чтения/записи файлов. Какие из них вам нужны - это определяется теми прикладными программами, которые захотят их использовать. Во всяком случае, все они существуют в виде lkm (кроме DEVFS) и, следовательно, включать их в ядро нет необходимости.

options PROCFS #Process filesystem

Отображает параметры текущих процессов в виде файлов. Подробности - man procfs.

options KERNFS #Kernel filesystem

Отображает некоторые параметры системы в виде файлов. Подробности - man kernfs.

options FDESC #File descriptor filesystem

Отображает дескрипторы открытых в данный момент файлов в виде файлов. Подробности - man fdesc.

options PORTAL #Portal filesystem

Отображает параметры некоторых объектов (например, сокетов) в виде файлов. Подробности - man mount_portal. Находится в стадии экспериментальной (то есть - не работает :-).

options DEVFS #devices filesystem

Эмулирует "device special files" (которые обычно лежат в /dev) для всех устройств, поддержка которых включена в ядро. Подробности - man devfs. :-) Находится в стадии экспериментальной (но, говорят, что работает). Модуля lkm нет, поэтому, если хотите ее использовать, то необходимо включить в ядро.

"Вспомогательные" FS.

Это модули, которые используются "поверх" (или "между") реальных FS для некоторых дополнительных действий. Все эти модули существуют в виде lkm и, следовательно, включать их в ядро нет необходимости.

options UNION #Union filesystem

Позволяет монтировать в одну директорию несколько "реальных" FS. Например, можно смонтировать в одну директорию CD-ROM и директорию с винчестера. В результате, в этой директории будут файлы с CD-ROM, но, при этом, в нее можно дописывать свои файлы (которые, естественноб будут записаваться в соответствующую директорию на винчестере). Подробности - man mount_union. Находится в стадии экспериментальной.

options UMAPFS #UID map filesystem

Позволяет иметь кроме "реальной" FS ее копию, но с измененными UID и GID на файлах. (Естественно, при монтировании указывается таблица соответствий реальных/подмененных UID'ов и GID'ов). Подробности - man mount_umap.

options NULLFS #NULL filesystem

Ничего не делает с "реальной" FS. :-) С ее помощью можно просто сделать копию уже смонтированной FS.
Подробности - man mount_null.

Некоторые опции, имеющие отношение к файловым системам.

options "NSWAPDEV=20"

Для swap можно использовать одновременно несколько устройств/разделов диска (см. man swapon). Этот параметр задает их максимальное количество. Если этот параметр не задавать, то, по умолчанию, их будет 4.
А этого, как правило, вполне достаточно.

options QUOTA #enable disk quotas

Если вы хотите задавать "дисковую квоту", то есть ограничение на размер дискового пространства для отдельных юзеров, то эта опция должна быть обязательно. Подробности о quota - man quota (и те man'ы, на которые он ссылается).

options NULLFS_DIAGNOSTIC
options KERNFS_DIAGNOSTIC
options UMAPFS_DIAGNOSTIC
options UNION_DIAGNOSTIC

Включение в соответствующих FS дополнительной диагностики.

2.4  MISCELLANEOUS DEVICES AND OPTIONS

В этом разделе определяется какие псевдо-устройства (и в каком количестве) включить в систему.

pseudo-device pty 16 #Pseudo ttys - can go as high as 256

Драйвер, который изображает "драйвер терминала" (такого, как tty), в тех случаях, когда юзер работает не с реального "железного" терминала, а, например, через сеть (через telnet, rlogin и т.п.) Подробнее - man 4 pty.
Естественно, их желательно иметь несколько (16 - вполне нормально). Нельзя сказать, что должен быть обязательно, но "очень полезно".

pseudo-device speaker #Play IBM BASIC-style noises out your speaker

Играет музыку на спикер компьютера. Заметьте, это не для воспроизведения звуковых файлов (типа wav или au), а для проигрывания простеньких мелодий, задаваемых как в функции play в BASIC'е. Примеры можно посмотреть в /usr/sbin/spkrtest. Подробнее - man speaker, man spkrtest. Естественно, вещь забавная, но не обязательная.

pseudo-device log #Kernel syslog interface (/dev/klog)

Через это "устройство" поступают сообщения от ядра к программе syslogd (которая ведет все основные логи в системе). Несколько слов об этом можно найти в man syslogd. Поскольку, вы, скорее всего, не собираетесь отказываться от syslogd, это устройство должно быть обязательно.

pseudo-device gzip #Exec gzipped a.out's

Это "устройство" позволяет хранить некоторые бинарники в "зазипованном" виде (сжатыми gzip'ом), но запускать их как обычные программы. В общем-то, это даже не драйвер. При указании этого параметра, в ядро включается соответствующий модуль, который распознает такие файлы и распаковывает их "на лету" при запуске. (Кстати, существует другой способ хранить исполняемые файлы в сжатом виде (смотри man gzexe), однако он хуже, так как для распаковки вызывается обычный "распаковщик" gunzip и создается временный файл, который и запускается.) Устройство полезное, но необязательное.

pseudo-device vn #Vnode driver (turns a file into a device)

Этот драйвер может "превращать" файл в "устройство".
Может быть полезным если, например, какой-то файл представляет собой "образ дискеты", а вам захочется его посмотреть как обычную дискету. Другое полезное применение - увеличить swap. Поскольку, в FreeBSD swap можно делать только на "сырое" устройство (диск или раздел диска), можно создать файл подходящего размера, "превратить" его в "диск" с помощью драйвера vn, и добавить к swap-устройствам. Подробнее - man vn, man vnconfig. Таких драйверов лучше иметь несколько (смотря сколько вам захочется их задействовать одновременно). Не обязательное, но полезное.

pseudo-device snp 3 #Snoop device - to look at pty/vty/etc..

Позволяет "подглядывать" - что делает другой юзер на своем терминале и даже вмешиваться в его работу (естественно, делать это может только root). Программа, которая это делает называется watch, но для ее работы необходимо наличие этих драйверов snp. Количество snp-устройств определяет - сколько чужих терминалов можно смотреть одновременно. Подробнее - man snp, man watch. Естественно, это устройство не обязательно.

pseudo-device ccd 4 #Concatenated disk driver

Позволяет объединять несколько дисков (разделов дисков) в один логический. С его помощью можно создавать "зеркальные" диски. Соответственно, количество определяет - сколько можно создать таких "логических дисков" одновременно. Подробнее - man ccd, man ccdconfig. Естественно, это устройство не обязательно.



 
 


3. Как добавить из дистрибутива то, что вы не поставили в процессе инсталляции системы?


 






Ну, основные бинарники и конфиги у вас уже стоят. В том числе и ненужные :-). При инсталляции можно отказатся от установки исходных текстов (src), системы X-Window, игрушек (games), и различной документации (manpages, doc, info, dict).Кроме того, существует большое колличество дополнительных программ в виде пакетов (packages) и портов (ports). Но о них разговор отдельный.
3.1 Установка из дистрибутива
3.1.1  С помощью программы sysinstall.
3.1.2  Установка "вручную".
3.2  Установка "пакетов" (packages).
3.2.1  Что такое package?
3.2.2  В чем заключается регистрация пакета?
3.2.3  Как установить пакет?
3.2.4  Как удалить пакет?
3.2.5  Что об этом еще почитать?
3.3 Установка "портов" (ports).

3.1  Итак. Добавление из дистрибутива ...
3.1.1 Добавление из дистрибутива с помощью программы sysinstall.

Надеюсь, что вы уже точно знаете - что именно из дистрибутива вам нужно и откуда его (дистрибутив) можно взять. Итак...

  1. Запустите программу
  2.   /stand/sysinstall
  3. В главном меню выберите пункт
  4.   Configure - Do post-install configuration of FreeBSD
  5. В меню "FreeBSD Configuration Menu" выберите пункт
  6.   Distributions - Install additional distribution sets
  7. В меню "Choose Distributions" выберите (пробелом) пункт
  8.   > > Custom - Specify your own distribution set
  9. Теперь можно пометить (пробелом) то, что вам нужно. Если вы отметите src или XFree86 появятся дополнительные меню для уточнения - что вам из этого надо. Естественно, не надо просить то, что у вас уже стоит.
  10. Нажимая <Enter> возвращайтесь из меню. В конце концов программа спросит вас - откуда брать дистрибутив. Здесь вариантов много. Надеюсь, вы знаете - что выбрать. :-)
Вот, в общем, и все. Если вы правильно указали где брать дистрибутив все поставится автоматически. Можно выходить из программы.
Это самый легкий способ. Но... Sysinstall все еще в процессе совершенствования :-), и я не уверен, что эти рекомендации подойдут к любой версии. Кроме того, ему не хватает гибкости. Поэтому предлагаю еще один, несколько более трудоемкий, но надежный и гибкий способ...
 
 

3.1.2 Добавление компонент из дистрибутива "вручную".

Будем считать, что дистрибутив вам доступен для просмотра и копирования. Если он находится на CD, отдельной партиции винчестера или доступен по NFS - смонтируйте его в любую подходящую директорию.

Если вы можете скопировать его через FTP или через флопики - выберите ту часть, которая вас интересует (можете посмотреть "Содержание дистрибутива FreeBSD") и скопируйте в подходящую директорию.

Что именно нужно копировать?

Если речь идет о "монолитных" частях дистрибутива (info, games, manpages и т.п), то забирайте все, что лежит в соответствующей директории дистрибутива. Если вам нужны исходники (директория src), то выберите - какой из архивов вас интересует и берите все файлы с таким названием. Например, если вам нужны исходники ядра, берите все файлы с именем ssys (ssys.aa, ssys.ab и т.д.). Кроме того, очень полезно взять еще файл install.sh из этой же директории.

Несколько слов о том, что это за файлы. На самом деле это архив *.tgz (tar-архив сжатый GNU zip'ом), только порезанный на кусочки программой split. Эти кусочки можно "склеить" обратно в единый файл командой cat после чего обращаться с ним как и с другими файлами типа tgz.

Однако, вам этого делать не обязательно.

"Извлечение"

Просто запустите командный файл install.sh из этой директории:
sh install.sh
он сам выполнит последовательно команды cat, которая "сольет" кусочки в единый файл и tar (с соответствующими ключами), которая развернет получившийся архив в нужную директорию. Если вы хотите развернуть какой-либо архив из исходников, то install.sh нужно указать в качестве аргумента имя архива (без начальной буквы "s") или all, если вы хотите развернуть все исходники. Например, для тех же исходников ядра:
sh install.sh sys

Более "тонкая" работа.

Все вышеописаные действия можно сделать и с помощью программы sysinstall. Однако, вручную можно сделать и более "тонкую" работу. Например, "вытащить" исходники только одной конкретной программы. Или "достать" из дистрибутива сдержимое директории /etc, какой она была в оригинале (если вы вдруг безнадежно испортили какой-нибудь файл при настройке).

Прежде всего, определите - в каком из дистрибутивных архивов лежит то, что вам нужно. Если речь идет об исходниках какой-то программы, найдите саму программ в своей развернутой системе (например, с помощью команды locate). По названию директории, в которой она находится, можно определить в каком из архивов искать ее исходники (см. "Содержание дистрибутива FreeBSD"). Естественно, если вам надо саму программу в бинарном виде или файлы из /etc, то их надо искать в той части дистрибутива, которая называется bin.

Теперь просмотрите соответствующий архив.
cat file.?? | tar tzvf - | more
(вместо more лучше использовать less, если он у вас уже стоит) естественно, вместо file в команде должно быть имя конкретного архива.

Если вы не обнаружили в архиве то, что искали - попробуйте просмотреть другие архивы (например, часть исходников лежит в архивах scontrib и sgnu).

Если вы нашли, то что искали, можно приступать к "извлечению" из архива. Решите, в какую директорию вы хотите положить извлеченное и запускайте команду
cat file.?? | tar xzf - -C "куда положить" "что взять"

Например:

 cat sgnu.?? | tar xzf - -C /home/vasia */uucp
Обратите внимание, что в архиве может быть большое дерево из директорий, и, те файлы, которые вам нужны, могут иметь длинный "префикс" из названий поддиректорий (так файлы-исходники uucp в архиве sgnu, выглядят как gnu/libexec/uucp/...). Поэтому в команде, в том месте, где "что взять", надо либо прописать начало имени полностью - gnu/libexec/uucp, либо начать со звездочки - */uucp. Кстати, в директории, куда вы извлекаете файлы, в этом случае создастся соответствующий кусочек дерева из архива. То есть, директория gnu, в ней - libexec, а в ней - uucp со всем своим содержимым.

Подробности о других возможностях программы tar можно почитать в соответствующем man'уале
man tar.
 
 

3.2 Установка дополнительных программ из "пакетов" (packages).

Что такое package?

"Пакеты" - это архивы типа *.tgz (tar-архив, сжатый GNU zip'ом), в которых лежат уже собранные бинарники. А, также, мануалы к ним, необходимые конфиги и т.п.

Естественно, бинарники собраны под конкретную версию системы, поэтому желательно их не путать. Хотя это и не всегда критично. Также, в этих архивах лежат несколько воспомогательных файлов, которые позволяют устанавливать их автоматически. Используя эти файлы, утилита установки пакетов раскладывает все на свои места и регистрирует пакет. Кроме того: Некоторые пакеты "опираются" на другие. То есть для нормальной работы пакета необходимо, чтобы у вас уже был установлен какой-то другой пакет или пакеты (обычно это библиотеки). Естественно, в таких случаях программа установки проверяет наличие всего необходимого.
При установки некоторых пакетов требуется выполнить какие-то дополнительные действия кроме просто раскладывания файлов по директориям. В таком случае в пакет добавляется "инсталляционный скрипт" (командный файл), который утилита установки и запустит в нужный момент.

В чем заключается регистрация пакета?

В директории /var/db/pkg создается директория с тем же названием, что и пакет, в которую помещаются несколько файлов. В этих файлах находится Все эти данные используются соответствующими утилитами, которые Однако, все эти файлы просто текстовые и их легко можно посмотреть любым редактором/просмотрщиком.

Как установить пакет?

Очень просто
pkg_add <имя архива>
Дальше все сделается автоматически. Хотя, если в пакете есть "инсталляционный скрипт", он, возможно, захочет задать вам несколько вопросов. Еще, возможно, вам всетаки придется потом "вручную" отредактировать конфигурационные файлы. Но это уже зависит от той программы, которую вы ставите.

Как удалить пакет?

pkg_delete <имя пакета>
Точное имя пакета можно подсмотреть в /var/db/pkg. (Даже если вы каждый день пользуетесь программой elm, например, - это еще не значит, что вы безошибочно назовете имя пакета, откуда его поставили - elm-2.4ME+8 :-) При удалении пакета могут возникнуть некоторые сложности. Во-первых, если пакет используется другими пакетами, утилита откажется его удалять. Однако ее можно заставить это сделать с помощью ключа -f.
Во-вторых, если при установке пакета для него специально создавались какие-либо директории, обычно, при удалении пакета они не удаляются. Опять же, утилиту удаления можно заставить это делать ключем -d.
И, наконец, кое-какой "мусор" все равно может остаться. Например, если для какой-то программы каждый пользователь может иметь собственный конфиг в домашней директории, естественно, никто их подчищать не будет.

Что об этом еще почитать?

man pkg_add - установка пакетов
man pkg_delete - удаление пакетов
man pkg_info - вывод информации об установленных пакетах
Ну, и те, которые будут указаны в этих мануалах в разделе See Also (смотри также...).

В некоторых версиях FreeBSD есть еще утилита pkg_manage, которая должна была по замыслу авторов объединить в себе все функции вышеперечисленных. Но, потом от нее отказались (говорят, из-за повышенной глючности :-). Возможно, в последующих версиях она опять появится.
 
 

3.3 Установка "портов" (ports).

Вообще-то, установка ports подробно описана в /usr/share/doc/handbook/. Поэтому я пока эту часть не описываю.



 
 


4 Администрирование пользователей (юзеров).


 






4.1  Что такое "учетная карточка" (user account)?
4.2  Какие данные хранятся в учетной карточке?
4.3  Для чего используется учетная карточка?
4.4  Где хранятся учетные карточки?
4.5  Как добавить юзера?
4.6  Как поменять данные в учетной карточке?
4.7  Как удалить юзера?
4.8  Что может поменять сам юзер в своей учетной карточке?
4.9  Как временно убрать юзера (не удалить, но запретить вход)?

4.1 Что такое "учетная карточка" (user account)?

Unix - система многопользовательская. Значит, для нормальной работы нужно... Во-первых, разграничить права различных юзеров - какие файлы они могут читать/писать/изменять, какие программы запускать и т.п. Во-вторых, дать возможность каждому юзеру создавать свою "среду обитания" (environment) - иметь свои настройки для любимых программ, свои папки-директории, настройки терминала и т.п.   Для этого в системе должна быть какая-то база данных (пусть даже очень примитивная), в которой хранятся основные сведения о каждом юзере, допущеном к работе на данной машине. (Естественно, все вышесказанное относится к любой многопользовательской системе, но в данном случае речь об Unix'е). Итак. В Unix такая запись в соответствующей БД, содержащая сведения об юзере называется user account. Для того, чтобы допустить нового пользователя в систему, необходимо создать для него этот account. Слово "account" обычно переводится как "банковский счет". Понятно, что в данном случае это не очень подходящий перевод. Поэтому, как мне кажется, наиболее подходяшим по смыслу будет - "личная учетная карточка пользователя". Примерно так я и буду называть его (или ее) в дальнейшем.
 
 

4.2 Какие данные хранятся в учетной карточке?

Прежде чем перечислить - какие поля есть в учетной карточке, хотелось бы обратить внимание вот на что. Каждому юзеру присваивается уникальный номер (user ID), именно этот цифровой номер и используется внутри операционной системы при проверке прав доступа, сборе и хранении статистики и т.д. Однако, для человека оперировать все время номерами юзеров не удобно. Поэтому, каждому юзеру кроме номера присваивается еще уникальное имя (login name). Если в какой-нибудь команде требуется в качестве аргумента указать юзера, обычно используется это "login name". И, наоборот, если какая-либо программа в своем выводе как-нибудь упоминает конкретных юзеров, она обычно называете их этим именем, а не просто печатает номер юзера. То есть, между user ID и name должно быть всегда однозначное соответствие. Просто user ID используется во внутренних данных системы, а name при общеннии человек-компьютер. Итак. В учетной карточке юзера хранится

  • Name
  • Password
  • user ID
  • group ID
  • General information
  • Home dir
  • Shell
  • кроме того есть еще поля, которые часто не используются (кстати, в карточке они располагаются между group ID и General Information)
  • Class
  • Password change time
  • Account expiration time
  • Назначение этих полей.

    Name

    Это уникальное имя юзера. Его спрашивают при входе в компьютер. Оно используется в командах администрирования.

    Password

    Пароль. Для того, чтобы никто другой, кроме этого юзера не мог войти в систему, естественно, у каждого юзера должен быть его собственный секретный пароль для входа. Вообще-то, пароль может и отсутствовать, но это очень не рекомендуется. Особенно, если машина доступна по сети. Кстати, пароли хранятся в базе в закодированном виде, поэтому, даже администратор не может его узнать. (Собственно администратору он и не нужен, у него и так права не ограничены. А вот если юзер забудет свой пароль, то проще попросить администратор записать новый пароль, чем пытаться извлечь старый).

    user ID

    Уникальный номер юзера. Он однозначно соответствует имени (Name) и используется внутри системы.

    group ID

    Номер группы, к которой принадлежит юзер. Подробнее о группах ????

    General information

    Это просто некоторые "анкетные данные" того реального человека, который скрывается под Name. Это поле можно и не заполнять. Обычно там пишут просто реальное имя/фамилию юзера (например John Doe). Однако, полностью это поле может состоять из

    Home dir

    Домашний каталог юзера. Именно в этом каталоге помещаются настроечные файлы для различных программ с настройками под конкретного юзера. Здесь же юзеру дается полная свобода создавать/удалять свои файлы.

    Shell

    Программа, которая запускается для юзера, когда он входит в систему. Обычно это "исполнитель комманд" (типа command.com в DOS'е), который принимает комманды с терминала и, в свою очередь, запускает программы, необходимые юзеру.В современных Unix'ах обычно есть несколько таких "исполнителей" (sh, csh, tcsh, bash ...) из которых можно выбрать наиболее подходящий. Но, вместо такого "исполнителя команд" здесь может быть указана любая другая программа, что часто используется для некоторых задач. Подробнее об этом сказано в разделе "Для чего используется учетная карточка".

    Class

    Это поле пока ничего не означает. По замыслу, юзер может принадлежать к некоему login-классу. При этом, когда он будет входить в систему, могут быть сделаны какие-нибудь установки (например заданы переменные среды), общие для всех юзеров этого класса. Естественно, должна быть еще некая база данных, в которой указанно - что делать для юзера из конкретного класса (или не делать). Но, сейчас (по крайней мере до версии 2.2.2) это поле никакими программами не используется.

    Password change time

    Здесь администратор может указать дату, когда юзеру следует поменять пароль. Дело в том, что, если требуется повышенная секретность, одной из мер предосторожности является то, что пароли должны периодически меняться (раз в неделю, месяц и т.п.). Для того, чтобы заставить юзера следовать этому правилу, администратор задает дату, после наступления которой компьютер будет предлагать юзеру при входе систему поменять свой пароль.

    Account expiration time

    А здесь администратор задает дату, после которой доступ юзеру в систему будет запрещен. То есть, account юзера сохраняется (и все его файлы тоже), но войти в систему он не сможет (пока не договорится с администратором :-).

    Подробнее обо всем этом можно прочитать в соответствующем man'уале.
    man 5 passwd.
     
     

    4.3 Для чего используется учетная карточка?

    А вот это - очень не простой вопрос.

    Конечно, основное назначение учетной карточки - зарегистрировать юзера, чтобы он мог войти в систему и поработать на этой машине. Однако, существует некоторые нестандартные применения для этого механизма, в которых используются скорее "побочные эффекты" регистрации пользователя.

  • Обычные юзеры
  • Псевдо-юзеры
  • Почтовые юзеры
  • "Гостевой вход"
  • Автоматический запуск коммуникационных программ
  • Обычные юзеры

    Когда обычный юзер заходит в систему (с физического терминала или по сети), он должен сказать свое имя (Login Name) и пароль (Password). Соответствующая программа сверяет эти данные с теми, что записаны в учетной карточке и, если они сопадают, "пускает" юзера в систему. То есть запускается программа, которая указана как Shell в учетной карточке. Юзер с помощью этой программы может запускать другие. При этом ему можно создавать/удалять/писать/читать файлы, которые находятся в его Home dir (которая тоже указана в учетной карточке).

    Псевдо-юзеры.

    Часто бывает полезно ограничить некоторым программам (которые запускаются автоматически - ftp-сервер, www-сервер и т.п.) доступ к файлам и директориям. Например, вы создаете на своей машине WWW-сервер. Естественно, его назначение - выдавать в сеть какие-то документы (файлы *.shtml), специально предназначенные для публичного обозрения. В то же время, не хотелось бы, чтобы он (из-за возможных ошибок или злонамеренных "закладок" в программе) мог выдавать наружу другие файлы находящиеся в системе.В Unix предусмотренно, что права на чтение каждого файла можно связать с определенным пользователем. Юзер может читать файлы, для которых он является "хозяином" или "владельцем" (на самом деле разграничение прав несколько более сложное, но в данном объяснении это не важно). Все остальные файлы можно сделать для него недоступными. Таким образом, для решения задачи нужно
    - зарегистрировать фиктивного пользователя - например www; - все файлы, к которым должна иметь доступ программа WWW-сервера, объявить "собственностью" юзера www (естественно, что ваши секретные файлы должны быть недоступны этому самому www); - обяснить системе, что когда запускается программа WWW-сервера, все должно выглядеть так, как будто его запустил реальный юзер www. Все остальное сделается автоматически средствами Unix.Разумеется, при таком подходе никакого реального человека, который скрывается под именем www может не быть. Следовательно, в учетной карточке такого фиктивного юзера не нужен реальный пароль (вместо пароля ставится какая-нибудь абракадабра, так, чтобы никто не мог даже подобрать его. Точнее, ставится знак "*", поскольку в настоящих шифрованных паролях такой знак никогда не встречается), никакой General information, не нужна также Home dir (хотя, иногда имеет смысл объявить его домашней директорией ту, где лежат его данные) и Shell. Особым случаем псевдо-юзера является юзер ftp. Дело в том, что у ftp-сервера могут быть две задачи. Первая - дать возможность реальным пользователям этой машины перекачивать свои файлы из этого компьютера (или, наоборот, "вкачивать") по сети. Вторая - предоставить некую "свалку" файлов всем желающим (то, что обычно называют "анонимный ftp"). В первом случае каждый реальный юзер говорит серверу свое имя и пароль и получает доступ к файлам такой же, как если бы он вошел в систему. Во втором случае, если вы не зарегистрированы в качестве юзера на этой машине, вы можете сказать, что вы - юзер anonimous или юзер ftp. В этом случае, программа ftp-сервер проверяет - зарегистрирован ли в БД учетных карточек псевдо-юзер ftp (именно ftp, а не anonimous) и, если такой юзер зарегистрирован, то пускает вас в домашнюю директорию (Home dir) этого юзера, там и должна лежать "свалка" файлов для всех желающих. Таким образом, в учетной карточке псевдо-юзера ftp существенным являются в основном поля Name и Home dir. Остальные, обычно, значения не имеют. Таких псевдо-юзеров в любой системе существует несколько. Вы можете сами убедиться, заглянув в /etc/passwd.

    Почтовые юзеры.

    В последнее время получил большое распространение способ доставки почты по протоколу POP. Суть его состоит в том, что почта для конкретного адресата копится на "почтовом сервере" в его личном "почтовом ящике", а сам адресат время от времени запускает на любой машине, имеющей доступ по сети к "почтовому серверу", специальную программу (POP-клиент), которая связывается с сервером и забирает все письма, накопившиеся в "почтовом ящике". Если в качестве "почтового сервера" используется Unix-машина, то самым простым способом обеспечить прием почты и поддержание "почтового ящика" для конкретного человека - это зарегистрировать его как обычного юзера этой машины. (Точнее, это единственный стандартный способ.) Кроме того, для того, чтобы никто посторонний не мог получить доступ к "почтовому ящику", при соединении с "почтовым сервером" используется процедура аналогичная входу в систему обычного юзера - то есть POP-клиент должен предьявить серверу имя и секретный пароль юзера. Причем, обычно, программа POP-сервер ищет эти имя и пароль в той же базе учетных карточек. Особенность этой ситуации состоит в том, что человек, который пользуется этой Unix-машиной как "почтовым сервером", может больше никакого отношения к ней не иметь. То есть ему нет необходимости заходить на эту машину как ее пользователю, запускать программы, хранить файлы. Более того, возможно, администратору и не хотелось бы, чтобы такой юзер имел доступ к чему-либо, кроме своего "почтового ящика". Следовательно, в учетной карточке такого юзера нет домашней директории, или ставится какя-нибудь "левая" директория, одна на всех таких юзеров. А, самое главное, не должно быть реальной программы Shell. Вместо нее лучше всего подставить какую-нибудь программу, которя просто напечатает сообщение типа: "Sorry, вам сюда нельзя" и завершит работу. В качестве такой программы можно использовать /bin/date - она напечатает текущую дату и завершится.Кстати, если поле Shell в учетной карточке просто оставить пустым, то система все равно впустит юзера и даст ему "исполнителя комманд" /bin/sh.

    "Гостевой вход".

    Поскольку, вместо Shell (программы, которая автоматически запускается для вошедшего юзера) можно использовать любую программу, можно сделать небольшую информационную систему для публичного просмотра. Для этого регистрируется пользователь, например, guest (гость). В качестве Shell у этого юзера должна быть программа, которая позволяет просмотреть документы, предназначенные для публики (какя-нибудь BBS, www-browser или другая, специально для этого написанная программа). Естественно, надо принять меры предосторожности, чтобы эта программа не могла прочитать другие файлы из вашего компьютера и не могла записать ничего лишнего на диск. Особенностью такого юзера является то, что у него должен быть необычный Shell, домашней директории может и не быть (это зависит от той информационной программы), и, главное, может не быть пароля (все равно, если он есть, придется сообщить его всем желающим).

    Автоматический запуск коммуникационных программ.

    Если к компьютеру подкючен модем, он может оказывать различные услуги через телефонные линии (BBS, прием/передачу e-mail, IP-доступ и т.п.). Если один и тот же телефонный вход используется для различных услуг, то возникает проблема - как обеспечить запуск различных коммуникационных программ для разных клиентов. Одно из решений заключается в следующем. Для каждой возможной услуги регистрируется пользователь, у которого в качестве Shell указывается соответствующая коммуникационная программа.  Например, можно зарегистрировать пользователей:

    UUCPuser - для которого запускается программа uucico (из пакета uucp),
    PPPuser - для которого запускается драйвер, для связи по протоколу PPP,
    SLIPuser - для которого запускается драйвер, для связи по протоколу SLIP.

    Теперь, если клиент, позвонивший на модем, введет в качестве Login name PPPuser (например), то для него на этом конце модемной линии включится драйвер PPP и он получит IP доступ по этому протоколу. Кроме того, любой Unix, всегда запоминает время, когда юзер вошел в систему и когда закончил работу. Поэтому, если каждому клиенту дать отдельное имя (и, естественно, секретный пароль), то можно легко вести статистику - сколько времени каждый клиент занимал ваш телефон.Особенностью учетной карточки такого юзера, как и в предыдущем случае, является нестандартный Shell. Может отсутствовать Home dir (это зависит от коммуникационной программы, некоторые из них пытаются извлечь некоторые настроечные данные из домашней директории юзера).

    4.4 Где хранятся учетные карточки?

    В FreeBSD существует четыре файла, которые имеют отношение к БД учетных карточек. Все они находятся в директории /etc. В общем-то, все они содержат одну и ту же информацию, и при всех добавлениях (изменениях) в учетных карточках юзеров изменяются одновременно.

    /etc/spwd.db - основная БД, именно отсюда соответствующие программы берут нужные им данные. Данные хранятся в двоичном виде, то есть простым редактором там ничего не сделаешь.

    /etc/master.passwd - та же БД, но в текстовом виде. Этот файл можно читать и изменять обычным текстовым редактором. Но, если вы будете его менять, потом нужно будет запустить соответствующую утилиту, которая сделает изменения и в остальных трех файлах.

    /etc/pwd.db - то же, что и spwd.db, но без паролей (в поле password просто стоит знак *)

    /etc/passwd - то же, что и master.passwd, но без паролей.

    Для чего нужны два последних файла? Дело в том, что, хотя пароли хранятся в зашифрованном виде, показавать их всем, все равно, не рекомендуется. Злоумышленник, зная как выглядит зашифрованный пароль, может, если и не расшифровать его, то подобрать подходящий. С другой стороны, информация из этой базы нужна не только администратору, но и некоторым программам, которыми пользуются рядовые юзеры. Поэтому, было принято решение - два первых файла, содержащие полную информацию учетных карточек доступны (даже для чтения) только администратору системы (юзер root). А для всех остальных доступны для чтения "урезанные" варианты той же базы - два последних файла.

    4.5 Как добавить юзера?

    Ответ на этот вопрос не такой простой, как может показаться. Все зависит от того - какого юзера вы хотите зарегистрировать. (О том, какие типы юзеров могут встретиться смотри - "Для чего используется учетная карточка" ). Заметьте, что, для того, чтобы пустить в свою систему реального юзера, надо не только добавить новую учетную карточку для него. Еще надо создать ему домашнюю директорию и, желательно, положить туда некоторые стартовые файлы (типа config.sys и autoexec.bat в DOS'е). При этом надо правильно установить права нового юзера на эти файлы. Для того, чтобы не делать эту работу вручную, существует специальная утилита (см. ниже). Но, если вам нужно зарегистрировать псевдо-юзера или "почтового юзера", она не очень подходит. В этом случае лучше воспользоваться более примитивными средствами. Итак. Программы для регистрации (и не только) нового пользователя.

    pwd_mkdb

    Собственно, эта утилита только преобразует файл master.passwd в три остальных файла (см. "Где хранятся учетные карточки"). Вы можете любым текстовым редактором добавить строчку в master.passwd, взяв за образец любую из тех строчек, которые там уже есть (желательно, перед этим внимательно прочитать man 5 passwd). Если, после этого запустить команду

    pwd_mkdb -p /etc/master.passwd

    то она сделает соответствующие изменения в spwd.db, pwd.db, passwd. Не забудьте, что пароль в учетной карточке хранится в зашифрованном виде. Поэтому, при составлении записи, это поле учетной карточки лучше оставить пустым, а потом занести пароль утилитой, которая специально для этого предназначена:

    passwd <имя юзера>

    Конечно, это самый сложный способ, но... Если вы когда-нибудь возьметесь написать свою программу для регистрации, то она должна будет просто сформировать правильную строчку для файла master.passwd, занести ее в этот файл, а потом просто вызвать pwd_mkdb. Кстати, остальные программы, о которых дальше идет речь, именно так и делают.

    vipw

    Эта программа слегка :-) автоматизирует процесс описанный выше. Она сама запускает текстовый редактор, а, по выходу из редактора, pwd_mkdb. Облегчение состоит в том, что вам не надо помнить - какой файл вы редактируете и как правильно вызвать pwd_mkdb. Запись в master.passwd вам все равно придется составить самостоятельно. При этом не забудьте, что Name и userID должны быть уникальными для каждого юзера. Важное замечание по поводу текстового редактора. Программа vipw сама редактором не является. Она запускает текстовый редактор, который задан переменной окружения EDITOR, а если таковой не найдет, то редактор vi. Причем, обычно, при установке FreeBSD в стартовых файлах для root эта переменная устанавливается, но это тот же vi. Дело в том, что работать с этим редактором без подготовки достаточно сложно. Поэтому, установите переменную EDITOR, выбрав свой любимый редактор. Если любимого редактора у вас пока нет, можно воспользоваться редактором /bin/ee.

    adduser

    Это самая "продвинутая" программа для добавления нового юзера. Она задает вопросы касающиеся нового юзера, сама проверяет имя и user ID на уникальность (причем, для user ID она сама предложит подходящее значение), создает домашнюю директорию для юзера и копирует туда заготовки настроечных файлов, и даже может послать приветственное письмо вновь зарегистрированному юзеру. Естественно, она же делает запись в БД учетных карточек. Однако, если вам нужно зарегистрировать не обычного юзера, то она вам только помешает.Например, вам нужно зарегистрировать "почтового юзера". Для такого юзера не нужна домашняя директория (а тем более заготовки стартовых файлов) и Shell у этого юзера должен быть нестандартный. Так вот - заставить эту программу не делать домашнюю директорию очень трудно (если вообще возможно). Кроме того, она не даст вам указать в качестве Shell произвольную программу. Поэтому, в этой ситуации, вам придется либо подчищать за ней все лишнее, что она сделает, либо обратиться к другим способам создания учетной карточки.

    pw useradd

    Возможно, вам покажется более удобной утилита pw. Эта программа, по замыслу авторов, должна быть универсальной утилитой для администратора в вопросах создания/изменения/удаления юзеров и групп. Поэтому, для данной задачи (регистрации нового юзера) ее надо запускать в виде: pw useradd ..... В отличии от adduser эта утилита очень не разговорчивая, то есть, она не задает никаких вопросов и все нужные сведения о новом юзере ей нужно сказать в командной строке с помощью соответствующих ключей. Но, с другой стороны она имеет и ряд достоинств:

    Подробнее о всех параметрах (ключах) этой программы можно посмотреть в соответствующем man'уале (man pw), краткий список ключей можно "спросить" у самой программы, командой pw useradd help (но man pw все равно лучше прочитать, хотя бы раз :-) Здесь я хочу только обратить внимание на ключь -m. Дело в том, что
    pw useradd
    "по умолчанию" делает только запись в учетной карточке. А с этим ключем
    pw useradd vasia -m
    она, также, создаст домашнюю директорию для юзера и скопирует туда соответствующие стартовые и настроечные файлы.

    Еще что-нибудь

    Если вам приходится часто выполнять какую-нибудь нестандартную операцию регистрации нового пользователя (например, "почтового юзера" или фиктивного юзера для запуска коммуникационной программы), можно написать свою программу, которая будет выполнять только поставленную задачу, но, зато, не сделает ничего лишнего и не будет приставать с лишними вопросами как adduser. Написание такой программы - не такая уж сложная задача, как может показаться на первый взгляд.Ниже приводится пример программы, написанной на языке "интерпретатора комманд" sh, для регистрации "почтового юзера". Естественно, это не столько рабочая программа, сколько пример, который должен вдохновить вас на самостоятельное творчество. :-)Некоторые пояснения. Программа использует системную утилиту id, которая выводит некоторую информацию о заданном юзере (причем, в качестве аргумента этой утилиты может использоваться как name юзера, так и его user ID). В данном случае она используется только для проверки - зарегистрирован ли уже такой юзер в системе. Форма - id ... >/dev/null 2>&1 используется для того, чтобы подавить весь вывод этой утилиты, который, при использовании ее внутри программы, будет совершенно лишним.

    -------------------------------------------------------------------------
    #!/bin/sh
    # Эти переменные вынесены в начало, чтобы их можно было легко поменять
    # при необходимости
    shell=/bin/date    # имя Shell для регистртруемого юзера
    group=2000         # group ID для регистрируемого юзера
    uid=2000           # user ID, начиная с которого программа ищет
                       # ближайший свободный
    # найти ближайший не занятый user ID
    while (true) ; do
    if (id $uid >/dev/null 2>&1)
      then uid=$(($uid+1))
      else break
    fi
    done
    # Запросить Name для нового юзера и проверить его на уникальность,
    # если юзер с таким Name уже зарегистрирован в системе, сообщить
    # об этом и повторить вопрос
    while (true) ; do
    read -p 'User Name: ' name
    if (id $name >/dev/null 2>&1) 
      then echo 'user "'$name'" already exists'
      else break
    fi
    done
    # Запросить "реальное имя" юзера (чтобы записать его в General information)
    read -p 'Real name of "'$name'" : ' rname
    # Сформировать учетную карточку и вписать ее в master.passwd
    echo $name'::'$uid':'$group'::0:0:Postbox for '$rname'::'$shell >> /etc/master.passwd
    # Запустить pwd_mkdb, чтобы сделать изменения во всех файлах
    # БД учетных карточек
    pwd_mkdb -p /etc/master.passwd
    # Запросить секретный пароль для нового юзера
    passwd $name
    # Если необходимы еще какие-то действия - создать директорию или внести
    # изменения в другие файлы, то это можно сделать далее в той же программе.
    # Но, в данном случае, больше ничего делать не нужно.
    --------------------------------------------------------------------------
    4.6 Как поменять данные в учетной карточке?

    Во-первых, для изменения секретного пароля юзера (поле Password) надо использовать специальную команду

    passwd "имя юзера"

    поскольку, в учетной карточке пароль хранится в зашифрованном виде и правильно изменить его текстовым редактором невозможно. Все остальные поля можно поменять с помощью утилиты vipw или chpass. Можно, также, использовать "универсальную" утилиту pw, хотя в данном случае, это, пожалуй, самый неудобный инструмент.Программа vipw (можете посмотреть о ней также в разделе "Как добавить юзера") позволяет редактировать запись непосредственно в файле master.passwd. Естественно, вы должны представлять себе формат этой записи (об этом можно прочитать в man 5 passwd). Несколько более удобной является утилита chpass (она же chsh и chfn). Она дает возможность редактировать конкретную учетную карточку юзера, имя которого вы укажете при запуске этой программы. Но, при этом, она выводит какждое поле какрточки в отдельной строке с подсказкой - что какое поле означает.

    Login: vasia
    Password: .....
    Uid [#]: 1000
    Gid [#]: 1000
    ... и т.д.
    Особенно, программа chpass полезна, если вы захотите изменить Password change time (дату, когда система предложит юзеру поменять пароль) или Account expiration time (дату, после которой не пускать юзера в систему). Дело в том, что в самой учетной карточке эти даты хранятся в цифровом формате, понятном только самой системе, а chpass показывает и воспринимает их в "человеческом" виде (месяц, день, год). Программу pw тоже можно использовать для изменения данных в учетной карточке (вообще-то ее удобнее применять для создания/удаления юзеров). Этой программе все данные нужно задавать в командной строке, с помощью соответствующих ключей. Например:
    pw usermod vasia -s /bin/csh
    запишет в учетную карточку юзера vasia Shell - /bin/csh. Список всех возможных ключей можно "спросить" у самой программы
    pw usermod help
    (и, конечно, хорошо бы почитать man pw). Чтобы не "действовать вслепую" можно посмотреть текущие данные у юзера командой
    pw usershow vasia.

    Конечно, в данном случае pw usermod менее удобна, чем "полноэкранные" утилиты. Ее использование может быть оправдано только в случае, когда надо сделать много однотипных изменений для нескольких юзеров. Ну, или если вы привыкли ей пользоваться (pw - утилита универсальная для регистрации/просмотра/изменения/удаления юзеров, и во многих случаях может оказаться более удобной, чем остальные). Заметьте, что vipw вообще не проверяет корректность данных. А chpass и pw usermod проверяют только отдельные поля (и то, иногда отделываются предупреждениями). Ни одна из них не проверяет на уникальность Name и user ID. Поэтому, пользуйтесь ими с осторожностью. И, наконец, опять замечание по поводу текстового редактора. Ни одна из описанных "полноэкранных" утилит не имеет своего редактора и вызывает тот редактор, который задан переменной окружения EDITOR (если таковой не обнаружится, используется редактор vi). Не забудьте указать, в качестве значения этой переменной, ваш любимый текстовый редактор.

    4.7 Как удалить юзера?

    С одной стороны, очень просто - удалите его учетную карточку из базы. Это можно сделать программой vipw - найдите соответствующую строчку и удалите ее. С другой стороны, в системе могут быть файлы, принадлежащие этому юзеру, а, также, имя юзера может встречаться в некоторых других файлах.

    Что надо удалить?
    Найти все эти файлы можно с помощью...
    Где еще могут остаться упоминания об этом юзере?
    Самый простой способ удалить юзера (программы rmuser и pw).

    Что надо удалить?

    Во-первых, домашнюю директорию юзера. Кстати, если администратор не предпринимал никаких действий, чтобы дать юзеру возможность писать в другие директории, то все файлы, которые мог "наплодить" юзер должны лежать в его Home dir. Если же вы дали юзеру права создавать файлы в других диркториях (в публичном ftp архиве или в директории www сервера, например), то, возможно, надо "почистить" и там. Во-вторых, "почтовый ящик" юзера в директории /var/mail. Сделайте это обязательно, даже если юзер просил "пока не удалять почту" (или хотя бы уберите этот файл из /var/mail). Дело в том, что название этого файла совпадает с Name юзера, а права на чтение/запись определяются его user ID, и, естественно, должны соответствовать друг-другу. Не вдаваясь в подробности, могу сказать, что если вы вскоре зарегистрируете нового пользователя с тем же user ID (он же освобождается), но с другим именем, или наоборот - с таким же именем, как у старого юзера, но с другим user ID, то у этого нового юзера возникнут серьезные проблемы с получением почты.В-третьих. Могут быть еще где-то раскиданы файлы, владельцем которых был этот юзер. Например, в директории /tmp, /usr/tmp, /var/tmp.Найти все эти файлы можно с помощью программы find. Например, так
    find / -user vasia
    (Обратите внимание, первый аргумент - директория, начиная с которой искать. В данном примере это корневая, то есть будут просмотрены все файлы в системе. С одной стороны это хорошо - ничего не пропустите, но, с другой стороны, если у вас стоит ньюс-сервер или огоромный ftp-архив, то ждать придется долго). С помощью этой же команды можно и удалить все найденные файлы
    find / -user vasia -delete
    однако, поскольку она не спрашивает подтверждения, этот метод очень опасный. Лучше уж заставить ее выполнять команду rm ( с подтверждением) для каждого найденного файла
    find / -user vasia -exec rm -i {} \;

    И, наконец, привожу небольшой список (скорее всего, неполный) - где еще могут остаться упоминания об этом юзере.

    Итак, вы видите, что полное удаление юзера из системы в общем случае очень не простая задача. Однако, в большинстве случаев все гораздо проще. 

    Самый простой способ удалить юзера (программы rmuser и pw).

    Большую часть работы по удалению юзера (и всяческих упоминаний о нем) выполняет программа

    rmuser <имя юзера>

    Во всяком случае, кроме удаления учетной карточки, она удаляет

    Как я уже сказал, в большинстве случаев этого вполне достаточно. Те же действия выполняет "универсальная" утилита pw. Для этого ее нужно запустить в виде
    pw userdel <имя юзера> -r
    (без ключа -r она только удалит учетную карточку из базы)

    4.8 Что может поменять сам юзер в своей учетной карточке?

    Естественно, любой юзер может поменять свой пароль (и даже желательно, чтобы он это делал время от времени). Делается это командой passwd, той же, которой пользуется администратор. Разница в том, что администратор может поменять пароль любому юзеру, вызвав эту команду с именем юзера в качестве аргумента. А обычный юзер может поменять только свой пароль. Кроме того, юзер, как и администратор, может воспользоваться программой chpass. Естественно, он может редактировать только свою учетную карточку. При этом, он сможет поменять в ней только поля Shell и General information (свое реальное имя, адрес, телефон).

    4.9 Как временно убрать юзера (не удалить, но запретить вход)?

    Бывают такие ситуации, когда надо запретить юзеру пользоваться вашей машиной временно. Конечно, самый простой способ - удалить его учетную карточку, но не трогать остальные файлы. Однако, этот способ имеет кучу недостатков:
    - почта на несуществующего юзера будет возвращаться отправителю,
    - user ID этого юзера может достаться другому (новому юзеру),
    - при возвращении юзера в систему надо будет воспроизвести в точности ту же учетную карточку,
    - и т.п.

    Поэтому, этот способ - самый неудачный и его даже не стоит рассматривать. Лучше рассмотрим другие возможности:

    Первый способ

    Этот способ (пожалуй, наиболее "цивилизованный") заключается в том, что в учетную карточку надо вписать"Account expiration time" (с помощью программы chpass), естественно, поставив там уже прошедшую дату. В этом случае, юзер как бы существует в системе - письма к нему идут, файлы сохраняются, во всех диагностиках, где может встретиться его имя, оно отображается правильно. Но, в то же время, если юзер попытается войти в систему, ему просто выдастся сообщение, что "ваш account истек". Однако, это способ тоже не лишен недостатков. Чтобы понять - почему, надо рассмотреть подробнее, что значит "доступ в систему" юзера.Обычный юзер может войти в систему (и пользоваться ее ресурсами) через терминал или по сети, с помощью telnet. При этом должна проработать программа login (которая проверит имя и пароль юзера и, если все правильно, запустит для него Shell). Эта же программа обычно вызывается для тех, кто заходит через модем и устанавливает IP соединение по модемной линии (PPP или SLIP). (Кстати, login'у можно запретить пропускать юзера, если прописать правильную строчку (запрещающую вход конкретному юзеру) в файле /etc/login.access. Как это правильно сделать, можно посмотреть в man login.access). Но, кроме того, юзер может (если, конечно, ваша система предоставляет такой сервис):

    Так вот. Проблема в том, что не все перечисленные демоны (программы-серверы), ответственные за допуск юзера к ресурсам, могут обращать внимание на "Account expiration time". И, следовательно, все равно дадут юзеру возможность воспользоваться своими услугами.

    Второй способ

    Другой способ "отсечь" юзера заключается в том, чтобы "испортить" ему пароль. Для этого достаточно добавить к зашифрованному паролю, хранящемуся в учетной карточке, один знак. Обычно, ставят знак "*" в начале пароля, поскольку этот знак не может встретиться в нормальном зашифрованном пароле и, во-первых, пароль в этом случае невозможно подобрать, а во-вторых, такое "искажение" пароля легче потом искать, когда вы будете возвращать юзера обратно. Сделать такую манипуляцию можно программой vipw или chpass. Этот способ надежно срабатывает во всех случаях, когда юзер пытается получить доступ в систему, независимо от того, через какую программу он это делает (он просто не знает теперь своего пароля).Недостаток этого способа в том, что он менее "цивилизованный". То есть, юзер просто получит сообщение о том, что он неправильно ввел свое имя или пароль, а не о том, что ему запрещен вход.Кроме того, есть случаи, когда этот способ не работает. Дело в том, что RPC-сервисы могут не проверять пароль, если у юзера в домашней директории в соответствующем файле (.rhosts) записаны адреса машин "пользующихся доверием" и он осуществляет доступ именно с этих машин. В этом случае, проверяется только адрес машины (и имя юзера под которым он зарегистрирован там), а пароль не запрашивается, следовательно, описанный метод не сработает. (Кстати, предыдущий метод ("account expiration") в этом случае должен работать.)

    Так как же все таки надо поступить?

    Способ с "испорченным" паролем более универсальный, но неправильный :-). Самый правильный путь - подбирать всех демонов таких, которые правильно отрабатывают запрет входа (например, через "account expiration"). Кстати, те демоны, которые у вас "с раздачи" (то есть, из "родного" дистрибутива), должны правильно обрабатывать такой запрет. Проблемы могут возникнуть только с программами от других разработчиков. Кроме того, для юзеров, запускающих "IP по модему", обычно, другой способ входа недоступен. Поэтому можно смело пользоваться "account expiration" или запретом в /etc/login.access.

    Возможно, еще один способ

    И, наконец, следует отметить, что в FreeBSD версии 2.2.2 появилась "база данных login-классов" (login class capability database), /etc/login.conf. Она предоставляет более гибкие возможности по ограничению входа. Можно не только полностью запретить вход юзеру, но разрешить только в определенное время суток или ограничить длительность сессии и т.п. Но, поскольку у меня нет опыта использования этой database, я пока не могу ничего сказать о надежности и универсальности запретов через нее. Скорее всего, о ней можно сказать все то же, что относится к методу "account expiration".(Когда я познакомлюсь с ней поближе, я, возможно, полностью перепишу этот текст :-).
     



     


    5 Приложения


     






    5.1  Что еще почитать?
    5.2 "Содержание дистрибутива FreeBSD"
     
     

    5.1 Что еще почитать?

    Естественно, man'уалы, имеющие отношение к теме.

    man 5 passwd - описывает структуру учетной карточки (user account)

    man adding_user - общие слова о добавлении юзера. Кстати, там есть рекомендации - каким должно быть Login name

    Утилиты для регистрации нового юзера. А, также, для удаления, изменения полей в учетной карточке и т.п.
    man pwd_mkdb
    man vipw
    man adduser
    man pw

    Утилиты для внесения изменений.
    man passwd - изменение пароля
    man chpass - другие изменения в учетной карточке
    man pw - тоже делает изменения в учетной карточке

    Утилиты для удаления юзера.
    man rmuser
    man pw

    К вопросу о временной блокировке входа юзеру.
    man login.access
    man login.conf

    А, также, в каждом из них есть раздел See Also (смотри также...). Их тоже можно почитать, хотя, в основном, они все ссылаются друг на друга.

    5.2 Содержание дистрибутива FreeBSD.

    В дереве каталогов дистрибутива FreeBSD все разложено по "полочкам"- директориям:

    bin
    основная часть FreeBSD (скорее всего, она у вас уже стоит)
    commerce
    коммерческие продукты для FreeBSD, естественно, там или demo, или shareware
    compat*
    этих может быть несколько, с разными цифрами на конце. Это дополнительные библиотеки, позволяющие запускать бинарники, странслированные в более старых версиях FreeBSD. Цифры на конце как раз указывают номер этой версии. Если у вас таких программ (именно в бинарном виде) нет, то и эти библиотеки вам не нужны.
    dict
    словарь для программы проверки грамматики.
    doc
    понятно по названию. Установленное оно лежит в /usr/share/doc. Там есть Handbook и FAQ в формате html и просто текстовом. И некоторые другие статьи и книги по юниксу.
    floppies
    образы загрузочных дискет. Если FreeBSD у вас уже стоит, туда можно не заглядывать.
    games
    понятно по названию.
    info
    еще одна документация. Она в особом гипертекстовом формате "GNU info". Учтите, что для ее чтения требуется специальная программа. Хотя, при большом желании, можно почитать и любым текстовым редактором/просмотрщиком.
    manpages
    основные man'уалы по системным утилитам и конфигам. Поскольку программа sysinstall настоятельно рекомендует их поставить при инсталляции, скорее всего, они у вас уже стоят в /usr/share/man.
    packages
    дополнительные приложения и библиотеки в бинарном формате. Смотри "Установка packages".
    ports
    "портированые" дополнительные приложения. Смотри "Установка ports"
    proflibs
    дополнительные библиотеки.
    src
    исходные тексты ядра и системных утилит. Поскольку, все исходники занимают много места, они разбиты на несколько независимых архивов, чтобы можно было взять только то, что вам действительно нужно. Подробнее об этом делении смотри ниже.
    tools
    это программки под DOS, нужные для того, чтобы создать загрузочные дискеты и почитать документацию из дистрибутива, пока у вас еще не развернут unix. Если FreeBSD у вас уже стоит, они вам не нужны.
    xperimnt
    экспериментальные пакеты (программы, драйверы и т.п.), которые разработчики сочли еще слишком сырыми, чтобы включить в основной дистрибутив.
    XF86**
    это X-Window. Это не часть FreeBSD, а отдельная надстройка над unix. Поэтому, об их развертывании - разговор отдельный.
    Как правило, в каждом таком разделе лежит соответствующий архив (чаще всего порезанный на небольшие куски). Исключение могут составлять commerce и xperimnt - там внутри свое деление на поддиректории для каждого продукта в отдельности. И, также, разделы src (исходные тексты всей ОС) и XF86... (система X-Window) остоят из нескольких архивов, так что вы можете выбрать там только те части, которые вам необходимы.

    Содержимое раздела src.

    Как я уже сказал, в этом разделе лежит целая пачка архивов (разбитых на отдельные кусочки). Название каждого начинается на букву "s" (очевидно, от слова source), а по остальным буквам можно догадаться - что именно находится в этом архиве. Исходные тексты программ, которые лежат в
    sbin
    /bin
    ssbin
    /sbin
    subin
    /usr/bin
    susbin
    /usr/sbin
    slibexec
    /usr/libexec (это, как правило, демоны)
    sgames
    это и так понятно
    Кроме того, программы, вошедшие в основной комплект, но взятые у других команд разработчиков могут быть в архивах :

    scontrib и sgnu

    (я так и не понял - по каким критериям их разделили, GNU'шные программы встречаются и в scontrib) Другие исходники:

    slib
    /usr/lib - библиотеки
    sinclude
    /usr/include - header файлы для языка C.
    ssys
    исходники ядра (kernel)
    slkm
    /lkm - дополнительные модули ядра, которые могут подгружаться в процессе работы системы, по необходимости.
    sbase
    здесь некоторые воспомогательные файлы, котрые лежат в корне всего дерева исходников. Они могут понадобиться только если вы захотите странслировать всю систему (со всеми утилитами) из исходников, или автоматически отслеживать все изменения, происходящие у разработчиков. Короче, для большинства людей вещь бесполезная.
    setc
    некоторые примеры для файлов из etc
    sshare
    /usr/share - на самом деле share это большая свалка, в смысле файлы очень разнородные (документация, макросы, разные таблицы для разных программ, некоторые примеры для программистов), так что - в двух словах не описать. Сам каталог /usr/share со всем содержимым ставится при установке системы, и его исходники, как правило, вам не понадобятся.
    smailcf
    это исходники для построения файла /etc/sendmail.cf (конфиг для sendmail). Зачастую, это вещь очень полезная. Но, если вы никогда раньше этого не делали (в смысле - собрать из них sendmail.cf), задача может оказаться весьма не простой.
    Иван Паскаль pascal@tsu.ru