Index: head/en_US.ISO8859-1/books/handbook/bsdinstall/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/bsdinstall/chapter.xml (revision 46820)
+++ head/en_US.ISO8859-1/books/handbook/bsdinstall/chapter.xml (revision 46821)
@@ -1,2733 +1,2733 @@
Installing &os; 9.X and
LaterJimMockRestructured, reorganized, and parts rewritten
by GavinAtkinsonUpdated for bsdinstall by WarrenBlockAllanJudeUpdated for root-on-ZFS by SynopsisinstallationBeginning with &os; 9.0-RELEASE, &os; provides an easy
to use, text-based installation
program named bsdinstall. This
chapter describes how to install &os; using
bsdinstall. The use of
sysinstall, which is the installation
program used by &os; 8.x, is covered in .In general, the installation instructions in this chapter
are written for the &i386; and AMD64
architectures. Where applicable, instructions specific to other
platforms will be listed. There may be minor differences
between the installer and what is shown here, so use this
chapter as a general guide rather than as a set of literal
instructions.Users who prefer to install &os; using a graphical
installer may be interested in
pc-sysinstall, the installer used
by the PC-BSD Project. It can be used to install either a
graphical desktop (PC-BSD) or a command line version of &os;.
Refer to the PC-BSD Users Handbook for details (http://wiki.pcbsd.org/index.php/PC-BSD%C2%AE_Users_Handbook/10.1).After reading this chapter, you will know:The minimum hardware requirements and &os; supported
architectures.How to create the &os; installation media.How to start
bsdinstall.The questions bsdinstall will
ask, what they mean, and how to answer them.How to troubleshoot a failed installation.How to access a live version of &os; before committing
to an installation.Before reading this chapter, you should:Read the supported hardware list that shipped with the
version of &os; to be installed and verify that the system's
hardware is supported.Minimum Hardware RequirementsThe hardware requirements to install &os; vary by the &os;
version and the hardware architecture. Hardware architectures
and devices supported by a &os; release are listed on the
Release Information page of the &os; web site (http://www.FreeBSD.org/releases/index.html).A &os; installation will require a minimum 64 MB of
RAM and 1.5 GB of free hard drive space
for the most minimal installation. However, that is a
minimal install, leaving almost no
free space. RAM requirements depend on usage. Specialized
FreeBSD systems can run in as little as 128MB RAM while desktop
systems should have at least 4 GB
of RAM.The processor requirements for each architecture can be
summarized as follows:&arch.amd64;This is the most common type of processor desktop and
laptop computers will have. Other vendors may call this
architecture x86-64.There are two primary vendors of &arch.amd64;
processors: &intel; (which produces
- Intel64 class processors) and AMD (which
- produces AMD64).
+ Intel64 class processors) and AMD
+ (which produces AMD64).
Examples of &arch.amd64; compatible processsors
include: &amd.athlon;64, &amd.opteron;,
multi-core &intel; &xeon;, and
&intel; &core; 2 and later processors.&arch.i386;This architecture is the 32-bit x86
architecture.Almost all i386-compatible processors with a floating
point unit are supported. All &intel; processors 486 or
higher are supported.&os; will take advantage of Physical Address
Extensions (PAE) support on
CPUs that support this feature. A
kernel with the PAE feature enabled
will detect memory above 4 GB and allow it to be used
by the system. This feature places constraints on the
device drivers and other features of &os; which may be
used; refer to &man.pae.4; for details.ia64Currently supported processors are the &itanium; and
the &itanium; 2. Supported chipsets include the HP zx1,
&intel; 460GX, and &intel; E8870. Both Uniprocessor
(UP) and Symmetric Multi-processor
(SMP) configurations are
supported.pc98NEC PC-9801/9821 series with almost all
i386-compatible processors, including 80486, &pentium;,
&pentium; Pro, and &pentium; II, are all supported. All
i386-compatible processors by AMD, Cyrix, IBM, and IDT are
also supported. EPSON PC-386/486/586 series, which are
compatible with NEC PC-9801 series, are supported. The
NEC FC-9801/9821 and NEC SV-98 series should be
supported.High-resolution mode is not supported. NEC
PC-98XA/XL/RL/XL^2, and NEC PC-H98 series are supported in
normal (PC-9801 compatible) mode only. The
SMP-related features of &os; are not
supported. The New Extend Standard Architecture
(NESA) bus used in the PC-H98, SV-H98,
and FC-H98 series, is not supported.&arch.powerpc;All New World ROM &apple;
&mac; systems with built-in USB
are supported. SMP is supported on
machines with multiple CPUs.A 32-bit kernel can only use the first 2 GB of
RAM.&arch.sparc64;Systems supported by &os;/&arch.sparc64; are listed at
the FreeBSD/sparc64 Project (http://www.freebsd.org/platforms/sparc.html).SMP is supported on all systems
with more than 1 processor. A dedicated disk is required
as it is not possible to share a disk with another
operating system at this time.Pre-Installation TasksOnce it has been determined that the system meets the
minimum hardware requirements for installing &os;, the
installation file should be downloaded and the installation
media prepared. Before doing this, check that the system is
ready for an installation by verifying the items in this
checklist:Back Up Important DataBefore installing any operating system,
always backup all important data first.
Do not store the backup on the system being installed.
Instead, save the data to a removable disk such as a
USB drive, another system on the network,
or an online backup service. Test the backup before
starting the installation to make sure it contains all of
the needed files. Once the installer formats the system's
disk, all data stored on that disk will be lost.Decide Where to Install &os;If &os; will be the only operating system installed,
this step can be skipped. But if &os; will share the disk
with another operating system, decide which disk or
partition will be used for &os;.In the &arch.i386; and &arch.amd64; architectures, disks
can be divided into multiple partitions using one of two
partitioning schemes. A traditional Master Boot
Record (MBR) holds a
partition table defining up to four primary
partitions. For historical reasons, &os;
calls these primary partition
slices. One of these primary
partitions can be made into an extended
partition containing multiple
logical partitions. The
GUID Partition Table
(GPT) is a newer and simpler method of
partitioning a disk. Common GPT
implementations allow up to 128 partitions per disk,
eliminating the need for logical partitions.Some older operating systems, like &windows; XP,
are not compatible with the GPT
partition scheme. If &os; will be sharing a disk with
such an operating system, MBR
partitioning is required.The &os; boot loader requires either a primary or
GPT partition. If all of the primary or
GPT partitions are already in use, one
must be freed for &os;. To create a partition without
deleting existing data, use a partition resizing tool to
shrink an existing partition and create a new partition
using the freed space.A variety of free and commercial partition resizing
tools are listed at http://en.wikipedia.org/wiki/List_of_disk_partitioning_software.
GParted Live (http://gparted.sourceforge.net/livecd.php)
is a free live CD which includes the
GParted partition editor.
GParted is also included with
many other Linux live CD
distributions.When used properly, disk shrinking utilities can
safely create space for creating a new partition. Since
the possibility of selecting the wrong partition exists,
always backup any important data and verify the integrity
of the backup before modifying disk partitions.Disk partitions containing different operating systems
make it possible to install multiple operating systems on
one computer. An alternative is to use virtualization
() which allows multiple
operating systems to run at the same time without modifying
any disk partitions.Collect Network InformationSome &os; installation methods require a network
connection in order to download the installation files.
After any installation, the installer will offer to setup
the system's network interfaces.If the network has a DHCP server, it
can be used to provide automatic network configuration. If
DHCP is not available, the following
network information for the system must be obtained from the
local network administrator or Internet service
provider:Required Network InformationIP addressSubnet maskIP address of default
gatewayDomain name of the networkIP addresses of the network's
DNS serversCheck for &os; ErrataAlthough the &os; Project strives to ensure that
each release of &os; is as stable as possible, bugs
occasionally creep into the process. On very rare occasions
those bugs affect the installation process. As these
problems are discovered and fixed, they are noted in the
&os; Errata (http://www.freebsd.org/releases/&rel.current;R/errata.html)
on the &os; web site. Check the errata before installing to
make sure that there are no problems that might affect the
installation.Information and errata for all the releases can be found
on the release information section of the &os; web site
(http://www.freebsd.org/releases/index.html).Prepare the Installation MediaThe &os; installer is not an application that can be run
from within another operating system. Instead, download a
&os; installation file, burn it to the media associated with
its file type and size (CD,
DVD, or USB), and boot
the system to install from the inserted media.&os; installation files are available at www.freebsd.org/where.html#download.
Each installation file's name includes the release version of
&os;, the architecture, and the type of file. For example, to
install &os; 10.0 on an &arch.amd64; system from a
DVD, download
FreeBSD-10.0-RELEASE-amd64-dvd1.iso, burn
this file to a DVD, and boot the system
with the DVD inserted.Several file types are available, though not all file
types are available for all architectures. The possible file
types are:-bootonly.iso: This is the smallest
installation file as it only contains the installer. A
working Internet connection is required during
installation as the installer will download the files it
needs to complete the &os; installation. This file should
be burned to a CD using a
CD burning application.-disc1.iso: This file contains all
of the files needed to install &os;, its source, and the
Ports Collection. It should be burned to a
CD using a CD
burning application.-dvd1.iso: This file contains all
of the files needed to install &os;, its source, and the
Ports Collection. It also contains a set of popular
binary packages for installing a window manager and some
applications so that a complete system can be installed
from media without requiring a connection to the Internet.
This file should be burned to a DVD
using a DVD burning application.-memstick.img: This file contains
all of the files needed to install &os;, its source, and
the Ports Collection. It should be burned to a
USB stick using the instructions
below.Also download CHECKSUM.SHA256 from
the same directory as the image file and use it to check the
image file's integrity by calculating a
checksum. &os; provides &man.sha256.1;
for this, while other operating systems have similar programs.
Compare the calculated checksum with the one shown in
CHECKSUM.SHA256. The checksums must
match exactly. If the checksums do not match, the file is
corrupt and should be downloaded again.Writing an Image File to USBThe *.img file is an
image of the complete contents of a
memory stick. It cannot be copied to
the target device as a file. Several applications are
available for writing the *.img to a
USB stick. This section describes two of
these utilities.Before proceeding, back up any important data on the
USB stick. This procedure will erase
the existing data on the stick.Using dd to Write the
ImageThis example uses /dev/da0 as
the target device where the image will be written. Be
very careful that the correct
device is used as this command will destroy the existing
data on the specified target device.The &man.dd.1; command-line utility is
available on BSD, &linux;, and &macos; systems. To burn
the image using dd, insert the
USB stick and determine its device
name. Then, specify the name of the downloaded
installation file and the device name for the
USB stick. This example burns the
&arch.amd64; installation image to the first
USB device on an existing &os;
system.&prompt.root; dd if=FreeBSD-10.0-RELEASE-amd64-memstick.img of=/dev/da0 bs=64kIf this command fails, verify that the
USB stick is not mounted and that the
device name is for the disk, not a partition. Some
operating systems might require this command to be run
with &man.sudo.8;. Systems like &linux; might buffer
writes. To force all writes to complete, use
&man.sync.8;.Using &windows; to Write the ImageBe sure to give the correct drive letter as the
existing data on the specified drive will be overwritten
and destroyed.Obtaining Image Writer for
&windows;Image Writer for
&windows; is a free application that can
correctly write an image file to a memory stick.
Download it from https://launchpad.net/win32-image-writer/
and extract it into a folder.Writing the Image with Image WriterDouble-click the
Win32DiskImager icon to start
the program. Verify that the drive letter shown under
Device is the drive
with the memory stick. Click the folder icon and select
the image to be written to the memory stick. Click
[ Save ] to accept the
image file name. Verify that everything is correct, and
that no folders on the memory stick are open in other
windows. When everything is ready, click
[ Write ] to write the
image file to the memory stick.You are now ready to start installing &os;.Starting the InstallationBy default, the installation will not make any changes to
the disk(s) before the following message:Your changes will now be written to disk. If you
have chosen to overwrite existing data, it will
be PERMANENTLY ERASED. Are you sure you want to
commit your changes?The install can be exited at any time prior to this
warning. If
there is a concern that something is incorrectly configured,
just turn the computer off before this point and no changes
will be made to the system's disks.This section describes how to boot the system from the
installation media which was prepared using the instructions in
. When using a
bootable USB stick, plug in the USB stick
before turning on the computer. When booting from
CD or DVD, turn on the
computer and insert the media at the first opportunity. How to
configure the system to boot from the inserted media depends
upon the architecture.Booting on &i386; and &arch.amd64;These architectures provide a BIOS
menu for selecting the boot device. Depending upon the
installation media being used, select the
CD/DVD or
USB device as the first boot device. Most
systems also provide a key for selecting the boot device
during startup without having to enter the
BIOS. Typically, the key is either
F10, F11,
F12, or Escape.If the computer loads the existing operating system
instead of the &os; installer, then either:The installation media was not inserted early enough
in the boot process. Leave the media inserted and try
restarting the computer.The BIOS changes were incorrect or
not saved. Double-check that the right boot device is
selected as the first boot device.This system is too old to support booting from the
chosen media. In this case, the Plop Boot
Manager ()
can be used to boot the system from the selected
media.Booting on &powerpc;On most machines, holding C on the
keyboard during boot will boot from the CD.
Otherwise, hold CommandOptionOF, or
WindowsAltOF on non-&apple; keyboards. At the
0 > prompt, enterboot cd:,\ppc\loader cd:0Booting on &sparc64;Most &sparc64; systems are set up to boot automatically
from disk. To install &os; from a CD
requires a break into the PROM.To do this, reboot the system and wait until the boot
message appears. The message depends on the model, but should
look something like this:Sun Blade 100 (UltraSPARC-IIe), Keyboard Present
Copyright 1998-2001 Sun Microsystems, Inc. All rights reserved.
OpenBoot 4.2, 128 MB memory installed, Serial #51090132.
Ethernet address 0:3:ba:b:92:d4, Host ID: 830b92d4.If the system proceeds to boot from disk at this point,
press L1A
or StopA
on the keyboard, or send a BREAK over the
serial console. When using tip or
cu, ~# will
issue a BREAK. The PROM prompt will be
ok on systems with one
CPU and ok {0} on
SMP systems, where the digit indicates the
number of the active CPU.At this point, place the CD into the
drive and type boot cdrom from the
PROM prompt.&os; Boot MenuOnce the system boots from the installation media, a menu
similar to the following will be displayed:&os; Boot Loader MenuBy default, the menu will wait ten seconds for user input
before booting into the &os; installer or, if &os; is already
installed, before booting into &os;. To pause the boot timer
in order to review the selections, press
Space. To select an option, press its
highlighted number, character, or key. The following options
are available.Boot Multi User: This will
continue the &os; boot process. If the boot timer has
been paused, press 1, upper- or
lower-case B, or
Enter.Boot Single User: This mode can be
used to fix an existing &os; installation as described in
. Press
2 or the upper- or lower-case
S to enter this mode.Escape to loader prompt: This will
boot the system into a repair prompt that contains a
limited number of low-level commands. This prompt is
described in . Press
3 or Esc to boot into
this prompt.Reboot: Reboots the system.Configure Boot Options: Opens the
menu shown in, and described under, .&os; Boot Options MenuThe boot options menu is divided into two sections. The
first section can be used to either return to the main boot
menu or to reset any toggled options back to their
defaults.The next section is used to toggle the available options
to On or Off by pressing
the option's highlighted number or character. The system will
always boot using the settings for these options until they
are modified. Several options can be toggled using this
menu:ACPI Support: If the system hangs
during boot, try toggling this option to
Off.Safe Mode: If the system still
hangs during boot even with ACPI
Support set to Off, try
setting this option to On.Single User: Toggle this option to
On to fix an existing &os; installation
as described in . Once
the problem is fixed, set it back to
Off.Verbose: Toggle this option to
On to see more detailed messages during
the boot process. This can be useful when troubleshooting
a piece of hardware.After making the needed selections, press
1 or Backspace to return to
the main boot menu, then press Enter to
continue booting into &os;. A series of boot messages will
appear as &os; carries out its hardware device probes and
loads the installation program. Once the boot is complete,
the welcome menu shown in will be displayed.Welcome MenuPress Enter to select the default of
[ Install ] to enter the
installer. The rest of this chapter describes how to use this
installer. Otherwise, use the right or left arrows or the
colorized letter to select the desired menu item. The
[ Shell ] can be used to
access a &os; shell in order to use command line utilities to
prepare the disks before installation. The
[ Live CD ] option can be
used to try out &os; before installing it. The live version
is described in .To review the boot messages, including the hardware
device probe, press the upper- or lower-case
S and then Enter to access
a shell. At the shell prompt, type more
/var/run/dmesg.boot and use the space bar to
scroll through the messages. When finished, type
exit to return to the welcome
menu.Using bsdinstallThis section shows the order of the
bsdinstall menus and the type of
information that will be asked before the system is installed.
Use the arrow keys to highlight a menu option, then
Space to select or deselect that menu item.
When finished, press Enter to save the
selection and move onto the next screen.Selecting the Keymap MenuDepending on the system console being used,
bsdinstall may initially display
the menu shown in .Keymap SelectionTo configure the keyboard layout, press
Enter with
[ YES ] selected, which will
display the menu shown in . To instead use the
default layout, use the arrow key to select
[ NO ] and press
Enter to skip this menu screen.Selecting Keyboard MenuWhen configuring the keyboard layout, use the up and down
arrows to select the keymap that most closely represents the
mapping of the keyboard attached to the system. Press
Enter to save the selection.Pressing Esc will exit this menu and
use the default keymap. If the choice of keymap is not
clear, United States of America
ISO-8859-1 is also a safe option.In &os; 10.0-RELEASE and later, this menu has been
enhanced. The full selection of keymaps is shown, with the
default preselected. In addition, when selecting a different
keymap, a dialog is displayed that allows the user to try the
keymap and ensure it is correct before proceeding.Enhanced Keymap MenuSetting the HostnameThe next bsdinstall menu is
used to set the hostname for the newly installed
system.Setting the HostnameType in a hostname that is unique for the network. It
should be a fully-qualified hostname, such as machine3.example.com.Selecting Components to InstallNext, bsdinstall will prompt to
select optional components to install.Selecting Components to InstallDeciding which components to install will depend largely
on the intended use of the system and the amount of disk space
available. The &os; kernel and userland, collectively known
as the base system, are always
installed. Depending on the architecture, some of these
components may not appear:doc - Additional documentation,
mostly of historical interest, to install into
/usr/share/doc. The documentation
provided by the FreeBSD Documentation Project may be
installed later using the instructions in .games - Several traditional
BSD games, including
fortune,
rot13, and others.lib32 - Compatibility libraries for
running 32-bit applications on a 64-bit version of
&os;.ports - The &os; Ports Collection
is a collection of files which automates the downloading,
compiling and installation of third-party software
packages. discusses how to use
the Ports Collection.The installation program does not check for
adequate disk space. Select this option only if
sufficient hard disk space is available. The &os; Ports
Collection takes up about &ports.size; of disk
space.src - The complete &os; source code
for both the kernel and the userland. Although not
required for the majority of applications, it may be
required to build device drivers, kernel modules, or some
applications from the Ports Collection. It is also used
for developing &os; itself. The full source tree requires
1 GB of disk space and recompiling the entire &os;
system requires an additional 5 GB of space.Installing from the NetworkThe menu shown in only appears when
installing from a -bootonly.iso
CD as this installation media does not hold
copies of the installation files. Since the installation
files must be retrieved over a network connection, this menu
indicates that the network interface must be first
configured.Installing from the NetworkTo configure the network connection, press
Enter and follow the instructions in . Once the
interface is configured, select a mirror site that is
located in the same region of the world as the computer on
which &os; is being installed. Files can be retrieved more
quickly when the mirror is close to the target computer,
reducing installation time.Choosing a MirrorInstallation will then continue as if the installation
files were located on the local installation media.Allocating Disk SpaceThe next menu is used to determine the method for
allocating disk space. The options available in the menu
depend upon the version of &os; being installed.Partitioning Choices on &os; 9.xPartitioning Choices on &os; 10.x and HigherGuided partitioning automatically sets up
the disk partitions, Manual partitioning
allows advanced users to create customized partitions from menu
options, and Shell opens a shell prompt where
advanced users can create customized partitions using
command-line utilities like &man.gpart.8;, &man.fdisk.8;, and
&man.bsdlabel.8;. ZFS partitioning, only
available in &os; 10 and later, creates an optionally encrypted
root-on-ZFS system with support for boot
environments.This section describes what to consider when laying out the
disk partitions. It then demonstrates how to use the different
partitioning methods.Designing the Partition Layoutpartition layout/etc/var/usrWhen laying out file systems, remember that hard drives
transfer data faster from the outer tracks to the inner.
Thus, smaller and heavier-accessed file systems should be
closer to the outside of the drive, while larger partitions
like /usr should be placed toward the
inner parts of the disk. It is a good idea to create
partitions in an order similar to: /,
swap, /var, and
/usr.The size of the /var partition
reflects the intended machine's usage. This partition is
used to hold mailboxes, log files, and printer spools.
Mailboxes and log files can grow to unexpected sizes
depending on the number of users and how long log files are
kept. On average, most users rarely need more than about a
gigabyte of free disk space in
/var.Sometimes, a lot of disk space is required in
/var/tmp. When new software is
installed, the packaging tools extract a temporary copy of
the packages under /var/tmp. Large
software packages, like Firefox,
OpenOffice or
LibreOffice may be tricky to
install if there is not enough disk space under
/var/tmp.The /usr partition holds many of the
files which support the system, including the &os; Ports
Collection and system source code. At least 2 gigabytes is
recommended for this partition.When selecting partition sizes, keep the space
requirements in mind. Running out of space in one partition
while barely using another can be a hassle.swap sizingswap partitionAs a rule of thumb, the swap partition should be about
double the size of physical memory (RAM).
Systems with minimal RAM may perform
better with more swap. Configuring too little swap can lead
to inefficiencies in the VM page scanning
code and might create issues later if more memory is
added.On larger systems with multiple SCSI
disks or multiple IDE disks operating on
different controllers, it is recommended that swap be
configured on each drive, up to four drives. The swap
partitions should be approximately the same size. The
kernel can handle arbitrary sizes but internal data structures
scale to 4 times the largest swap partition. Keeping the swap
partitions near the same size will allow the kernel to
optimally stripe swap space across disks. Large swap sizes
are fine, even if swap is not used much. It might be easier
to recover from a runaway program before being forced to
reboot.By properly partitioning a system, fragmentation
introduced in the smaller write heavy partitions will not
bleed over into the mostly read partitions. Keeping the
write loaded partitions closer to the disk's edge will
increase I/O performance in the
partitions where it occurs the most. While
I/O performance in the larger partitions
may be needed, shifting them more toward the edge of the disk
will not lead to a significant performance improvement over
moving /var to the edge.Guided PartitioningWhen this method is selected, a menu will display the
available disk(s). If multiple disks are connected, choose
the one where &os; is to be installed.Selecting from Multiple DisksOnce the disk is selected, the next menu prompts to
install to either the entire disk or to create a partition
using free space. If
[ Entire Disk ] is
chosen, a general partition layout filling the whole disk is
automatically created. Selecting
[ Partition ] creates a
partition layout from the unused space on the disk.Selecting Entire Disk or PartitionAfter the partition layout has been created, review it to
ensure it meets the needs of the installation. Selecting
[ Revert ] will reset the
partitions to their original values and pressing
[ Auto ] will recreate the
automatic &os; partitions. Partitions can also be manually
created, modified, or deleted. When the partitioning is
correct, select [ Finish ] to
continue with the installation.Review Created PartitionsManual PartitioningSelecting this method opens the partition editor:Manually Create PartitionsHighlight the installation drive
(ada0 in this example) and select
[ Create ] to display a menu
of available partition schemes:Manually Create PartitionsGPT is usually the most appropriate
choice for &arch.amd64; computers. Older computers that are
not compatible with GPT should use
MBR. The other partition schemes are
generally used for uncommon or older computers.
Partitioning SchemesAbbreviationDescriptionAPMApple Partition Map, used by &powerpc;.BSDBSD label without an
MBR, sometimes called
dangerously dedicated mode as
non-BSD disk utilities may not
recognize it.GPTGUID Partition Table (http://en.wikipedia.org/wiki/GUID_Partition_Table).MBRMaster Boot Record (http://en.wikipedia.org/wiki/Master_boot_record).PC98MBR variant used by NEC PC-98
computers (http://en.wikipedia.org/wiki/Pc9801).VTOC8Volume Table Of Contents used by Sun SPARC64 and
UltraSPARC computers.
After the partitioning scheme has been selected and
created, select [ Create ]
again to create the partitions.Manually Create PartitionsA standard &os; GPT installation uses
at least three partitions:freebsd-boot - Holds the &os; boot
code.freebsd-ufs - A &os;
UFS file system.freebsd-swap - &os; swap
space.Another partition type worth noting is
freebsd-zfs, used for partitions that will
contain a &os; ZFS file system (). Refer to &man.gpart.8; for
descriptions of the available GPT partition
types.Multiple file system partitions can be created and some
people prefer a traditional layout with separate partitions
for /, /var,
/tmp, and /usr. See
for an
example.The Size may be entered with common
abbreviations: K for kilobytes,
M for megabytes, or
G for gigabytes.Proper sector alignment provides the best performance,
and making partition sizes even multiples of 4K bytes helps
to ensure alignment on drives with either 512-byte or
4K-byte sectors. Generally, using partition sizes that are
even multiples of 1M or 1G is the easiest way to make sure
every partition starts at an even multiple of 4K. There is
one exception: the freebsd-boot
partition should be no larger than 512K due to current boot
code limitations.A Mountpoint is needed if the partition
will contain a file system. If only a single
UFS partition will be created, the
mountpoint should be /.The Label is a name by which the
partition will be known. Drive names or numbers can change if
the drive is connected to a different controller or port, but
the partition label does not change. Referring to labels
instead of drive names and partition numbers in files like
/etc/fstab makes the system more tolerant
to hardware changes. GPT labels appear in
/dev/gpt/ when a disk is attached. Other
partitioning schemes have different label capabilities and
their labels appear in different directories in
/dev/.Use a unique label on every partition to avoid
conflicts from identical labels. A few letters from the
computer's name, use, or location can be added to the label.
For instance, use labroot or
rootfslab for the UFS
root partition on the computer named
lab.Creating Traditional Split File System
PartitionsFor a traditional partition layout where the
/, /var,
/tmp, and /usr
directories are separate file systems on their own
partitions, create a GPT partitioning
scheme, then create the partitions as shown. Partition
sizes shown are typical for a 20G target disk. If more
space is available on the target disk, larger swap or
/var partitions may be useful. Labels
shown here are prefixed with ex for
example, but readers should use other unique
label values as described above.By default, &os;'s gptboot expects
the first UFS partition to be the
/ partition.Partition TypeSizeMountpointLabelfreebsd-boot512Kfreebsd-ufs2G/exrootfsfreebsd-swap4Gexswapfreebsd-ufs2G/varexvarfsfreebsd-ufs1G/tmpextmpfsfreebsd-ufsaccept the default (remainder of the
disk)/usrexusrfsAfter the custom partitions have been created, select
[ Finish ] to continue with
the installation.Root-on-ZFS Automatic PartitioningSupport for automatic creation of root-on-ZFS
installations was added in &os; 10.0-RELEASE. This
partitioning mode only works with whole disks and will erase
the contents of the entire disk. The installer will
automatically create partitions aligned to 4k boundaries and
force ZFS to use 4k sectors. This is safe
even with 512 byte sector disks, and has the added benefit of
ensuring that pools created on 512 byte disks will be able to
have 4k sector disks added in the future, either as additional
storage space or as replacements for failed disks. The
installer can also optionally employ GELI
disk encryption as described in .
If encryption is enabled, a 2 GB unencrypted boot pool
containing the /boot directory is
created. It holds the kernel and other files necessary to
boot the system. A swap partition of a user selectable size
is also created, and all remaining space is used for the
ZFS pool.The main ZFS configuration menu offers
a number of options to control the creation of the
pool.ZFS Partitioning MenuSelect T to configure the Pool
Type and the disk(s) that will constitute the
pool. The automatic ZFS installer
currently only supports the creation of a single top level
vdev, except in stripe mode. To create more complex pools,
use the instructions in to create the pool. The
installer supports the creation of various pool types,
including stripe (not recommended, no redundancy), mirror
(best performance, least usable space), and RAID-Z 1, 2, and 3
(with the capability to withstand the concurrent failure of 1,
2, and 3 disks, respectively). while selecting the pool type,
a tooltip is displayed across the bottom of the screen with
advice about the number of required disks, and in the case of
RAID-Z, the optimal number of disks for each
configuration.ZFS Pool TypeOnce a Pool Type has been selected, a
list of available disks is displayed, and the user is prompted
to select one or more disks to make up the pool. The
configuration is then validated, to ensure enough disks are
selected. If not, select <Change
Selection> to return to the list of disks, or
<Cancel> to change the pool
type.Disk SelectionInvalid SelectionIf one or more disks are missing from the list, or if
disks were attached after the installer was started, select
- Rescan Devices to repopulate the list
of available disks. To ensure that the correct disks are
selected, so as not to accidently destroy the wrong disks, the
- Disk Info menu can be used to inspect
each disk, including its partition table and various other
information such as the device model number and serial number,
if available.Analysing a DiskThe main ZFS configuration menu also
allows the user to enter a pool name, disable forcing 4k
sectors, enable or disable encryption, switch between
GPT (recommended) and
MBR partition table types, and select the
amount of swap space. Once all options have been set to the
desired values, select the
>>> Install option at the
top of the menu.If GELI disk encryption was enabled,
the installer will prompt twice for the passphrase to be used
to encrypt the disks.Disk Encryption PasswordThe installer then offers a last chance to cancel before
the contents of the selected drives are destroyed to create
the ZFS pool.Last ChanceThe installation then proceeds normally.Shell Mode PartitioningWhen creating advanced installations, the
bsdinstall paritioning menus may
not provide the level of flexibility required. Advanced users
can select the Shell option from the
partitioning menu in order to manually partition the drives,
create the file system(s), populate
/tmp/bsdinstall_etc/fstab, and mount the
file systems under /mnt. Once this is
done, type exit to return to
bsdinstall and continue the
installation.Committing to the InstallationOnce the disks are configured, the next menu provides the
last chance to make changes before the selected hard drive(s)
are formatted. If changes need to be made, select
[ Back ] to return to the main
partitioning menu.
[ Revert & Exit ]
will exit the installer without making any changes to the hard
drive.Final ConfirmationTo instead start the actual installation, select
[ Commit ] and press
Enter.Installation time will vary depending on the distributions
chosen, installation media, and speed of the computer. A series
of messages will indicate the progress.First, the installer formats the selected disk(s) and
initializes the partitions. Next, in the case of a bootonly
media, it downloads the selected components:Fetching Distribution FilesNext, the integrity of the distribution files is verified
to ensure they have not been corrupted during download or
misread from the installation media:Verifying Distribution FilesFinally, the verified distribution files are extracted to
the disk:Extracting Distribution FilesOnce all requested distribution files have been extracted,
bsdinstall displays the first
post-installation configuration screen. The available
post-configuration options are described in the next
section.Post-InstallationOnce &os; is installed,
bsdinstall will prompt to configure
several options before booting into the newly installed system.
This section describes these configuration options.Once the system has booted,
bsdconfig provides a menu-driven method for
configuring the system using these and additional
options.Setting the root PasswordFirst, the root
password must be set. While entering the password, the
characters being typed are not displayed on the screen. After
the password has been entered, it must be entered again. This
helps prevent typing errors.Setting the root PasswordConfiguring Network InterfacesNext, a list of the network interfaces found on the
computer is shown. Select the interface to configure.The network configuration menus will be skipped if the
network was previously configured as part of a
bootonly installation.Choose a Network InterfaceIf an Ethernet interface is selected, the installer will
skip ahead to the menu shown in . If a wireless
network interface is chosen, the system will instead scan for
wireless access points:Scanning for Wireless Access PointsWireless networks are identified by a Service Set
Identifier (SSID), a short, unique name
given to each network. SSIDs found during
the scan are listed, followed by a description of the
encryption types available for that network. If the desired
SSID does not appear in the list, select
[ Rescan ] to scan again. If
the desired network still does not appear, check for problems
with antenna connections or try moving the computer closer to
the access point. Rescan after each change is made.Choosing a Wireless NetworkNext, enter the encryption information for connecting to
the selected wireless network. WPA2
encryption is strongly recommended as older encryption types,
like WEP, offer little security. If the
network uses WPA2, input the password, also
known as the Pre-Shared Key (PSK). For
security reasons, the characters typed into the input box are
displayed as asterisks.WPA2 SetupNext, choose whether or not an IPv4
address should be configured on the Ethernet or wireless
interface:Choose IPv4 NetworkingThere are two methods of IPv4
configuration. DHCP will automatically
configure the network interface correctly and should be used
if the network provides a DHCP server.
Otherwise, the addressing information needs to be input
manually as a static configuration.Do not enter random network information as it will not
work. If a DHCP server is not available,
obtain the information listed in from
the network administrator or Internet service
provider.If a DHCP server is available, select
[ Yes ] in the next menu to
automatically configure the network interface. The installer
will appear to pause for a minute or so as it finds the
DHCP server and obtains the addressing
information for the system.Choose IPv4 DHCP
ConfigurationIf a DHCP server is not available,
select [ No ] and input the
following addressing information in this menu:IPv4 Static ConfigurationIP Address - The
IPv4 address assigned to this computer.
The address must be unique and not already in use by
another piece of equipment on the local network.Subnet Mask - The subnet mask for
the network.Default Router - The
IP address of the network's default
gateway.The next screen will ask if the interface should be
configured for IPv6. If
IPv6 is available and desired, choose
[ Yes ] to select it.Choose IPv6 NetworkingIPv6 also has two methods of
configuration. StateLess Address AutoConfiguration
(SLAAC) will automatically request the
correct configuration information from a local router. Refer
to http://tools.ietf.org/html/rfc4862
for more information. Static configuration requires manual
entry of network information.If an IPv6 router is available, select
[ Yes ] in the next menu to
automatically configure the network interface. The installer
will appear to pause for a minute or so as it finds the router
and obtains the addressing information for the system.Choose IPv6 SLAAC ConfigurationIf an IPv6 router is not available,
select [ No ] and input the
following addressing information in this menu:IPv6 Static ConfigurationIPv6 Address - The
IPv6 address assigned to this computer.
The address must be unique and not already in use by
another piece of equipment on the local network.Default Router - The
IPv6 address of the network's default
gateway.The last network configuration menu is used to configure
the Domain Name System (DNS) resolver,
which converts hostnames to and from network addresses. If
DHCP or SLAAC was used
to autoconfigure the network interface, the Resolver
Configuration values may already be filled in.
Otherwise, enter the local network's domain name in the
Search field. DNS #1
and DNS #2 are the IPv4
and/or IPv6 addresses of the
DNS servers. At least one
DNS server is required.DNS ConfigurationSetting the Time ZoneThe next menu asks if the system clock uses
UTC or local time. When in doubt, select
[ No ] to choose the more
commonly-used local time.Select Local or UTC ClockThe next series of menus are used to determine the correct
local time by selecting the geographic region, country, and
time zone. Setting the time zone allows the system to
automatically correct for regional time changes, such as
daylight savings time, and perform other time zone related
functions properly.The example shown here is for a machine located in the
Eastern time zone of the United States. The selections will
vary according to the geographical location.Select a RegionThe appropriate region is selected using the arrow keys
and then pressing Enter.Select a CountrySelect the appropriate country using the arrow keys and
press Enter.Select a Time ZoneThe appropriate time zone is selected using the arrow keys
and pressing Enter.Confirm Time ZoneConfirm the abbreviation for the time zone is correct. If
it is, press Enter to continue with the
post-installation configuration.Enabling ServicesThe next menu is used to configure which system services
will be started whenever the system boots. All of these
services are optional. Only start the services that are
needed for the system to function.Selecting Additional Services to EnableHere is a summary of the services which can be enabled in
this menu:sshd - The Secure Shell
(SSH) daemon is used to remotely access
a system over an encrypted connection. Only enable this
service if the system should be available for remote
logins.moused - Enable this service if the
mouse will be used from the command-line system
console.ntpd - The Network Time Protocol
(NTP) daemon for automatic clock
synchronization. Enable this service if there is a
&windows;, Kerberos, or LDAP server on
the network.powerd - System power control
utility for power control and energy saving.Enabling Crash DumpsThe next menu is used to configure whether or not crash
dumps should be enabled. Enabling crash dumps can be useful
in debugging issues with the system, so users are encouraged
to enable crash dumps.Enabling Crash DumpsAdd UsersThe next menu prompts to create at least one user account.
It is recommended to login to the system using a user account
rather than as root.
When logged in as root, there are essentially no
limits or protection on what can be done. Logging in as a
normal user is safer and more secure.Select [ Yes ] to add new
users.Add User AccountsFollow the prompts and input the requested information for
the user account. The example shown in creates the asample user account.Enter User InformationHere is a summary of the information to input:Username - The name the user will
enter to log in. A common convention is to use the first
letter of the first name combined with the last name, as
long as each username is unique for the system. The
username is case sensitive and should not contain any
spaces.Full name - The user's full name.
This can contain spaces and is used as a description for
the user account.Uid - User ID.
Typically, this is left blank so the system will assign a
value.Login group - The user's group.
Typically this is left blank to accept the default.Invite user into
other groups? - Additional groups to which the
user will be added as a member. If the user needs
administrative access, type wheel
here.Login class - Typically left blank
for the default.Shell - Type in one of the listed
values to set the interactive shell for the user. Refer
to for more information about
shells.Home directory - The user's home
directory. The default is usually correct.Home directory permissions -
Permissions on the user's home directory. The default is
usually correct.Use password-based authentication?
- Typically yes so that the user is
prompted to input their password at login.Use an empty password? -
Typically no as it is insecure to have
a blank password.Use a random password? - Typically
no so that the user can set their own
password in the next prompt.Enter password - The password for
this user. Characters typed will not show on the
screen.Enter password again - The password
must be typed again for verification.Lock out the account after
creation? - Typically no so
that the user can login.After entering everything, a summary is shown for review.
If a mistake was made, enter no and try
again. If everything is correct, enter yes
to create the new user.Exit User and Group ManagementIf there are more users to add, answer the Add
another user? question with
yes. Enter no to finish
adding users and continue the installation.For more information on adding users and user management,
see .Final ConfigurationAfter everything has been installed and configured, a
final chance is provided to modify settings.Final ConfigurationUse this menu to make any changes or do any additional
configuration before completing the installation.Add User - Described in .Root Password - Described in .Hostname - Described in .Network - Described in .Services - Described in .Time Zone - Described in .Handbook - Download and install the
&os; Handbook.After any final configuration is complete, select
Exit.Manual Configurationbsdinstall will prompt if there
are any additional configuration that needs to be done before
rebooting into the new system. Select
[ Yes ] to exit to a shell
within the new system or
[ No ] to proceed to the last
step of the installation.Complete the InstallationIf further configuration or special setup is needed,
select [ Live CD ] to
boot the install media into Live CD
mode.If the installation is complete, select
[ Reboot ] to reboot the
computer and start the new &os; system. Do not forget to
remove the &os; install media or the computer may boot from it
again.As &os; boots, informational messages are displayed.
After the system finishes booting, a login prompt is
displayed. At the login: prompt, enter the
username added during the installation. Avoid logging in as
root. Refer to
for instructions on how to
become the superuser when administrative access is
needed.The messages that appeared during boot can be reviewed by
pressing Scroll-Lock to turn on the
scroll-back buffer. The PgUp,
PgDn, and arrow keys can be used to scroll
back through the messages. When finished, press
Scroll-Lock again to unlock the display and
return to the console. To review these messages once the
system has been up for some time, type less
/var/run/dmesg.boot from a command prompt. Press
q to return to the command line after
viewing.If sshd was enabled in , the first boot may be
a bit slower as the system will generate the
RSA and DSA keys.
Subsequent boots will be faster. The fingerprints of the keys
will be displayed, as seen in this example:Generating public/private rsa1 key pair.
Your identification has been saved in /etc/ssh/ssh_host_key.
Your public key has been saved in /etc/ssh/ssh_host_key.pub.
The key fingerprint is:
10:a0:f5:af:93:ae:a3:1a:b2:bb:3c:35:d9:5a:b3:f3 root@machine3.example.com
The key's randomart image is:
+--[RSA1 1024]----+
| o.. |
| o . . |
| . o |
| o |
| o S |
| + + o |
|o . + * |
|o+ ..+ . |
|==o..o+E |
+-----------------+
Generating public/private dsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
The key fingerprint is:
7e:1c:ce:dc:8a:3a:18:13:5b:34:b5:cf:d9:d1:47:b2 root@machine3.example.com
The key's randomart image is:
+--[ DSA 1024]----+
| .. . .|
| o . . + |
| . .. . E .|
| . . o o . . |
| + S = . |
| + . = o |
| + . * . |
| . . o . |
| .o. . |
+-----------------+
Starting sshd.Refer to for more information
about fingerprints and SSH.&os; does not install a graphical environment by default.
Refer to for more information about
installing and configuring a graphical window manager.Proper shutdown of a &os; computer helps protect data and
hardware from damage. Do not turn off the power
before the system has been properly shut down! If
the user is a member of the wheel group, become the
superuser by typing su at the command line
and entering the root password. Then, type
shutdown -p now and the system will shut
down cleanly, and if the hardware supports it, turn itself
off.TroubleshootinginstallationtroubleshootingThis section covers basic installation
troubleshooting, such as common problems people have
reported.Check the Hardware Notes (http://www.freebsd.org/releases/index.html)
document for the version of &os; to make sure the hardware is
supported. If the hardware is supported and lock-ups or other
problems occur, build a custom kernel using the instructions in
to add support for devices which
are not present in the GENERIC kernel. The
default kernel assumes that most hardware devices are in their
factory default configuration in terms of
IRQs, I/O addresses, and
DMA channels. If the hardware has been
reconfigured, a custom kernel configuration file can tell &os;
where to find things.Some installation problems can be avoided or alleviated by
updating the firmware on various hardware components, most
notably the motherboard. Motherboard firmware is usually
referred to as the BIOS. Most motherboard
and computer manufacturers have a website for upgrades and
upgrade information.Manufacturers generally advise against upgrading the
motherboard BIOS unless there is a good
reason for doing so, like a critical update. The upgrade
process can go wrong, leaving the
BIOS incomplete and the computer
inoperative.If the system hangs while probing hardware during boot, or
it behaves strangely during install, ACPI may
be the culprit. &os; makes extensive use of the system
ACPI service on the &arch.i386;,
&arch.amd64;, and ia64 platforms to aid in system configuration
if it is detected during boot. Unfortunately, some bugs still
exist in both the ACPI driver and within
system motherboards and BIOS firmware.
ACPI can be disabled by setting the
hint.acpi.0.disabled hint in the third stage
boot loader:set hint.acpi.0.disabled="1"This is reset each time the system is booted, so it is
necessary to add hint.acpi.0.disabled="1" to
the file /boot/loader.conf. More
information about the boot loader can be found in .Using the Live CDThe welcome menu of bsdinstall,
shown in , provides a
[ Live CD ] option. This
is useful for those who are still wondering whether &os; is the
right operating system for them and want to test some of the
features before installing.The following points should be noted before using the
[ Live CD ]:To gain access to the system, authentication is
required. The username is root and the password is
blank.As the system runs directly from the installation media,
performance will be significantly slower than that of a
system installed on a hard disk.This option only provides a command prompt and not a
graphical interface.
Index: head/en_US.ISO8859-1/books/handbook/desktop/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/desktop/chapter.xml (revision 46820)
+++ head/en_US.ISO8859-1/books/handbook/desktop/chapter.xml (revision 46821)
@@ -1,1128 +1,1131 @@
Desktop ApplicationsSynopsisWhile &os; is popular as a server for its performance and
stability, it is also suited for day-to-day use as a desktop.
With over &os.numports; applications available as &os; packages
or ports, it is easy to build a customized desktop that runs
a wide variety of desktop applications. This chapter
demonstrates how to install numerous desktop applications,
including web browsers, productivity software, document viewers,
and financial software.Users who prefer to install a pre-built desktop version
of FreeBSD rather than configuring one from scratch should
refer to the pcbsd.org
website.Readers of this chapter should know how to:Install additional software using packages or
ports as described in .Install X and a window manager as described in .For information on how to configure a multimedia
environment, refer to .Browsersbrowsersweb&os; does not come with a pre-installed web browser.
Instead, the www
category of the Ports Collection contains many browsers which
can be installed as a package or compiled from the Ports
Collection.The KDE and
GNOME desktop environments include
their own HTML browser. Refer to
for more information on how to set up these complete
desktops.Some light-weight browsers include
www/dillo2, www/links, and
www/w3m.This section demonstrates how to install the following
popular web browsers and indicates if the application is
resource-heavy, takes time to compile from ports, or has any
major dependencies.Application NameResources NeededInstallation from PortsNotesFirefoxmediumheavy&os;, &linux;, and localized versions are
availableOperalightlight&os; and &linux; versions are availableKonquerormediumheavyRequires KDE
librariesChromiummediumheavyRequires Gtk+FirefoxFirefoxFirefox is an open source
browser that is fully ported to &os;. It features a
standards-compliant HTML display engine, tabbed browsing,
popup blocking, extensions, improved security, and more.
Firefox is based on the
Mozilla codebase.To install the package of the latest release version of
Firefox, type:&prompt.root; pkg install firefoxTo instead install Firefox
Extended Support Release (ESR) version, use:&prompt.root; pkg install firefox-esrLocalized versions are available in
www/firefox-i18n and
www/firefox-esr-i18n.The Ports Collection can instead be used to compile the
desired version of Firefox from
source code. This example builds
www/firefox, where
firefox can be replaced with the ESR or
localized version to install.&prompt.root; cd /usr/ports/www/firefox
&prompt.root; make install cleanFirefox and &java; PluginThe installation of
Firefox does not include &java;
support. However, java/icedtea-web
provides a free software web browser plugin for running Java
applets. It can be installed as a package. To alternately
compile the port:&prompt.root; cd /usr/ports/java/icedtea-web
&prompt.root; make install cleanKeep the default configuration options when compiling the
port.Once installed, start firefox,
enter about:plugins in the location bar and
press Enter. A page listing the installed
plugins will be displayed. The
&java; plugin should be
listed.If the browser is unable to find the plugin, each user
will have to run the following command and relaunch the
browser:&prompt.user; ln -s /usr/local/lib/IcedTeaPlugin.so \
$HOME/.mozilla/plugins/Firefox and &adobe; &flash; PluginFlashA native &adobe; &flash; plugin is not available for &os;.
However, a software wrapper for running the &linux; version
of the plugin is available. This wrapper also provides
support for other browser plugins such as &realplayer;.To install and enable this plugin, perform these
steps:
- Install www/nspluginwrapper from the
- port. Due to licensing restrictions, a package is not
- available. This port requires
+ Install www/nspluginwrapper from the port.
+ Due to licensing restrictions, a package is not available.
+ This port requires
emulators/linux_base-c6.
- Install www/linux-c6-flashplugin11
- from the port. Due to licensing restrictions, a package
- is not available.
+ Install www/linux-c6-flashplugin11 from
+ the port. Due to licensing restrictions, a package is not
+ available.Before the plugin is first used, each user must
run:&prompt.user; nspluginwrapper -v -a -iWhen the plugin port has been updated and reinstalled,
each user must run:&prompt.user; nspluginwrapper -v -a -uStart the browser, enter
about:plugins in the location bar and
press Enter. A list of all the currently
available plugins will be shown.Firefox and Swfdec &flash; PluginSwfdec is a decoder and
renderer for &flash; animations.
Swfdec-Mozilla is a plugin for
Firefox browsers that uses the
Swfdec library for playing SWF files.To install the package:&prompt.root; pkg install swfdec-pluginIf the package is not available, compile and install it
from the Ports Collection:&prompt.root; cd /usr/ports/www/swfdec-plugin
&prompt.root; make install cleanRestart the browser to activate this plugin.OperaOperaOpera is a full-featured and
standards-compliant browser which is still lightweight and
fast. It comes with a built-in mail and news reader, an IRC
client, an RSS/Atom feeds reader, and more. It is available
as a native &os; version and as a version that runs under
&linux; emulation.This command installs the package of the &os; version of
Opera. Replace
opera with linux-opera
to instead install the &linux; version.&prompt.root; pkg install operaAlternately, install either version through the Ports
Collection. This example compiles the native version:&prompt.root; cd /usr/ports/www/opera
&prompt.root; make install cleanTo install the &linux; version, substitute
linux-opera in place of
opera.To install &adobe; &flash; plugin support, first compile
- the www/linux-c6-flashplugin11 port.
- Licensing restrictions prevent making a package available.
- Then install www/opera-linuxplugins.
- This example compiles both applications from ports:
+ the www/linux-c6-flashplugin11
+ port. Licensing restrictions prevent making a package
+ available. Then install www/opera-linuxplugins. This example
+ compiles both applications from ports:
&prompt.root; cd /usr/ports/www/linux-c6-flashplugin11
&prompt.root; make install clean
&prompt.root; cd /usr/ports/www/opera-linuxplugins
&prompt.root; make install cleanOnce installed, check the presence of the plugin by
starting the browser, entering
opera:plugins in the location bar and
pressing Enter. A list should appear with
all the currently available plugins.To add the &java; plugin,
follow the instructions in .KonquerorKonquerorKonqueror is more than a web
browser as it is also a file manager and a multimedia
viewer. It is included in the
x11/kde4-baseapps package or port.Konqueror supports WebKit as
well as its own KHTML. WebKit is a rendering engine used by
many modern browsers including Chromium. To use WebKit with
Konqueror on &os;, install the
www/kwebkitpart package
or port. This example compiles the port:&prompt.root; cd /usr/ports/www/kwebkitpart
&prompt.root; make install cleanTo enable WebKit within
Konqueror, click
Settings, Configure Konqueror.
In the General settings page, click the
drop-down menu next to Default web browser
engine and change KHTML to
WebKit.Konqueror also supports
&flash;. A How To
guide for getting &flash; support
on Konqueror is available at http://freebsd.kde.org/howtos/konqueror-flash.php.ChromiumChromiumChromium is an open source
browser project that aims to build a safer, faster, and more
stable web browsing experience.
Chromium features tabbed browsing,
popup blocking, extensions, and much more.
Chromium is the open source project
upon which the Google Chrome web browser is based.Chromium can be installed as a
package by typing:&prompt.root; pkg install chromiumAlternatively, Chromium can be
compiled from source using the Ports Collection:&prompt.root; cd /usr/ports/www/chromium
&prompt.root; make install cleanThe executable for Chromium
is /usr/local/bin/chrome, not
/usr/local/bin/chromium.Chromium and &java; PluginThe installation of
Chromium does not include &java;
support. To install &java; plugin support, follow the
instructions in .Once &java; support is installed, start
Chromium and enter
about:plugins in the address bar.
IcedTea-Web should be listed as one of the installed
plugins.If Chromium does not display
the IcedTea-Web plugin, run the following commands and
restart the web browser:&prompt.root; mkdir -p /usr/local/share/chromium/plugins
&prompt.root; ln -s /usr/local/lib/IcedTeaPlugin.so \
/usr/local/share/chromium/plugins/Chromium and &adobe; &flash; PluginConfiguring Chromium and
&adobe; &flash; is similar to the instructions in
. No additional
configuration should be necessary, since
Chromium is able to use some
plugins from other browsers.ProductivityWhen it comes to productivity, new users often look for an
office suite or an easy-to-use word processor. While some
desktop environments like
KDE provide an office suite, there
is no default productivity package. Several office suites and
graphical word processors are available for &os;, regardless
of the installed window manager.This section demonstrates how to install the following
popular productivity software and indicates if the application
is resource-heavy, takes time to compile from ports, or has any
major dependencies.Application NameResources NeededInstallation from PortsMajor DependenciesCalligralightheavyKDEAbiWordlightlightGtk+ or
GNOMEThe GimplightheavyGtk+Apache
OpenOfficeheavyhuge&jdk; and
MozillaLibreOfficesomewhat heavyhugeGtk+, or
KDE/
GNOME, or
&jdk;CalligraCalligraoffice suiteCalligraThe KDE desktop environment includes
an office suite which can be installed separately from
KDE.
Calligra includes standard
components that can be found in other office suites.
Words is the word processor,
Sheets is the spreadsheet program,
Stage manages slide presentations,
and Karbon is used to draw
graphical documents.In &os;, editors/calligra can be
installed as a package or a port. To install the
package:&prompt.root; pkg install calligraIf the package is not available, use the Ports Collection
instead:&prompt.root; cd /usr/ports/editors/calligra
&prompt.root; make install cleanAbiWordAbiWordAbiWord is a free word
processing program similar in look and feel to
µsoft; Word. It is fast,
contains many features, and is user-friendly.AbiWord can import or export
many file formats, including some proprietary ones like
µsoft; .rtf.To install the AbiWord
package:&prompt.root; pkg install abiwordIf the package is not available, it can be compiled from
the Ports Collection:&prompt.root; cd /usr/ports/editors/abiword
&prompt.root; make install cleanThe GIMPThe GIMPFor image authoring or picture retouching,
The GIMP provides a sophisticated
image manipulation program. It can be used as a simple paint
program or as a quality photo retouching suite. It supports a
large number of plugins and features a scripting interface.
The GIMP can read and write a wide
range of file formats and supports interfaces with scanners
and tablets.To install the package:&prompt.root; pkg install gimpAlternately, use the Ports Collection:&prompt.root; cd /usr/ports/graphics/gimp
&prompt.root; make install cleanThe graphics category (freebsd.org/ports/graphics.html)
of the Ports Collection contains several
GIMP-related plugins, help files,
and user manuals.Apache OpenOfficeApache OpenOfficeoffice suiteApache OpenOfficeApache OpenOffice is an open
source office suite which is developed under the wing of the
Apache Software Foundation's Incubator. It includes all of
the applications found in a complete office productivity
suite: a word processor, spreadsheet, presentation manager,
and drawing program. Its user interface is similar to other
office suites, and it can import and export in various popular
file formats. It is available in a number of different
languages and internationalization has been extended to
interfaces, spell checkers, and dictionaries.The word processor of Apache
OpenOffice uses a native XML file format for
increased portability and flexibility. The spreadsheet
program features a macro language which can be interfaced
with external databases. Apache
OpenOffice is stable and runs natively on
&windows;, &solaris;, &linux;, &os;, and &macos; X.
More information about Apache
OpenOffice can be found at openoffice.org.
For &os; specific information refer to porting.openoffice.org/freebsd/.To install the Apache
OpenOffice package:&prompt.root; pkg install apache-openofficeOnce the package is installed, type the following command
to launch Apache OpenOffice:&prompt.user; openoffice-X.Y.Zwhere X.Y.Z is the version
number of the installed version of Apache
OpenOffice. The first time
Apache OpenOffice launches, some
questions will be asked and a
.openoffice.org folder will be created in
the user's home directory.If the desired Apache
OpenOffice package is not available, compiling
the port is still an option. However, this requires a lot of
disk space and a fairly long time to compile:&prompt.root; cd /usr/ports/editors/openoffice-4
&prompt.root; make install cleanTo build a localized version, replace the previous
command with:&prompt.root; make LOCALIZED_LANG=your_language install cleanReplace
your_language with the correct
language ISO-code. A list of supported language codes is
available in
files/Makefile.localized, located in
the port's directory.LibreOfficeLibreOfficeoffice suiteLibreOfficeLibreOffice is a free software
office suite developed by documentfoundation.org.
It is compatible with other major office suites and available
on a variety of platforms. It is a rebranded fork of
OpenOffice.org and includes
applications found in a complete office productivity suite:
a word processor, spreadsheet, presentation manager, drawing
program, database management program, and a tool for creating
and editing mathematical formulæ. It is available in
a number of different languages and internationalization has
been extended to interfaces, spell checkers, and
dictionaries.The word processor of
LibreOffice uses a native XML file
format for increased portability and flexibility. The
spreadsheet program features a macro language which can be
interfaced with external databases.
LibreOffice is stable and runs
natively on &windows;, &linux;, &os;, and &macos; X.
More information about LibreOffice
can be found at libreoffice.org.To install the English version of the
LibreOffice package:&prompt.root; pkg install libreofficeThe editors category (freebsd.org/ports/editors.html)
of the Ports Collection contains several localizations for
LibreOffice. When installing a
localized package, replace libreoffice
with the name of the localized package.Once the package is installed, type the following command
to run LibreOffice:&prompt.user; libreofficeDuring the first launch, some questions will be asked
and a .libreoffice folder will be created
in the user's home directory.If the desired LibreOffice
package is not available, compiling the port is still an
option. However, this requires a lot of disk space and a
fairly long time to compile. This example compiles the
English version:&prompt.root; cd /usr/ports/editors/libreoffice
&prompt.root; make install cleanTo build a localized version,
cd into the port directory of
the desired language. Supported languages can be found
in the editors category (freebsd.org/ports/editors.html)
of the Ports Collection.Document ViewersSome new document formats have gained popularity since
the advent of &unix; and the viewers they require may not be
available in the base system. This section demonstrates how to
install the following document viewers:Application NameResources NeededInstallation from PortsMajor DependenciesXpdflightlightFreeTypegvlightlightXaw3dGQviewlightlightGtk+ or
GNOMEePDFViewlightlightGtk+OkularlightheavyKDEXpdfXpdfPDFviewingFor users that prefer a small &os; PDF viewer,
Xpdf provides a light-weight and
efficient viewer which requires few resources. It uses the
standard X fonts and does not require any additional
toolkits.To install the Xpdf
package:&prompt.root; pkg install xpdfIf the package is not available, use the Ports
Collection:&prompt.root; cd /usr/ports/graphics/xpdf
&prompt.root; make install cleanOnce the installation is complete, launch
xpdf and use the right mouse button to
activate the menu.gvgvPDFviewingPostScriptviewinggv is a &postscript; and PDF
viewer. It is based on ghostview,
but has a nicer look as it is based on the
Xaw3d widget toolkit.
gv has many configurable features,
such as orientation, paper size, scale, and anti-aliasing.
Almost any operation can be performed with either the
keyboard or the mouse.To install gv as a
package:&prompt.root; pkg install gvIf a package is unavailable, use the Ports
Collection:&prompt.root; cd /usr/ports/print/gv
&prompt.root; make install cleanGQviewGQviewGQview is an image manager
which supports viewing a file with a single click, launching
an external editor, and thumbnail previews. It also features
a slideshow mode and some basic file operations, making it
easy to manage image collections and to find duplicate files.
GQview supports full screen viewing
and internationalization.To install the GQview
package:&prompt.root; pkg install gqviewIf the package is not available, use the Ports
Collection:&prompt.root; cd /usr/ports/graphics/gqview
&prompt.root; make install cleanePDFViewePDFViewPDFviewingePDFView is a lightweight
PDF document viewer that only uses the
Gtk+ and
Poppler libraries. It is currently
under development, but already opens most
PDF files (even encrypted), save copies of
documents, and has support for printing using
CUPS.To install ePDFView as a
package:&prompt.root; pkg install epdfviewIf a package is unavailable, use the Ports
Collection:&prompt.root; cd /usr/ports/graphics/epdfview
&prompt.root; make install cleanOkularOkularPDFviewingOkular is a universal document
viewer based on KPDF for
KDE. It can open many document
formats, including PDF, &postscript;, DjVu,
CHM, XPS, and
ePub.To install Okular as a
package:&prompt.root; pkg install okularIf a package is unavailable, use the Ports
Collection:&prompt.root; cd /usr/ports/graphics/okular
&prompt.root; make install cleanFinanceFor managing personal finances on a &os; desktop, some
powerful and easy-to-use applications can be installed. Some
are compatible with widespread file formats, such as the formats
used by Quicken and
Excel.This section covers these programs:Application NameResources NeededInstallation from PortsMajor DependenciesGnuCashlightheavyGNOMEGnumericlightheavyGNOMEKMyMoneylightheavyKDEGnuCashGnuCashGnuCash is part of the
GNOME effort to provide
user-friendly, yet powerful, applications to end-users.
GnuCash can be used to keep track
of income and expenses, bank accounts, and stocks. It
features an intuitive interface while remaining
professional.GnuCash provides a smart
register, a hierarchical system of accounts, and many keyboard
accelerators and auto-completion methods. It can split a
single transaction into several more detailed pieces.
GnuCash can import and merge
Quicken QIF files. It also handles
most international date and currency formats.To install the GnuCash
package:&prompt.root; pkg install gnucashIf the package is not available, use the Ports
Collection:&prompt.root; cd /usr/ports/finance/gnucash
&prompt.root; make install cleanGnumericGnumericspreadsheetGnumericGnumeric is a spreadsheet
program developed by the GNOME
community. It features convenient automatic guessing of user
input according to the cell format with an autofill system
for many sequences. It can import files in a number of
popular formats, including Excel,
Lotus 1-2-3, and
Quattro Pro. It has a large number
of built-in functions and allows all of the usual cell formats
such as number, currency, date, time, and much more.To install Gnumeric as a
package:&prompt.root; pkg install gnumericIf the package is not available, use the Ports
Collection:&prompt.root; cd /usr/ports/math/gnumeric
&prompt.root; make install cleanKMyMoneyKMyMoneyspreadsheetKMyMoneyKMyMoney is a personal finance
application created by the KDE
community. KMyMoney aims to
provide the important features found in commercial personal
finance manager applications. It also highlights ease-of-use
and proper double-entry accounting among its features.
KMyMoney imports from standard
Quicken QIF files, tracks
investments, handles multiple currencies, and provides a
wealth of reports.To install KMyMoney as a
package:&prompt.root; pkg install kmymoney-kde4If the package is not available, use the Ports
Collection:&prompt.root; cd /usr/ports/finance/kmymoney-kde4
&prompt.root; make install clean
Index: head/en_US.ISO8859-1/books/handbook/eresources/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/eresources/chapter.xml (revision 46820)
+++ head/en_US.ISO8859-1/books/handbook/eresources/chapter.xml (revision 46821)
@@ -1,2377 +1,2378 @@
Resources on the InternetThe rapid pace of &os; progress makes print media
impractical as a means of following the latest developments.
Electronic resources are the best, if not often the only, way to
stay informed of the latest advances. Since &os; is a volunteer
effort, the user community itself also generally serves as a
technical support department of sorts, with
electronic mail, web forums, and USENET news being the most
effective way of reaching that community.The most important points of contact with the &os; user
community are outlined below. Please send other resources not
mentioned here to the &a.doc; so that they may also be
included.WebsitesThe
&os; Forums provide a web based discussion forum
for &os; questions and technical
discussion.Planet
&os; offers an aggregation feed of dozens of blogs
written by &os; developers. Many developers use this to
post quick notes about what they are working on, new
patches, and other works in progress.The BSDConferences
YouTube Channel provides a collection of high
quality videos from BSD conferences around the world.
This is a great way to watch key developers give
presentations about new work in &os;.Mailing ListsThe mailing lists are the most direct way of addressing
questions or opening a technical discussion to a concentrated
&os; audience. There are a wide variety of lists on a number of
different &os; topics. Sending questions to the most
appropriate mailing list will invariably assure a faster and
more accurate response.The charters for the various lists are given at the bottom
of this document. Please read the charter before
joining or sending mail to any list. Most list
subscribers receive many hundreds of &os; related messages every
day, and the charters and rules for use are meant to keep the
signal-to-noise ratio of the lists high. To do less would see
the mailing lists ultimately fail as an effective communications
medium for the Project.To test the ability to send email to &os; lists,
send a test message to &a.test.name;. Please do
not send test messages to any other list.When in doubt about what list to post a question to, see
How to get
best results from the FreeBSD-questions mailing
list.Before posting to any list, please learn about how to best
use the mailing lists, such as how to help avoid
frequently-repeated discussions, by reading the
Mailing List
Frequently Asked Questions (FAQ) document.Archives are kept for all of the mailing lists and can be
searched using the
&os; World Wide
Web server. The keyword searchable archive offers an
excellent way of finding answers to frequently asked questions
and should be consulted before posting a question. Note that
this also means that messages sent to &os; mailing lists are
archived in perpetuity. When protecting privacy is a concern,
consider using a disposable secondary email address and posting
only public information.List SummaryGeneral lists: The following are
general lists which anyone is free (and encouraged) to
join:ListPurpose&a.advocacy.name;&os; Evangelism&a.announce.name;Important events and Project milestones
(moderated)&a.arch.name;Architecture and design discussions&a.bugbusters.name;Discussions pertaining to the maintenance of
the &os; problem report database and related
tools&a.bugs.name;Bug reports&a.chat.name;Non-technical items related to the &os;
community&a.chromium.name;&os;-specific Chromium issues&a.current.name;Discussion concerning the use of
&os.current;&a.isp.name;Issues for Internet Service Providers using
&os;&a.jobs.name;&os; employment and consulting
opportunities&a.questions.name;User questions and technical support&a.security-notifications.name;Security notifications (moderated)&a.stable.name;Discussion concerning the use of
&os.stable;&a.test.name;Where to send test messages instead of to
one of the actual listsTechnical lists: The following lists
are for technical discussion. Read the charter for each list
carefully before joining or sending mail to one as there are
firm guidelines for their use and content.ListPurpose&a.acpi.name;ACPI and power management development&a.afs.name;Porting AFS to &os;&a.aic7xxx.name;Developing drivers for the &adaptec;
AIC 7xxx&a.amd64.name;Porting &os; to AMD64 systems (moderated)&a.apache.name;Discussion about
Apache related
ports&a.arm.name;Porting &os; to &arm; processors&a.atm.name;Using ATM networking with &os;&a.bluetooth.name;Using &bluetooth; technology in &os;&a.cluster.name;Using &os; in a clustered environment&a.database.name;Discussing database use and development under
&os;&a.desktop.name;Using and improving &os; on the desktop&a.doc.name;Creating &os; related documents&a.drivers.name;Writing device drivers for &os;&a.dtrace.name;Using and working on DTrace in &os;&a.eclipse.name;&os; users of Eclipse IDE, tools, rich client
applications and ports.&a.embedded.name;Using &os; in embedded applications&a.eol.name;Peer support of &os;-related software that
is no longer supported by the &os; Project.&a.emulation.name;Emulation of other systems such as
Linux/&ms-dos;/&windows;&a.enlightenment.name;Porting Enlightenment
and Enlightenment
applications&a.firewire.name;&os; &firewire; (iLink, IEEE 1394) technical
discussion&a.fortran.name;Fortran on &os;&a.fs.name;File systems&a.games.name;Support for Games on &os;&a.gecko.name;Gecko Rendering
Engine issues&a.geom.name;GEOM-specific discussions and
implementations&a.git.name;Discussion of git use in the &os; project&a.gnome.name;Porting GNOME and
GNOME applications&a.hackers.name;General technical discussion&a.hardware.name;General discussion of hardware for running
&os;&a.i18n.name;&os; Internationalization&a.ia32.name;&os; on the IA-32 (&intel; x86)
platform&a.ia64.name;Porting &os; to &intel;'s upcoming IA64
systems&a.infiniband.name;Infiniband on &os;&a.ipfw.name;Technical discussion concerning the redesign
of the IP firewall code&a.isdn.name;ISDN developers&a.jail.name;Discussion about the &man.jail.8;
facility&a.java.name;&java; developers and people porting &jdk;s to
&os;&a.lfs.name;Porting LFS to &os;&a.mips.name;Porting &os; to &mips;&a.mobile.name;Discussions about mobile computing&a.mono.name;Mono and C# applications on &os;&a.multimedia.name;Multimedia applications&a.newbus.name;Technical discussions about bus
architecture&a.net.name;Networking discussion and TCP/IP source
code&a.numerics.name;Discussions of high quality implementation of
libm functions&a.office.name;Office applications on &os;&a.performance.name;Performance tuning questions for high
performance/load installations&a.perl.name;Maintenance of a number of
Perl-related ports&a.pf.name;Discussion and questions about the packet filter
firewall system&a.pkg.name;Binary package management and package
tools discussion&a.pkg-fallout.name;Fallout logs from package building&a.platforms.name;Concerning ports to non &intel; architecture
platforms&a.ports.name;Discussion of the Ports Collection&a.ports-announce.name;Important news and instructions about the Ports
Collection (moderated)&a.ports-bugs.name;Discussion of the ports bugs/PRs&a.ppc.name;Porting &os; to the &powerpc;&a.proliant.name;Technical discussion of &os; on HP ProLiant
server platforms&a.python.name;&os;-specific Python issues&a.rc.name;Discussion related to the
rc.d system and its
development&a.realtime.name;Development of realtime extensions to
&os;&a.ruby.name;&os;-specific Ruby discussions&a.scsi.name;The SCSI subsystem&a.security.name;Security issues affecting &os;&a.small.name;Using &os; in embedded applications
(obsolete; use &a.embedded.name; instead)&a.snapshots.name;&os; Development Snapshot Announcements&a.sparc.name;Porting &os; to &sparc; based systems&a.standards.name;&os;'s conformance to the C99 and the &posix;
standards&a.sysinstall.name;&man.sysinstall.8; development&a.tcltk.name;&os;-specific Tcl/Tk discussions&a.testing.name;Testing on &os;&a.tex.name;Porting TeX and its
applications to &os;&a.threads.name;Threading in &os;&a.tilera.name;Porting &os; to the Tilera family of
CPUs&a.tokenring.name;Support Token Ring in &os;&a.toolchain.name;Maintenance of &os;'s integrated
toolchain&a.translators.name;Translating &os; documents and programs&a.usb.name;Discussing &os; support for USB&a.virtualization.name;Discussion of various virtualization techniques
supported by &os;&a.vuxml.name;Discussion on VuXML infrastructure&a.x11.name;Maintenance and support of X11 on &os;&a.xen.name;Discussion of the &os; port to &xen; —
implementation and usage&a.xfce.name;XFCE for &os; —
porting and maintaining&a.zope.name;Zope for &os; —
porting and maintainingLimited lists: The following lists
are for more specialized (and demanding) audiences and are
probably not of interest to the general public. It is also a
good idea to establish a presence in the technical lists
before joining one of these limited lists in order to
understand the communications etiquette involved.ListPurpose&a.hubs.name;People running mirror sites (infrastructural
support)&a.usergroups.name;User group coordination&a.wip-status.name;&os; Work-In-Progress Status&a.wireless.name;Discussions of 802.11 stack, tools, device driver
developmentDigest lists: All of the above lists
are available in a digest format. Once subscribed to a list,
the digest options can be changed in the account options
section.SVN lists: The following lists are
for people interested in seeing the log messages for changes
to various areas of the source tree. They are
Read-Only lists and should not have mail
sent to them.ListSource areaArea Description (source for)&a.svn-doc-all.name;/usr/docAll changes to the doc Subversion repository
(except for user,
projects and
translations)&a.svn-doc-head.name;/usr/docAll changes to the head branch of
the doc Subversion repository&a.svn-doc-projects.name;/usr/doc/projectsAll changes to the projects
area of the doc Subversion repository&a.svn-doc-svnadmin.name;/usr/docAll changes to the administrative scripts, hooks,
and other configuration data of the doc Subversion
repository&a.svn-ports-all.name;/usr/portsAll changes to the ports Subversion
repository&a.svn-ports-head.name;/usr/portsAll changes to the head branch
of the ports Subversion repository&a.svn-ports-svnadmin.name;/usr/portsAll changes to the administrative scripts, hooks,
and other configuration data of the ports Subversion
repository&a.svn-src-all.name;/usr/srcAll changes to the src Subversion repository
(except for user
and projects)&a.svn-src-head.name;/usr/srcAll changes to the head branch
of the src Subversion repository (the &os;-CURRENT
branch)&a.svn-src-projects.name;/usr/projectsAll changes to the projects
area of the src Subversion repository&a.svn-src-release.name;/usr/srcAll changes to the releases
area of the src Subversion repository&a.svn-src-releng.name;/usr/srcAll changes to the releng
branches of the src Subversion repository (the
security / release engineering branches)&a.svn-src-stable.name;/usr/srcAll changes to the all stable branches of the src
Subversion repository&a.svn-src-stable-6.name;/usr/srcAll changes to the stable/6
branch of the src Subversion repository&a.svn-src-stable-7.name;/usr/srcAll changes to the stable/7
branch of the src Subversion repository&a.svn-src-stable-8.name;/usr/srcAll changes to the stable/8
branch of the src Subversion repository&a.svn-src-stable-9.name;/usr/srcAll changes to the stable/9
branch of the src Subversion repository&a.svn-src-stable-10.name;/usr/srcAll changes to the stable/10
branch of the src Subversion repository&a.svn-src-stable-other.name;/usr/srcAll changes to the
older stable branches of the src
Subversion repository&a.svn-src-svnadmin.name;/usr/srcAll changes to the administrative scripts, hooks,
and other configuration data of the src Subversion
repository&a.svn-src-user.name;/usr/srcAll changes to the
experimental user area of the src
Subversion repository&a.svn-src-vendor.name;/usr/srcAll changes to the vendor work area of the src
Subversion repositoryHow to SubscribeTo subscribe to a list, click the list name at
&a.mailman.lists.link;. The page that is displayed should
contain all of the necessary subscription instructions for
that list.To actually post to a given list, send mail to
listname@FreeBSD.org.
It will then be redistributed to mailing list members
world-wide.To unsubscribe from a list, click on the URL found at the
bottom of every email received from the list. It is also
possible to send an email to
listname-unsubscribe@FreeBSD.org
to unsubscribe.It is important to keep discussion in the technical
mailing lists on a technical track. To only receive important
announcements, instead join the &a.announce;, which is
intended for infrequent traffic.List ChartersAll &os; mailing lists have certain
basic rules which must be adhered to by anyone using them.
Failure to comply with these guidelines will result in two (2)
written warnings from the &os; Postmaster
postmaster@FreeBSD.org, after which, on a third
offense, the poster will removed from all &os; mailing lists
and filtered from further posting to them. We regret that
such rules and measures are necessary at all, but today's
Internet is a pretty harsh environment, it would seem, and
many fail to appreciate just how fragile some of its
mechanisms are.Rules of the road:The topic of any posting should adhere to the basic
charter of the list it is posted to. If the list is about
technical issues, the posting should contain technical
discussion. Ongoing irrelevant chatter or flaming only
detracts from the value of the mailing list for everyone
on it and will not be tolerated. For free-form discussion
on no particular topic, the &a.chat; is freely available
and should be used instead.No posting should be made to more than 2 mailing
lists, and only to 2 when a clear and obvious need to post
to both lists exists. For most lists, there is already a
great deal of subscriber overlap and except for the most
esoteric mixes (say -stable & -scsi),
there really is no reason to post to more than one list at
a time. If a message is received with multiple mailing
lists on the Cc line, trim the
Cc line before replying. The
person who replies is still responsible for
cross-posting, no matter who the originator might have
been.Personal attacks and profanity (in the context of an
argument) are not allowed, and that includes users and
developers alike. Gross breaches of netiquette, like
excerpting or reposting private mail when permission to do
so was not and would not be forthcoming, are frowned upon
but not specifically enforced.
However, there are also very few
cases where such content would fit within the charter of a
list and it would therefore probably rate a warning (or
ban) on that basis alone.Advertising of non-&os; related products or services
is strictly prohibited and will result in an immediate ban
if it is clear that the offender is advertising by
spam.Individual list charters:&a.acpi.name;ACPI and power management
development&a.afs.name;Andrew File SystemThis list is for discussion on porting and using
AFS from CMU/Transarc&a.announce.name;Important events /
milestonesThis is the mailing list for people interested only
in occasional announcements of significant &os; events.
This includes announcements about snapshots and other
releases. It contains announcements of new &os;
capabilities. It may contain calls for volunteers etc.
This is a low volume, strictly moderated mailing
list.&a.arch.name;Architecture and design
discussionsThis list is for discussion of the &os;
architecture. Messages will mostly be kept strictly
technical in nature. Examples of suitable topics
are:How to re-vamp the build system to have several
customized builds running at the same time.What needs to be fixed with VFS to make
Heidemann layers work.How do we change the device driver interface
to be able to use the same drivers cleanly on many
buses and architectures.How to write a network driver.&a.bluetooth.name;&bluetooth; in &os;This is the forum where &os;'s &bluetooth; users
congregate. Design issues, implementation details,
patches, bug reports, status reports, feature requests,
and all matters related to &bluetooth; are fair
game.&a.bugbusters.name;Coordination of the Problem Report
handling effortThe purpose of this list is to serve as a
coordination and discussion forum for the Bugmeister,
his Bugbusters, and any other parties who have a genuine
interest in the PR database. This list is not for
discussions about specific bugs, patches or PRs.&a.bugs.name;Bug reportsThis is the mailing list for reporting bugs in &os;.
Whenever possible, bugs should be submitted using the
web
interface to it.&a.chat.name;Non technical items related to the &os;
communityThis list contains the overflow from the other lists
about non-technical, social information. It includes
discussion about whether Jordan looks like a toon ferret
or not, whether or not to type in capitals, who is
drinking too much coffee, where the best beer is brewed,
who is brewing beer in their basement, and so on.
Occasional announcements of important events (such as
upcoming parties, weddings, births, new jobs, etc) can
be made to the technical lists, but the follow ups
should be directed to this -chat list.&a.chromium.name;&os;-specific Chromium
issuesThis is a list for the discussion of Chromium
support for &os;. This is a technical list to
discuss development and installation of Chromium.&a.core.name;&os; core teamThis is an internal mailing list for use by the core
members. Messages can be sent to it when a serious
&os;-related matter requires arbitration or
high-level scrutiny.&a.current.name;Discussions about the use of
&os.current;This is the mailing list for users of &os.current;.
It includes warnings about new features coming out in
-CURRENT that will affect the users, and instructions
on steps that must be taken to remain -CURRENT. Anyone
running CURRENT must subscribe to this
list. This is a technical mailing list for which
strictly technical content is expected.&a.desktop.name;Using and improving &os; on the
desktopThis is a forum for discussion of &os; on the
desktop. It is primarily a place for desktop porters
and users to discuss issues and improve &os;'s desktop
support.&a.doc.name;Documentation ProjectThis mailing list is for the discussion of issues
and projects related to the creation of documentation
for &os;. The members of this mailing list are
collectively referred to as The &os;
Documentation Project. It is an open list; feel
free to join and contribute!&a.drivers.name;Writing device drivers for
&os;This is a forum for technical discussions related to
device drivers on &os;. It is primarily a place for
device driver writers to ask questions about how to
write device drivers using the APIs in the &os;
kernel.&a.dtrace.name;Using and working on DTrace in
&os;DTrace is an integrated component of &os; that
provides a framework for understanding the kernel as
well as user space programs at run time. The mailing
list is an archived discussion for developers of the
code as well as those using it.&a.eclipse.name;&os; users of Eclipse IDE, tools, rich
client applications and ports.The intention of this list is to provide mutual
support for everything to do with choosing, installing,
using, developing and maintaining the Eclipse IDE,
tools, rich client applications on the &os; platform and
assisting with the porting of Eclipse IDE and plugins to
the &os; environment.The intention is also to facilitate exchange of
information between the Eclipse community and the &os;
community to the mutual benefit of both.Although this list is focused primarily on the needs
of Eclipse users it will also provide a forum for those
who would like to develop &os; specific applications
using the Eclipse framework.&a.embedded.name;Using &os; in embedded
applicationsThis list discusses topics related to using &os; in
embedded systems. This is a technical mailing list for
which strictly technical content is expected. For the
purpose of this list, embedded systems are those
computing devices which are not desktops and which
usually serve a single purpose as opposed to being
general computing environments. Examples include, but
are not limited to, all kinds of phone handsets, network
equipment such as routers, switches and PBXs, remote
measuring equipment, PDAs, Point Of Sale systems, and so
on.&a.emulation.name;Emulation of other systems such as
Linux/&ms-dos;/&windows;This is a forum for technical discussions related
to running programs written for other operating systems
on &os;.&a.enlightenment.name;EnlightenmentDiscussions concerning the
Enlightenment Desktop
Environment for &os; systems. This is a technical
mailing list for which strictly technical content is
expected.&a.eol.name;Peer support of &os;-related software
that is no longer supported by the &os;
Project.This list is for those interested in providing or
making use of peer support of &os;-related software for
which the &os; Project no longer provides official
support in the form of security advisories and
patches.&a.firewire.name;&firewire; (iLink, IEEE
1394)This is a mailing list for discussion of the design
and implementation of a &firewire; (aka IEEE 1394 aka
iLink) subsystem for &os;. Relevant topics specifically
include the standards, bus devices and their protocols,
adapter boards/cards/chips sets, and the architecture
and implementation of code for their proper
support.&a.fortran.name;Fortran on &os;This is the mailing list for discussion of Fortran
related ports on &os;: compilers, libraries, scientific
and engineering applications from laptops to HPC
clusters.&a.fs.name;File systemsDiscussions concerning &os; filesystems. This is a
technical mailing list for which strictly technical
content is expected.&a.games.name;Games on &os;This is a technical list for discussions related to
bringing games to &os;. It is for individuals actively
working on porting games to &os;, to bring up problems
or discuss alternative solutions. Individuals
interested in following the technical discussion are
also welcome.&a.gecko.name;Gecko Rendering EngineThis is a forum about
Gecko applications using
&os;.Discussion centers around Gecko Ports applications,
their installation, their development and their support
within &os;.&a.geom.name;GEOMDiscussions specific to GEOM and related
implementations. This is a technical mailing list for
which strictly technical content is expected.&a.git.name;Use of git in the &os;
projectDiscussions of how to use git in &os;
infrastructure including the github mirror and other
uses of git for project collaboration. Discussion area
for people using git against the &os; github mirror.
People wanting to get started with the mirror or git
in general on &os; can ask here.&a.gnome.name;GNOMEDiscussions concerning The
GNOME Desktop Environment
for &os; systems. This is a technical mailing list
for which strictly technical content is expected.&a.infiniband.name;Infiniband on &os;Technical mailing list discussing Infiniband, OFED,
and OpenSM on &os;.&a.ipfw.name;IP FirewallThis is the forum for technical discussions
concerning the redesign of the IP firewall code in
&os;. This is a technical mailing list for which
strictly technical content is expected.&a.ia64.name;Porting &os; to IA64This is a technical mailing list for individuals
actively working on porting &os; to the IA-64 platform
from &intel;, to bring up problems or discuss
alternative solutions. Individuals interested in
following the technical discussion are also
welcome.&a.isdn.name;ISDN CommunicationsThis is the mailing list for people discussing the
development of ISDN support for &os;.&a.java.name;&java; DevelopmentThis is the mailing list for people discussing the
development of significant &java; applications for &os;
and the porting and maintenance of &jdk;s.&a.jobs.name;Jobs offered and soughtThis is a forum for posting employment notices
specifically related to &os; and resumes from those
seeking &os;-related employment. This is
not a mailing list for general
employment issues since adequate forums for that already
exist elsewhere.Note that this list, like other FreeBSD.org
mailing lists, is distributed worldwide. Be clear about
the geographic location and the extent to which
telecommuting or assistance with relocation is
available.Email should use open formats only —
preferably plain text, but basic Portable Document
Format (PDF), HTML, and a few others
are acceptable to many readers. Closed formats such as
µsoft; Word (.doc) will be
rejected by the mailing list server.&a.kde.name;KDEDiscussions concerning
KDE on &os; systems.
This is a technical mailing list for which strictly
technical content is expected.&a.hackers.name;Technical discussionsThis is a forum for technical discussions related
to &os;. This is the primary technical mailing list.
It is for individuals actively working on &os;, to bring
up problems or discuss alternative solutions.
Individuals interested in following the technical
discussion are also welcome. This is a technical
mailing list for which strictly technical content is
expected.&a.hardware.name;General discussion of &os;
hardwareGeneral discussion about the types of hardware that
&os; runs on, various problems and suggestions
concerning what to buy or avoid.&a.hubs.name;Mirror sitesAnnouncements and discussion for people who run &os;
mirror sites.&a.isp.name;Issues for Internet Service
ProvidersThis mailing list is for discussing topics relevant
to Internet Service Providers (ISPs) using &os;. This
is a technical mailing list for which strictly technical
content is expected.&a.mono.name;Mono and C# applications on
&os;This is a list for discussions related to the Mono
development framework on &os;. This is a technical
mailing list. It is for individuals actively working on
porting Mono or C# applications to &os;, to bring up
problems or discuss alternative solutions. Individuals
interested in following the technical discussion are
also welcome.&a.office.name;Office applications on
&os;Discussion centers around office applications, their
installation, their development and their support within
&os;.&a.ops-announce.name;Project Infrastructure
AnnouncementsThis is the mailing list for people interested in
changes and issues related to the FreeBSD.org Project
infrastructure.This moderated list is strictly for announcements:
no replies, requests, discussions, or opinions.&a.performance.name;Discussions about tuning or speeding up
&os;This mailing list exists to provide a place for
hackers, administrators, and/or concerned parties to
discuss performance related topics pertaining to &os;.
Acceptable topics includes talking about &os;
installations that are either under high load, are
experiencing performance problems, or are pushing the
limits of &os;. Concerned parties that are willing to
work toward improving the performance of &os; are highly
encouraged to subscribe to this list. This is a highly
technical list ideally suited for experienced &os;
users, hackers, or administrators interested in keeping
&os; fast, robust, and scalable. This list is not a
question-and-answer list that replaces reading through
documentation, but it is a place to make contributions
or inquire about unanswered performance related
topics.&a.pf.name;Discussion and questions about the packet
filter firewall systemDiscussion concerning the packet filter (pf)
firewall system in terms of &os;. Technical discussion
and user questions are both welcome. This list is also
a place to discuss the ALTQ QoS framework.&a.pkg.name;Binary package management and package
tools discussionDiscussion of all aspects of managing &os; systems
by using binary packages to install software, including
binary package toolkits and formats, their development
and support within &os;, package repository management,
and third party packages.Note that discussion of ports which fail to generate
packages correctly should generally be considered as
ports problems, and so inappropriate for this
list.&a.pkg-fallout.name;Fallout logs from package
buildingAll packages building failures logs from the package
building clusters&a.platforms.name;Porting to Non &intel;
platformsCross-platform &os; issues, general discussion and
proposals for non &intel; &os; ports. This is a
technical mailing list for which strictly technical
content is expected.&a.ports.name;Discussion of
portsDiscussions concerning &os;'s ports
collection (/usr/ports),
ports infrastructure, and general ports coordination
efforts. This is a technical mailing list for which
strictly technical content is expected.&a.ports-announce.name;Important news and instructions about the
&os; Ports
CollectionImportant news for developers, porters, and users of
the Ports Collection
(/usr/ports), including
architecture/infrastructure changes, new capabilities,
critical upgrade instructions, and release engineering
information. This is a low-volume mailing list,
intended for announcements.&a.ports-bugs.name;Discussion of
ports bugsDiscussions concerning problem reports for &os;'s
ports collection
(/usr/ports), proposed ports, or
modifications to ports. This is a technical mailing
list for which strictly technical content is
expected.&a.proliant.name;Technical discussion of &os; on HP
ProLiant server platformsThis mailing list is to be used for the technical
discussion of the usage of &os; on HP ProLiant servers,
including the discussion of ProLiant-specific drivers,
management software, configuration tools, and BIOS
updates. As such, this is the primary place to discuss
the hpasmd, hpasmcli, and hpacucli modules.&a.python.name;Python on &os;This is a list for discussions related to improving
Python-support on &os;. This is a technical mailing
list. It is for individuals working on porting Python,
its third party modules and
Zope stuff to &os;.
Individuals interested in following the technical
discussion are also welcome.&a.questions.name;User questionsThis is the mailing list for questions about &os;.
Do not send how to questions to the
technical lists unless the question is quite
technical.&a.ruby.name;&os;-specific Ruby
discussionsThis is a list for discussions related to the Ruby
support on &os;. This is a technical mailing list. It
is for individuals working on Ruby ports, third party
libraries and frameworks.Individuals interested in the technical discussion
are also welcome.&a.scsi.name;SCSI subsystemThis is the mailing list for people working on the
SCSI subsystem for &os;. This is a technical mailing
list for which strictly technical content is
expected.&a.security.name;Security issues&os; computer security issues (DES, Kerberos, known
security holes and fixes, etc). This is a technical
mailing list for which strictly technical discussion is
expected. Note that this is not a question-and-answer
list, but that contributions (BOTH question AND answer)
to the FAQ are welcome.&a.security-notifications.name;Security NotificationsNotifications of &os; security problems and fixes.
This is not a discussion list. The discussion list is
FreeBSD-security.&a.small.name;Using &os; in embedded
applicationsThis list discusses topics related to unusually
small and embedded &os; installations. This is a
technical mailing list for which strictly technical
content is expected.This list has been obsoleted by
&a.embedded.name;.&a.snapshots.name;&os; Development Snapshot
AnnouncementsThis list provides notifications about the
availability of new &os; development snapshots for the
head/ and stable/ branches.&a.stable.name;Discussions about the use of
&os.stable;This is the mailing list for users of &os.stable;.
STABLE is the branch where development
- continues after a RELEASE, including bug fixes and new features.
- The ABI is kept stable for binary compatibility.
- It includes warnings about new features coming out in
- -STABLE that will affect the users, and instructions on
- steps that must be taken to remain -STABLE. Anyone
- running STABLE should subscribe to this
- list. This is a technical mailing list for which
- strictly technical content is expected.
+ continues after a RELEASE, including bug fixes and new
+ features. The ABI is kept stable for binary
+ compatibility. It includes warnings about new features
+ coming out in -STABLE that will affect the users, and
+ instructions on steps that must be taken to remain
+ -STABLE. Anyone running STABLE should
+ subscribe to this list. This is a technical mailing
+ list for which strictly technical content is
+ expected.
&a.standards.name;C99 & POSIX
ConformanceThis is a forum for technical discussions related to
&os; Conformance to the C99 and the POSIX
standards.&a.testing.name;Testing on &os;Technical mailing list discussing testing on &os;,
including ATF/Kyua, test build infrastructure, port
tests to &os; from other operating systems (NetBSD,
...), etc.&a.tex.name;Porting TeX and
its applications to &os;This is a technical mailing list for discussions
related to TeX and its applications on &os;. It is for
individuals actively working on porting TeX to FreeBSD,
to bring up problems or discuss alternative solutions.
Individuals interested in following the technical
discussion are also welcome.&a.toolchain.name;Maintenance of &os;'s integrated
toolchainThis is the mailing list for discussions related to
the maintenance of the toolchain shipped with &os;.
This could include the state of Clang and GCC, but also
pieces of software such as assemblers, linkers and
debuggers.&a.translators.name;Translating &os; documents and
programsA discussion list where translators of &os;
documents from English into other languages can talk
about translation methods and tools. New members are
asked to introduce themselves and mention the languages
they are interested in translating.&a.usb.name;Discussing &os; support for
USBThis is a mailing list for technical discussions
related to &os; support for USB.&a.usergroups.name;User Group Coordination
ListThis is the mailing list for the coordinators from
each of the local area Users Groups to discuss matters
with each other and a designated individual from the
Core Team. This mail list should be limited to meeting
synopsis and coordination of projects that span User
Groups.&a.virtualization.name;Discussion of various virtualization
techniques supported by &os;A list to discuss the various virtualization
techniques supported by &os;. On one hand the focus
will be on the implementation of the basic functionality
as well as adding new features. On the other hand users
will have a forum to ask for help in case of problems or
to discuss their use cases.&a.wip-status.name;&os; Work-In-Progress
StatusThis mailing list can be used by developers to
announce the creation and progress of &os; related work.
Messages will be moderated. It is suggested to send the
message "To:" a more topical &os; list and only "BCC:"
this list. This way the WIP can also be discussed on
the topical list, as no discussion is allowed on this
list.Look inside the archives for examples of suitable
messages.An editorial digest of the messages to this list
might be posted to the &os; website every few months as
part of the Status Reports
http://www.freebsd.org/news/status/.
Past reports are archived.&a.wireless.name;Discussions of 802.11 stack, tools device
driver developmentThe FreeBSD-wireless list focuses on 802.11 stack
(sys/net80211), device driver and tools development.
This includes bugs, new features and maintenance.&a.xen.name;Discussion of the &os; port to &xen;
— implementation and usageA list that focuses on the &os; &xen; port. The
anticipated traffic level is small enough that it is
intended as a forum for both technical discussions of
the implementation and design details as well as
administrative deployment issues.&a.xfce.name;XFCEThis is a forum for discussions related to bring the
XFCE environment to &os;.
This is a technical mailing list. It is for individuals
actively working on porting
XFCE to &os;, to bring up
problems or discuss alternative solutions. Individuals
interested in following the technical discussion are
also welcome.&a.zope.name;ZopeThis is a forum for discussions related to bring the
Zope environment to &os;.
This is a technical mailing list. It is for individuals
actively working on porting
Zope to &os;, to bring up
problems or discuss alternative solutions. Individuals
interested in following the technical discussion are
also welcome.Filtering on the Mailing ListsThe &os; mailing lists are filtered in multiple ways to
avoid the distribution of spam, viruses, and other unwanted
emails. The filtering actions described in this section do
not include all those used to protect the mailing
lists.Only certain types of attachments are allowed on the
mailing lists. All attachments with a MIME content type not
found in the list below will be stripped before an email is
distributed on the mailing lists.application/octet-streamapplication/pdfapplication/pgp-signatureapplication/x-pkcs7-signaturemessage/rfc822multipart/alternativemultipart/relatedmultipart/signedtext/htmltext/plaintext/x-difftext/x-patchSome of the mailing lists might allow attachments of
other MIME content types, but the above list should be
applicable for most of the mailing lists.If an email contains both an HTML and a plain text
version, the HTML version will be removed. If an email
contains only an HTML version, it will be converted to plain
text.Usenet NewsgroupsIn addition to two &os; specific newsgroups, there are
many others in which &os; is discussed or are otherwise
relevant to &os; users.BSD Specific Newsgroupscomp.unix.bsd.freebsd.announcecomp.unix.bsd.freebsd.miscde.comp.os.unix.bsd
(German)fr.comp.os.bsd
(French)it.comp.os.freebsd
(Italian)Other &unix; Newsgroups of Interestcomp.unixcomp.unix.questionscomp.unix.admincomp.unix.programmercomp.unix.shellcomp.unix.misccomp.unix.bsdX Window Systemcomp.windows.xcomp.windows.x.appscomp.windows.x.announcecomp.emulators.ms-windows.wineOfficial Mirrors
&chap.eresources.www.index.inc;
&chap.mirrors.lastmod.inc;
&chap.eresources.www.inc;
Index: head/en_US.ISO8859-1/books/handbook/introduction/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/introduction/chapter.xml (revision 46820)
+++ head/en_US.ISO8859-1/books/handbook/introduction/chapter.xml (revision 46821)
@@ -1,1300 +1,1300 @@
IntroductionJimMockRestructured, reorganized, and parts rewritten
by SynopsisThank you for your interest in &os;! The following chapter
covers various aspects of the &os; Project, such as its
history, goals, development model, and so on.After reading this chapter, you will know:How &os; relates to other computer operating
systems.The history of the &os; Project.The goals of the &os; Project.The basics of the &os; open-source development
model.And of course: where the name &os; comes
from.Welcome to &os;!4.4BSD-Lite&os; is a 4.4BSD-Lite based operating system for Intel (x86
and &itanium;), AMD64, Sun &ultrasparc; computers. Ports to
other architectures are also underway. You can also read about
the history of &os;, or the
current release. If you are
interested in contributing something to the Project (code,
hardware, funding), see the Contributing
to &os; article.What Can &os; Do?&os; has many noteworthy features. Some of these
are:Preemptive multitaskingpreemptive multitasking with dynamic priority adjustment to ensure
smooth and fair sharing of the computer between
applications and users, even under the heaviest of
loads.Multi-user facilitiesmulti-user facilities which allow many people to use a &os; system
simultaneously for a variety of things. This means, for
example, that system peripherals such as printers and tape
drives are properly shared between all users on the system
or the network and that individual resource limits can be
placed on users or groups of users, protecting critical
system resources from over-use.Strong TCP/IP
networkingTCP/IP networking with support for industry standards such as
SCTP, DHCP, NFS, NIS, PPP, SLIP, IPsec, and IPv6. This
means that your &os; machine can interoperate easily with
other systems as well as act as an enterprise server,
providing vital functions such as NFS (remote file access)
and email services or putting your organization on the
Internet with WWW, FTP, routing and firewall (security)
services.Memory protectionmemory protection ensures that applications (or users) cannot
interfere with each other. One application crashing will
not affect others in any way.The industry standard
X Window SystemX Window System (X11R7) can provide a graphical user
interface (GUI) on any machine and comes with full
sources.binary compatibilityLinuxbinary compatibilitySCObinary compatibilitySVR4binary compatibilityBSD/OSbinary compatibilityNetBSDBinary compatibility with many
programs built for Linux, SCO, SVR4, BSDI and
NetBSD.Thousands of ready-to-run
applications are available from the &os;
ports and
packages collection. Why search the
net when you can find it all right here?Thousands of additional and
easy-to-port applications are
available on the Internet. &os; is source code compatible
with most popular commercial &unix; systems and thus most
applications require few, if any, changes to
compile.Demand paged virtual
memoryvirtual memory and merged VM/buffer cache
design efficiently satisfies applications with large
appetites for memory while still maintaining interactive
response to other users.SMPSymmetric Multi-Processing
(SMP) support for machines with multiple
CPUs.compilersCcompilersC++
A full complement of C
and C++
development tools.
Many additional languages for advanced research
and development are also available in the ports and
packages collection.Source codesource code for the entire system means you have the
greatest degree of control over your environment. Why be
locked into a proprietary solution at the mercy of your
vendor when you can have a truly open system?Extensive online
documentation.And many more!&os; is based on the 4.4BSD-Lite4.4BSD-Lite release from Computer
Systems Research Group (CSRG)Computer Systems Research Group (CSRG) at the University of California at Berkeley, and
carries on the distinguished tradition of BSD systems
development. In addition to the fine work provided by CSRG,
the &os; Project has put in many thousands of hours in
fine tuning the system for maximum performance and reliability
in real-life load situations. &os; offers performance and
reliability on par with commercial offerings, combined with
many cutting-edge features not available anywhere else.The applications to which &os; can be put are truly
limited only by your own imagination. From software
development to factory automation, inventory control to
azimuth correction of remote satellite antennae; if it can be
done with a commercial &unix; product then it is more than
likely that you can do it with &os; too! &os; also benefits
significantly from literally thousands of high quality
applications developed by research centers and universities
around the world, often available at little to no cost.
Commercial applications are also available and appearing in
greater numbers every day.Because the source code for &os; itself is generally
available, the system can also be customized to an almost
unheard of degree for special applications or projects, and in
ways not generally possible with operating systems from most
major commercial vendors. Here is just a sampling of some of
the applications in which people are currently using
&os;:Internet Services: The robust
TCP/IP networking built into &os; makes it an ideal
platform for a variety of Internet services such
as:World Wide Web serversweb servers
(standard or secure [SSL])IPv4 and IPv6 routingFirewallsfirewall
and NATNAT
(IP masquerading) gatewaysFTP serversFTP serverselectronic mailemailemail
Electronic Mail serversAnd more...Education: Are you a student of
computer science or a related engineering field? There
is no better way of learning about operating systems,
computer architecture and networking than the hands on,
under the hood experience that &os; can provide. A number
of freely available CAD, mathematical and graphic design
packages also make it highly useful to those whose primary
interest in a computer is to get
other work done!Research: With source code for
the entire system available, &os; is an excellent platform
for research in operating systems as well as other
branches of computer science. &os;'s freely available
nature also makes it possible for remote groups to
collaborate on ideas or shared development without having
to worry about special licensing agreements or limitations
on what may be discussed in open forums.Networking: Need a new
router?router A name server (DNS)?DNS Server A firewall to keep people out of your
internal network? &os; can easily turn that unused
PC sitting in the corner into an advanced router with
sophisticated packet-filtering capabilities.Embedded: &os; makes an
excellent platform to build embedded systems upon.
embedded
With support for the &arm;, &mips; and &powerpc;
platforms, coupled with a robust network stack, cutting
edge features and the permissive BSD
license &os; makes an excellent foundation for
building embedded routers, firewalls, and other
devices.X Window SystemGNOMEKDEDesktop: &os; makes a
fine choice for an inexpensive desktop solution
using the freely available X11 server.
&os; offers a choice from many open-source desktop
environments, including the standard
GNOME and
KDE graphical user interfaces.
&os; can even boot diskless from
a central server, making individual workstations
even cheaper and easier to administer.Software Development: The basic
&os; system comes with a full complement of development
tools including a full
C/C++Compiler
compiler and debugger suite.
Support for many other languages are also available
through the ports and packages collection.&os; is available to download free of charge, or can be
obtained on either CD-ROM or DVD. Please see
for more information about obtaining
&os;.Who Uses &os;?userslarge sites running &os;&os;'s advanced features, proven security, predictable
release cycle, and permissive license have led to its use as a
- platform for building many commercial and open source appliances,
- devices, and products. Many of the world's largest IT
- companies use &os;:
+ platform for building many commercial and open source
+ appliances, devices, and products. Many of the world's
+ largest IT companies use &os;:
Apache
Apache - The Apache Software Foundation runs most of
its public facing infrastructure, including possibly one
of the largest SVN repositories in the world with over 1.4
million commits, on &os;.Apple
Apple - OS X borrows heavily from &os; for the
network stack, virtual file system, and many userland
components. Apple iOS also contains elements borrowed
from &os;.Cisco
Cisco - IronPort network security and anti-spam
appliances run a modified &os; kernel.Citrix
Citrix - The NetScaler line of security appliances
provide layer 4-7 load balancing, content caching,
application firewall, secure VPN, and mobile cloud network
access, along with the power of a &os; shell.Dell
KACE
Dell KACE - The KACE system management appliances run
&os; because of its reliability, scalability, and the
community that supports its continued development.Experts
Exchange
Experts Exchange - All public facing web servers are powered
by &os; and they make extensive use of jails to isolate
development and testing environments without the overhead
of virtualization.Isilon
Isilon - Isilon's enterprise storage appliances
are based on &os;. The extremely liberal &os; license
allowed Isilon to integrate their intellectual property
throughout the kernel and focus on building their product
instead of an operating system.iXsystems
iXsystems - The TrueNAS line of unified storage
appliances is based on &os;. In addition to their
commercial products, iXsystems also manages development of
the open source projects PC-BSD and FreeNAS.Juniper
Juniper - The JunOS operating system that powers all
Juniper networking gear (including routers, switches,
security, and networking appliances) is based on &os;.
Juniper is one of many vendors that showcases the
symbiotic relationship between the project and vendors of
commercial products. Improvements generated at Juniper
are upstreamed into &os; to reduce the complexity of
integrating new features from &os; back into JunOS in the
future.McAfee
McAfee - SecurOS, the basis of McAfee enterprise
firewall products including Sidewinder is based on
&os;.NetApp
NetApp - The Data ONTAP GX line of storage
appliances are based on &os;. In addition, NetApp has
contributed back many features, including the new BSD
licensed hypervisor, bhyve.Netflix
Netflix - The OpenConnect appliance that Netflix
uses to stream movies to its customers is based on &os;.
Netflix has made extensive contributions to the codebase
and works to maintain a zero delta from mainline &os;.
Netflix OpenConnect appliances are responsible for
delivering more than 32% of all Internet traffic in North
America.Sandvine
Sandvine - Sandvine uses &os; as the basis of their
high performance realtime network processing platforms
that make up their intelligent network policy control
products.Sony
Sony - The PlayStation 4 gaming console runs a
modified version of &os;.Sophos
Sophos - The Sophos Email Appliance product is based
on a hardened &os; and scans inbound mail for spam and
viruses, while also monitoring outbound mail for malware
as well as the accidental loss of sensitive
information.Spectra
Logic
Spectra Logic - The nTier line of archive grade storage
appliances run &os; and OpenZFS.The Weather
Channel
The Weather Channel - The IntelliStar appliance that is installed
at each local cable providers headend and is responsible
for injecting local weather forecasts into the cable TV
network's programming runs &os;.Verisign
Verisign - Verisign is responsible for operating the
.com and .net root domain registries as well as the
accompanying DNS infrastructure. They rely on a number of
different network operating systems including &os; to
ensure there is no common point of failure in their
infrastructure.Voxer
Voxer - Voxer powers their mobile voice messaging
platform with ZFS on &os;. Voxer switched from a Solaris
derivative to &os; because of its superior documentation,
larger and more active community, and more developer
friendly environment. In addition to critical features
like ZFS and DTrace, &os; also offers
TRIM support for ZFS.WhatsApp
WhatsApp - When WhatsApp needed a platform that would
be able to handle more than 1 million concurrent TCP
connections per server, they chose &os;. They then
proceeded to scale past 2.5 million connections per
server.Wheel
Systems
Wheel Systems - The FUDO security appliance allows
enterprises to monitor, control, record, and audit
contractors and administrators who work on their systems.
Based on all of the best security features of &os;
including ZFS, GELI, Capsicum, HAST, and
auditdistd.&os; has also spawned a number of related open source
projects:BSD
Router
BSD Router - A &os; based replacement for large
enterprise routers designed to run on standard PC
hardware.FreeNAS
FreeNAS - A customized &os; designed to be used as a
network file server appliance. Provides a python based
web interface to simplify the management of both the UFS
and ZFS file systems. Includes support for NFS, SMB/CIFS,
AFP, FTP, and iSCSI. Includes an extensible plugin system
based on &os; jails.GhostBSD
GhostBSD - A desktop oriented distribution of &os;
bundled with the Gnome desktop environment.mfsBSD
mfsBSD - A toolkit for building a &os; system image
that runs entirely from memory.NAS4Free
NAS4Free - A file server distribution based on &os;
with a PHP powered web interface.PC-BSD
PC-BSD - A customized version of &os; geared towards
desktop users with graphical utilities to exposing the
power of &os; to all users. Designed to ease the
transition of Windows and OS X users.pfSense
pfSense - A firewall distribution based on &os; with
a huge array of features and extensive IPv6
support.m0n0wall
m0n0wall - A stripped down version of &os; bundled
with a web server and PHP. Designed as an embedded
firewall appliance with a footprint of less than
12 MB.ZRouter
ZRouter - An open source alternative firmware for
embedded devices based on &os;. Designed to replace the
proprietary firmware on off-the-shelf routers.&os; is also used to power some of the biggest sites on
the Internet, including:Yahoo!
Yahoo!Yandex
YandexRambler
RamblerSina
SinaPair
Networks
Pair NetworksSony
Japan
Sony JapanNetcraft
NetcraftNetflix
NetflixNetEase
NetEaseWeathernews
WeathernewsTELEHOUSE
America
TELEHOUSE Americaand many more. Wikipedia also maintains a list
of products based on &os;.About the &os; ProjectThe following section provides some background information
on the project, including a brief history, project goals, and
the development model of the project.A Brief History of &os;386BSD PatchkitHubbard, JordanWilliams, NateGrimes, RodFreeBSD ProjecthistoryThe &os; Project had its genesis in the early part
of 1993, partially as an outgrowth of the Unofficial
386BSDPatchkit by the patchkit's last 3 coordinators: Nate
Williams, Rod Grimes and Jordan Hubbard.386BSDThe original goal was to produce an intermediate snapshot
of 386BSD in order to fix a number of problems with it that
the patchkit mechanism just was not capable of solving. The
early working title for the project was 386BSD 0.5 or 386BSD
Interim in reference of that fact.Jolitz, Bill386BSD was Bill Jolitz's operating system, which had been
up to that point suffering rather severely from almost a
year's worth of neglect. As the patchkit swelled ever more
uncomfortably with each passing day, they decided to assist
Bill by providing this interim cleanup
snapshot. Those plans came to a rude halt when Bill Jolitz
suddenly decided to withdraw his sanction from the project
without any clear indication of what would be done
instead.Greenman, DavidWalnut Creek CDROMThe trio thought that the goal remained worthwhile, even
without Bill's support, and so they adopted the name "&os;"
coined by David Greenman. The initial objectives were set
after consulting with the system's current users and, once it
became clear that the project was on the road to perhaps even
becoming a reality, Jordan contacted Walnut Creek CDROM with
an eye toward improving &os;'s distribution channels for those
many unfortunates without easy access to the Internet. Walnut
Creek CDROM not only supported the idea of distributing &os;
on CD but also went so far as to provide the project with a
machine to work on and a fast Internet connection. Without
Walnut Creek CDROM's almost unprecedented degree of faith in
what was, at the time, a completely unknown project, it is
quite unlikely that &os; would have gotten as far, as fast, as
it has today.4.3BSD-LiteNet/2U.C. Berkeley386BSDFree Software
FoundationThe first CD-ROM (and general net-wide) distribution was
&os; 1.0, released in December of 1993. This was based
on the 4.3BSD-Lite (Net/2) tape from U.C.
Berkeley, with many components also provided by 386BSD and the
Free Software Foundation. It was a fairly reasonable success
for a first offering, and they followed it with the highly
successful &os; 1.1 release in May of 1994.NovellU.C. BerkeleyNet/2AT&TAround this time, some rather unexpected storm clouds
formed on the horizon as Novell and U.C. Berkeley settled
their long-running lawsuit over the legal status of the
Berkeley Net/2 tape. A condition of that settlement was U.C.
Berkeley's concession that large parts of Net/2 were
encumbered code and the property of Novell, who
had in turn acquired it from AT&T some time previously.
What Berkeley got in return was Novell's
blessing that the 4.4BSD-Lite release, when
it was finally released, would be declared unencumbered and
all existing Net/2 users would be strongly encouraged to
switch. This included &os;, and the project was given until
the end of July 1994 to stop shipping its own Net/2 based
product. Under the terms of that agreement, the project was
allowed one last release before the deadline, that release
being &os; 1.1.5.1.&os; then set about the arduous task of literally
re-inventing itself from a completely new and rather
incomplete set of 4.4BSD-Lite bits. The Lite
releases were light in part because Berkeley's CSRG had
removed large chunks of code required for actually
constructing a bootable running system (due to various legal
requirements) and the fact that the Intel port of 4.4 was
highly incomplete. It took the project until November of 1994
to make this transition, and in December it released
&os; 2.0 to the world. Despite being still more than a
little rough around the edges, the release was a significant
success and was followed by the more robust and easier to
install &os; 2.0.5 release in June of 1995.Since that time, &os; has made a series of releases each
time improving the stability, speed, and feature set of the
previous version.For now, long-term development projects continue to take
place in the 10.X-CURRENT (trunk) branch, and snapshot
releases of 10.X are continually made available from the
snapshot server as work progresses.&os; Project GoalsJordanHubbardContributed by FreeBSD ProjectgoalsThe goals of the &os; Project are to provide software
that may be used for any purpose and without strings attached.
Many of us have a significant investment in the code (and
project) and would certainly not mind a little financial
compensation now and then, but we are definitely not prepared
to insist on it. We believe that our first and foremost
mission is to provide code to any and all
comers, and for whatever purpose, so that the code gets the
widest possible use and provides the widest possible benefit.
This is, I believe, one of the most fundamental goals of Free
Software and one that we enthusiastically support.GNU General Public License (GPL)GNU Lesser General Public License (LGPL)BSD CopyrightThat code in our source tree which falls under the GNU
General Public License (GPL) or Library General Public License
(LGPL) comes with slightly more strings attached, though at
least on the side of enforced access rather than the usual
opposite. Due to the additional complexities that can evolve
in the commercial use of GPL software we do, however, prefer
software submitted under the more relaxed BSD copyright when
it is a reasonable option to do so.The &os; Development ModelSatoshiAsamiContributed by FreeBSD Projectdevelopment modelThe development of &os; is a very open and flexible
process, being literally built from the contributions of
thousands of people around the world, as can be seen from our
list
of contributors. &os;'s development infrastructure
allow these thousands of contributors to collaborate over the
Internet. We are constantly on the lookout for new developers
and ideas, and those interested in becoming more closely
involved with the project need simply contact us at the
&a.hackers;. The &a.announce; is also available to those
wishing to make other &os; users aware of major areas of
work.Useful things to know about the &os; Project and its
development process, whether working independently or in close
cooperation:The SVN repositoriesCVSCVS RepositoryConcurrent Versions SystemCVSSubversionSubversion RepositorySVNSubversion
For several years, the central source tree for &os;
was maintained by
CVS
(Concurrent Versions System), a freely available source
code control tool. In June 2008, the Project switched
to using SVN
(Subversion). The switch was deemed necessary, as the
technical limitations imposed by
CVS were becoming obvious due
to the rapid expansion of the source tree and the amount
of history already stored. The Documentation Project
and Ports Collection repositories also moved from
CVS to
SVN in May 2012 and July
2012, respectively. Please refer to the Synchronizing your source
tree section for more information on obtaining
the &os; src/ repository and Using the Ports
Collection for details on obtaining the &os;
Ports Collection.The committers listThe committerscommitters are the people who have
write access to the Subversion
tree, and are authorized to make modifications to the
&os; source (the term committer comes
from the source control commit
command, which is used to bring new changes into the
repository). The best way of making submissions for
review is to use the &man.send-pr.1; command, which is
included in releases prior to &os; 10.1, or submit
issues using the problem
report form. If a problem report has not
received any attention, please engage the community
mailing lists.The FreeBSD core teamThe &os; core teamcore team would be equivalent to the board of
directors if the &os; Project were a company. The
primary task of the core team is to make sure the
project, as a whole, is in good shape and is heading in
the right directions. Inviting dedicated and
responsible developers to join our group of committers
is one of the functions of the core team, as is the
recruitment of new core team members as others move on.
The current core team was elected from a pool of
committer candidates in July 2014. Elections are held
every 2 years.Like most developers, most members of the
core team are also volunteers when
it comes to &os; development and do not benefit from
the project financially, so commitment
should also not be misconstrued as meaning
guaranteed support. The
board of directors analogy above is not
very accurate, and it may be more suitable to say that
these are the people who gave up their lives in favor
of &os; against their better judgement!Outside contributorsLast, but definitely not least, the largest group of
developers are the users themselves who provide feedback
and bug fixes to us on an almost constant basis. The
primary way of keeping in touch with &os;'s more
non-centralized development is to subscribe to the
&a.hackers; where such things are discussed. See
for more information about
the various &os; mailing lists.The
&os; Contributors Listcontributors is a long and growing one, so why not join
it by contributing something back to &os; today?Providing code is not the only way of contributing
to the project; for a more complete list of things that
need doing, please refer to the &os; Project
web site.In summary, our development model is organized as a loose
set of concentric circles. The centralized model is designed
for the convenience of the users of &os;,
who are provided with an easy way of tracking one central code
base, not to keep potential contributors out! Our desire is to
present a stable operating system with a large set of coherent
application programs that the
users can easily install and use — this model works very
well in accomplishing that.All we ask of those who would join us as &os; developers
is some of the same dedication its current people have to its
continued success!Third Party ProgramsIn addition to the base distributions, &os; offers a
ported software collection with thousands of commonly
sought-after programs. At the time of this writing, there
were over &os.numports; ports! The list of ports ranges from
http servers, to games, languages, editors, and almost
everything in between. The entire Ports Collection requires
approximately &ports.size;. To compile a port, you simply
change to the directory of the program you wish to install,
type make install, and let the system do
the rest. The full original distribution for each port you
build is retrieved dynamically so you need only enough disk
space to build the ports you want. Almost every port is also
provided as a pre-compiled package, which can
be installed with a simple command
(pkg install) by those who do not wish to
compile their own ports from source. More information on
packages and ports can be found in
.Additional DocumentationAll recent &os; versions provide an option in the
installer (either &man.sysinstall.8; or &man.bsdinstall.8;) to
install additional documentation under
/usr/local/share/doc/freebsd during the
initial system setup. Documentation may also be installed at
any later time using packages as described in
. You may view the
locally installed manuals with any HTML capable browser using
the following URLs:The FreeBSD Handbook/usr/local/share/doc/freebsd/handbook/index.htmlThe FreeBSD FAQ/usr/local/share/doc/freebsd/faq/index.htmlYou can also view the master (and most frequently updated)
copies at http://www.FreeBSD.org/.
Index: head/en_US.ISO8859-1/books/handbook/mirrors/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/mirrors/chapter.xml (revision 46820)
+++ head/en_US.ISO8859-1/books/handbook/mirrors/chapter.xml (revision 46821)
@@ -1,934 +1,934 @@
Obtaining &os;CD and
DVD Sets&os; CD and DVD sets
are available from several online retailers:
&os; Mall, Inc.
2420 Sand Creek Rd C-1 #347Brentwood, CA94513USA
Phone: +1 925 240-6652
Fax: +1 925 674-0821
Email: info@freebsdmall.com
WWW: http://www.freebsdmall.com/
Getlinux
78 Rue de la Croix RochoptÉpinay-sous-Sénart91860France
Email: contact@getlinux.fr
WWW: http://www.getlinux.fr/
Dr. Hinner EDV
Kochelseestr. 11D-81371MünchenGermany
Phone: (0177) 428 419 0
Email: infow@hinner.de
WWW: http://www.hinner.de/linux/freebsd.html
Linux Center
Galernaya Street, 55Saint-Petersburg190000Russia
Phone: +7-812-309-06-86
Email: info@linuxcenter.ru
WWW: http://linuxcenter.ru/shop/freebsdFTP SitesThe official sources for &os; are available via anonymous
FTP from a worldwide set of mirror sites.
The site ftp://ftp.FreeBSD.org/pub/FreeBSD/
is available via HTTP and
FTP. It is made up of many machines operated
- by the project cluster administrators and behind GeoDNS to direct
- users to the closest available mirror.
+ by the project cluster administrators and behind GeoDNS to
+ direct users to the closest available mirror.
Additionally, &os; is available via anonymous
FTP from the following mirror sites. If you
choose to obtain &os; via anonymous FTP,
please try to use a site near you. The mirror sites listed as
Primary Mirror Sites typically have the entire
&os; archive (all the currently available versions for each of
the architectures) but you will probably have faster download
times from a site that is in your country or region. The
regional sites carry the most recent versions for the most
popular architecture(s) but might not carry the entire &os;
archive. All sites provide access via anonymous
FTP but some sites also provide access via
other methods. The access methods available for each site are
provided in parentheses after the hostname.
&chap.mirrors.ftp.index.inc;
&chap.mirrors.lastmod.inc;
&chap.mirrors.ftp.inc;
Using CTMCTMCTM is a method for keeping a
remote directory tree in sync with a central one. It is built
into &os; and can be used to synchronize a system with &os;'s
source repositories. It supports synchronization of an entire
repository or just a specified set of branches.CTM is specifically designed for
use on lousy or non-existent TCP/IP connections and provides
the ability for changes to be automatically sent by email. It
requires the user to obtain up to three deltas per day for the
most active branches. Update sizes are always kept as small as
possible and are typically less than 5K. About one in very ten
updates is 10-50K in size, and there will occasionally be an
update larger than 100K+.When using CTM to track &os;
development, refer to the caveats related to working directly
from the development sources rather than a pre-packaged release.
These are discussed in Tracking
a Development Branch.Little documentation exists on the process of creating
deltas or using CTM for other
purposes. Contact the &a.ctm-users.name; mailing list for
answers to questions on using
CTM.Getting DeltasThe deltas used by
CTM can be obtained either through
anonymous FTP or email.FTP deltas can be obtained from the
following mirror sites. When using anonymous
FTP to obtain
CTM deltas, select a mirror that is
geographically nearby. In case of problems, contact the
&a.ctm-users.name; mailing list.California, Bay Area, official sourceftp://ftp.FreeBSD.org/pub/FreeBSD/development/CTM/ftp://ftp.FreeBSD.org/pub/FreeBSD/CTM/South Africa, backup server for old deltasftp://ftp.za.FreeBSD.org/pub/FreeBSD/CTM/Taiwan/R.O.C.ftp://ctm.tw.FreeBSD.org/pub/FreeBSD/development/CTM/ftp://ctm2.tw.FreeBSD.org/pub/FreeBSD/development/CTM/ftp://ctm3.tw.FreeBSD.org/pub/FreeBSD/development/CTM/To instead receive deltas through email, subscribe to one
of the ctm-src distribution lists available
from http://lists.freebsd.org/mailman/listinfo.
For example, &a.ctm-src-cur.name; supports the head
development branch and &a.ctm-src-9.name; supports the 9.X
release branch.As CTM updates arrive through
email, use ctm_rmail to unpack and apply
them. This command can be run directly from an entry in
/etc/aliases in order to automate this
process. Refer to &man.ctm.rmail.1; for more details.Regardless of the method which is used to get deltas,
CTM users should subscribe
to the &a.ctm-announce.name; mailing list as this is the
only mechanism by which CTM
announcements are posted.CTM UsageBefore CTM deltas can be used
for the first time, a starting point must be produced.One method is to apply a starter delta to
an empty directory. A starter delta can be recognized by the
XEmpty in its name, such as
src-cur.3210XEmpty.gz. The designation
following the X corresponds to the origin
of the initial seed, where
Empty is an empty directory. As a rule,
a base transition from Empty is produced
every 100 deltas. Be aware that starter deltas are large and
70 to 80 Megabytes of gzip'd data is common
for the XEmpty deltas.Another method is to copy or extract an initial source
from a RELEASE media as this can save a significant transfer
of data from the Internet.Once a base delta has been created, apply all deltas with
higher numbers. To apply the deltas:&prompt.root; cd /directory/to/store/the/stuff
&prompt.root; ctm -v -v /directory/which/stores/the/deltas/src-xxx.*Multiple deltas can be applied with a single command as
they will be processed one at a time and any deltas that are
already applied will be ignored.
CTM understands
gzip compressed deltas, which saves disk
space.To verify a delta without applying it, include
in the command line.
CTM will not actually modify the
local tree but will instead verify the integrity of the delta
to see if it would apply cleanly. Refer to &man.ctm.1; for
more information about available options and an overview of
the process CTM uses when applying
deltas.To keep the local source tree up-to-date, every time a
new delta becomes available, apply it through
CTM.Once applied, it is recommended to not delete the deltas
if it is a burden to download them again. This way, a local
copy is available in case it is needed for future disaster
recovery.Keeping Local ChangesDevelopers often experiment with and
change files in their local source tree.
CTM supports local modifications in
a limited way: before checking for the presence of a file,
it first looks for a file with the same name and a
.ctm extension. If this file exists,
CTM will operate on it instead of
the original filename.This behavior provides a simple way to maintain local
changes. Before modifying a file, make a copy with a
.ctm suffix. Make any changes to the
original filename, knowing that
CTM will only apply updates to the
file with the .ctm suffix.Other CTM OptionsFinding Out Exactly What Would Be Touched by an
UpdateTo determine the list of changes that
CTM will make to the local
source repository, use . This option
is useful for creating logs of the changes or when
performing pre- or post-processing on any of the
modified files.Making Backups Before UpdatingTo backup all of the files that would be changed by
a CTM update, specify
. This
option tells CTM to backup
all files touched by the applied
CTM delta to
backup-file.Restricting the Files Touched by an UpdateTo restrict the scope of a given
CTM update, or to extract
just a few files from a sequence of deltas, filtering
regular expressions can be specified using
, which specifies which files to
process, or , which specifies which
files to ignore.For example, to extract an up-to-date copy of
lib/libc/Makefile from a collection
of saved CTM deltas:&prompt.root; cd /directory/to/extract/to/
&prompt.root; ctm -e '^lib/libc/Makefile' /directory/which/stores/the/deltas/src-xxx.*For every file specified in a
CTM delta,
and are
applied in the order given on the command line. A file
is processed by CTM only if
it is marked as eligible after all
and options are applied.Using SubversionSubversionIntroductionAs of July 2012, &os; uses
Subversion as the primary version
control system for storing all of &os;'s source code,
documentation, and the Ports Collection.Subversion is generally a
developer tool. Most users should use
freebsd-update () to update
the &os; base system, and portsnap () to update the &os; Ports
Collection.This chapter demonstrates how to install
Subversion on a &os; system and
then use it to create a local copy of a &os; repository. It
includes a list of the available &os;
Subversion mirrors and resources to
additional information on how to use
Subversion.InstallationSubversion must be installed
before it can be used to check out the contents of any of the
repositories. If a copy of the ports tree is already present,
one can install Subversion like
this:&prompt.root; cd /usr/ports/devel/subversion
&prompt.root; make install cleanIf the ports tree is not available,
Subversion can be installed as a
package:&prompt.root; pkg install devel/subversionRunning SubversionThe svn command is used to fetch a
clean copy of the sources into a local directory. The files
in this directory are called a local working
copy.Move or delete the local directory before
using checkout.Checkout over an existing
non-svn directory can cause conflicts
between the existing files and those brought in from the
repository.Subversion uses
URLs to designate a repository, taking the
form of protocol://hostname/path.
Mirrors may support different protocols as specified below.
The first component of the path is the &os; repository to
access. There are three different repositories,
base for the &os; base system source code,
ports for the Ports Collection, and
doc for documentation. For example, the
URL
svn://svn0.us-east.FreeBSD.org/ports/head/
specifies the main branch of the ports repository on the
svn0.us-east.FreeBSD.org
mirror, using the svn protocol.A checkout from a given repository is performed with a
command like this:&prompt.root; svn checkout svn-mirror/repository/branchlwcdirwhere:svn-mirror is a URL for one
of the Subversion mirror
sites.repository is one of the
Project repositories, i.e., base,
ports, or
doc.branch depends on the
repository used. ports and
doc are mostly updated in the
head branch, while
base maintains the latest version of
-CURRENT under head and the respective
latest versions of the -STABLE branches under
stable/8 (for
8.x),
stable/9
(9.x) and
stable/10
(10.x).lwcdir is the target
directory where the contents of the specified branch
should be placed. This is usually
/usr/ports for
ports,
/usr/src for
base, and
/usr/doc for
doc.This example checks out the Ports Collection from the
western US repository using the HTTPS
protocol, placing the local working copy in
/usr/ports. If
/usr/ports is already
present but was not created by svn,
remember to rename or delete it before the checkout.&prompt.root; svn checkout https://svn0.us-west.FreeBSD.org/ports/head /usr/portsBecause the initial checkout has to download the full
branch of the remote repository, it can take a while. Please
be patient.After the initial checkout, the local working copy can be
updated by running:&prompt.root; svn update lwcdirTo update
/usr/ports created in
the example above, use:&prompt.root; svn update /usr/portsThe update is much quicker than a checkout, only
transferring files that have changed.An alternate way of updating the local working copy after
checkout is provided by the Makefile in
the /usr/ports,
/usr/src, and
/usr/doc directories.
Set SVN_UPDATE and use the
update target. For example, to
update /usr/src:&prompt.root; cd /usr/src
&prompt.root; make update SVN_UPDATE=yesSubversion Mirror
SitesSubversion RepositoryMirror SitesAll mirrors carry all repositories.The master &os; Subversion
server, svn.FreeBSD.org, is
publicly accessible, read-only. That may change in the
future, so users are encouraged to use one of the official
mirrors. To view the &os;
Subversion repositories through a
browser, use http://svnweb.FreeBSD.org/.The &os; Subversion mirror
network is still in its early days, and will likely change.
Do not count on this list of mirrors being static. In
particular, the SSL certificates of the
servers will likely change at some point.NameProtocolsLocationSSL Fingerprintsvn0.us-west.FreeBSD.orgsvn, http,
httpsUSA, CaliforniaSHA1
1C:BD:85:95:11:9F:EB:75:A5:4B:C8:A3:FE:08:E4:02:73:06:1E:61svn0.us-east.FreeBSD.orgsvn, http,
https,
rsyncUSA, New JerseySHA1
1C:BD:85:95:11:9F:EB:75:A5:4B:C8:A3:FE:08:E4:02:73:06:1E:61svn0.eu.FreeBSD.orgsvn, http,
https,
rsyncEurope, UKSHA1
39:B0:53:35:CE:60:C7:BB:00:54:96:96:71:10:94:BB:CE:1C:07:A7svn0.ru.FreeBSD.orgsvn, http,
https,
rsyncRussia, MoscowSHA1
F6:44:AA:B9:03:89:0E:3E:8C:4D:4D:14:F0:27:E6:C7:C1:8B:17:C5HTTPS is the preferred protocol,
providing protection against another computer pretending to be
the &os; mirror (commonly known as a man in the
middle attack) or otherwise trying to send bad
content to the end user.On the first connection
to an HTTPS mirror, the user will be asked
to verify the server fingerprint:Error validating server certificate for 'https://svn0.us-west.freebsd.org:443':
- The certificate is not issued by a trusted authority. Use the
fingerprint to validate the certificate manually!
- The certificate hostname does not match.
Certificate information:
- Hostname: svnmir.ysv.FreeBSD.org
- Valid: from Jul 29 22:01:21 2013 GMT until Dec 13 22:01:21 2040 GMT
- Issuer: clusteradm, FreeBSD.org, (null), CA, US (clusteradm@FreeBSD.org)
- Fingerprint: 1C:BD:85:95:11:9F:EB:75:A5:4B:C8:A3:FE:08:E4:02:73:06:1E:61
(R)eject, accept (t)emporarily or accept (p)ermanently?Compare the fingerprint shown to those listed in the table
above. If the fingerprint matches, the server security
certificate can be accepted temporarily or permanently. A
temporary certificate will expire after a single session with
the server, and the verification step will be repeated on the
next connection. Accepting the certificate permanently will
store the authentication credentials in
~/.subversion/auth/ and the user will not
be asked to verify the fingerprint again until the certificate
expires.If https cannot be used due to firewall
or other problems, svn is the next choice,
with slightly faster transfers. When neither can be used, use
http.For More InformationFor other information about using
Subversion, please see the
Subversion Book, titled
Version
Control with Subversion, or the Subversion
Documentation.Using rsyncThe following sites make &os; available through the rsync
protocol. The rsync utility works in
much the same way as the &man.rcp.1; command, but has more
options and uses the rsync remote-update protocol which
transfers only the differences between two sets of files, thus
greatly speeding up the synchronization over the network. This
is most useful if you are a mirror site for the &os;
FTP server, or the CVS repository. The
rsync suite is available for many
operating systems, on &os;, see the net/rsync
port or use the package.Czech Republicrsync://ftp.cz.FreeBSD.org/Available collections:ftp: A partial mirror of the &os;
FTP server.&os;: A full mirror of the &os;
FTP server.Netherlandsrsync://ftp.nl.FreeBSD.org/Available collections:&os;: A full mirror of the &os;
FTP server.Russiarsync://ftp.mtu.ru/Available collections:&os;: A full mirror of the &os;
FTP server.&os;-Archive: The mirror of &os; Archive
FTP server.Swedenrsync://ftp4.se.freebsd.org/Available collections:&os;: A full mirror of the &os;
FTP server.Taiwanrsync://ftp.tw.FreeBSD.org/rsync://ftp2.tw.FreeBSD.org/rsync://ftp6.tw.FreeBSD.org/Available collections:&os;: A full mirror of the &os;
FTP server.United Kingdomrsync://rsync.mirrorservice.org/Available collections:ftp.freebsd.org: A full mirror of the &os;
FTP server.United States of Americarsync://ftp-master.FreeBSD.org/This server may only be used by &os; primary mirror
sites.Available collections:&os;: The master archive of the &os;
FTP server.acl: The &os; master ACL list.rsync://ftp13.FreeBSD.org/Available collections:&os;: A full mirror of the &os;
FTP server.
Index: head/en_US.ISO8859-1/books/handbook/network-servers/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/network-servers/chapter.xml (revision 46820)
+++ head/en_US.ISO8859-1/books/handbook/network-servers/chapter.xml (revision 46821)
@@ -1,5788 +1,5788 @@
Network ServersSynopsisThis chapter covers some of the more frequently used network
services on &unix; systems. This includes installing,
configuring, testing, and maintaining many different types of
network services. Example configuration files are included
throughout this chapter for reference.By the end of this chapter, readers will know:How to manage the inetd
daemon.How to set up the Network File System
(NFS).How to set up the Network Information Server
(NIS) for centralizing and sharing
user accounts.How to set &os; up to act as an LDAP
server or clientHow to set up automatic network settings using
DHCP.How to set up a Domain Name Server
(DNS).How to set up the Apache
HTTP Server.How to set up a File Transfer Protocol
(FTP) server.How to set up a file and print server for &windows;
clients using Samba.How to synchronize the time and date, and set up a
time server using the Network Time Protocol
(NTP).How to set up iSCSI.This chapter assumes a basic knowledge of:/etc/rc scripts.Network terminology.Installation of additional third-party
software ().The inetd
Super-ServerThe &man.inetd.8; daemon is sometimes referred to as a
Super-Server because it manages connections for many services.
Instead of starting multiple applications, only the
inetd service needs to be started.
When a connection is received for a service that is managed by
inetd, it determines which program
the connection is destined for, spawns a process for that
program, and delegates the program a socket. Using
inetd for services that are not
heavily used can reduce system load, when compared to running
each daemon individually in stand-alone mode.Primarily, inetd is used to
spawn other daemons, but several trivial protocols are handled
internally, such as chargen,
auth,
time,
echo,
discard, and
daytime.This section covers the basics of configuring
inetd.Configuration FileConfiguration of inetd is
done by editing /etc/inetd.conf. Each
line of this configuration file represents an application
which can be started by inetd. By
default, every line starts with a comment
(#), meaning that
inetd is not listening for any
applications. To configure inetd
to listen for an application's connections, remove the
# at the beginning of the line for that
application.After saving your edits, configure
inetd to start at system boot by
editing /etc/rc.conf:inetd_enable="YES"To start inetd now, so that it
listens for the service you configured, type:&prompt.root; service inetd startOnce inetd is started, it needs
to be notified whenever a modification is made to
/etc/inetd.conf:Reloading the inetd
Configuration File&prompt.root; service inetd reloadTypically, the default entry for an application does not
need to be edited beyond removing the #.
In some situations, it may be appropriate to edit the default
entry.As an example, this is the default entry for &man.ftpd.8;
over IPv4:ftp stream tcp nowait root /usr/libexec/ftpd ftpd -lThe seven columns in an entry are as follows:service-name
socket-type
protocol
{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]
user[:group][/login-class]
server-program
server-program-argumentswhere:service-nameThe service name of the daemon to start. It must
correspond to a service listed in
/etc/services. This determines
which port inetd listens on
for incoming connections to that service. When using a
custom service, it must first be added to
/etc/services.socket-typeEither stream,
dgram, raw, or
seqpacket. Use
stream for TCP connections and
dgram for
UDP services.protocolUse one of the following protocol names:Protocol NameExplanationtcp or tcp4TCP IPv4udp or udp4UDP IPv4tcp6TCP IPv6udp6UDP IPv6tcp46Both TCP IPv4 and IPv6udp46Both UDP IPv4 and
IPv6{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]In this field, or
must be specified.
,
and
are optional. indicates whether or
not the service is able to handle its own socket.
socket types must use
while
daemons, which are usually
multi-threaded, should use .
usually hands off multiple sockets
to a single daemon, while spawns
a child daemon for each new socket.The maximum number of child daemons
inetd may spawn is set by
. For example, to limit ten
instances of the daemon, place a /10
after . Specifying
/0 allows an unlimited number of
children.
limits the number of connections from any particular
IP address per minute. Once the
limit is reached, further connections from this IP
address will be dropped until the end of the minute.
For example, a value of /10 would
limit any particular IP address to
ten connection attempts per minute.
limits the number of
child processes that can be started on behalf on any
single IP address at any moment.
These options can limit excessive resource consumption
and help to prevent Denial of Service attacks.An example can be seen in the default settings for
&man.fingerd.8;:finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -k -suserThe username the daemon
will run as. Daemons typically run as
root,
daemon, or
nobody.server-programThe full path to the daemon. If the daemon is a
service provided by inetd
internally, use .server-program-argumentsUsed to specify any command arguments to be passed
to the daemon on invocation. If the daemon is an
internal service, use
.Command-Line OptionsLike most server daemons, inetd
has a number of options that can be used to modify its
behaviour. By default, inetd is
started with -wW -C 60. These options
enable TCP wrappers for all services, including internal
services, and prevent any IP address from
requesting any service more than 60 times per minute.To change the default options which are passed to
inetd, add an entry for
inetd_flags in
/etc/rc.conf. If
inetd is already running, restart
it with service inetd restart.The available rate limiting options are:-c maximumSpecify the default maximum number of simultaneous
invocations of each service, where the default is
unlimited. May be overridden on a per-service basis by
using in
/etc/inetd.conf.-C rateSpecify the default maximum number of times a
service can be invoked from a single
IP address per minute. May be
overridden on a per-service basis by using
in
/etc/inetd.conf.-R rateSpecify the maximum number of times a service can be
invoked in one minute, where the default is
256. A rate of 0
allows an unlimited number.-s maximumSpecify the maximum number of times a service can be
invoked from a single IP address at
any one time, where the default is unlimited. May be
overridden on a per-service basis by using
in
/etc/inetd.conf.Additional options are available. Refer to &man.inetd.8;
for the full list of options.Security ConsiderationsMany of the daemons which can be managed by
inetd are not security-conscious.
Some daemons, such as fingerd, can
provide information that may be useful to an attacker. Only
enable the services which are needed and monitor the system
for excessive connection attempts.
max-connections-per-ip-per-minute,
max-child and
max-child-per-ip can be used to limit such
attacks.By default, TCP wrappers is enabled. Consult
&man.hosts.access.5; for more information on placing TCP
restrictions on various
inetd invoked daemons.Network File System (NFS)TomRhodesReorganized and enhanced by BillSwingleWritten by NFS&os; supports the Network File System
(NFS), which allows a server to share
directories and files with clients over a network. With
NFS, users and programs can access files on
remote systems as if they were stored locally.NFS has many practical uses. Some of
the more common uses include:Data that would otherwise be duplicated on each client
can be kept in a single location and accessed by clients
on the network.Several clients may need access to the
/usr/ports/distfiles directory.
Sharing that directory allows for quick access to the
source files without having to download them to each
client.On large networks, it is often more convenient to
configure a central NFS server on which
all user home directories are stored. Users can log into
a client anywhere on the network and have access to their
home directories.Administration of NFS exports is
simplified. For example, there is only one file system
where security or backup policies must be set.Removable media storage devices can be used by other
machines on the network. This reduces the number of devices
throughout the network and provides a centralized location
to manage their security. It is often more convenient to
install software on multiple machines from a centralized
installation media.NFS consists of a server and one or more
clients. The client remotely accesses the data that is stored
on the server machine. In order for this to function properly,
a few processes have to be configured and running.These daemons must be running on the server:NFSserverfile serverUNIX clientsrpcbindmountdnfsdDaemonDescriptionnfsdThe NFS daemon which services
requests from NFS clients.mountdThe NFS mount daemon which
carries out requests received from
nfsd.rpcbind This daemon allows NFS
clients to discover which port the
NFS server is using.Running &man.nfsiod.8; on the client can improve
performance, but is not required.Configuring the ServerNFSconfigurationThe file systems which the NFS server
will share are specified in /etc/exports.
Each line in this file specifies a file system to be exported,
which clients have access to that file system, and any access
options. When adding entries to this file, each exported file
system, its properties, and allowed hosts must occur on a
single line. If no clients are listed in the entry, then any
client on the network can mount that file system.NFSexport examplesThe following /etc/exports entries
demonstrate how to export file systems. The examples can be
modified to match the file systems and client names on the
reader's network. There are many options that can be used in
this file, but only a few will be mentioned here. See
&man.exports.5; for the full list of options.This example shows how to export
/cdrom to three hosts named
alpha,
bravo, and
charlie:/cdrom -ro alphabravocharlieThe -ro flag makes the file system
read-only, preventing clients from making any changes to the
exported file system. This example assumes that the host
names are either in DNS or in
/etc/hosts. Refer to &man.hosts.5; if
the network does not have a DNS
server.The next example exports /home to
three clients by IP address. This can be
useful for networks without DNS or
/etc/hosts entries. The
-alldirs flag allows subdirectories to be
mount points. In other words, it will not automatically mount
the subdirectories, but will permit the client to mount the
directories that are required as needed./home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4This next example exports /a so that
two clients from different domains may access that file
system. The allows root on the remote system to
write data on the exported file system as root. If
-maproot=root is not specified, the
client's root user
will be mapped to the server's nobody account and will be
subject to the access limitations defined for nobody./a -maproot=root host.example.com box.example.orgA client can only be specified once per file system. For
example, if /usr is a single file system,
these entries would be invalid as both entries specify the
same host:# Invalid when /usr is one file system
/usr/src client
/usr/ports clientThe correct format for this situation is to use one
entry:/usr/src /usr/ports clientThe following is an example of a valid export list, where
/usr and /exports
are local file systems:# Export src and ports to client01 and client02, but only
# client01 has root privileges on it
/usr/src /usr/ports -maproot=root client01
/usr/src /usr/ports client02
# The client machines have root and can mount anywhere
# on /exports. Anyone in the world can mount /exports/obj read-only
/exports -alldirs -maproot=root client01 client02
/exports/obj -roTo enable the processes required by the
NFS server at boot time, add these options
to /etc/rc.conf:rpcbind_enable="YES"
nfs_server_enable="YES"
mountd_flags="-r"The server can be started now by running this
command:&prompt.root; service nfsd startWhenever the NFS server is started,
mountd also starts automatically.
However, mountd only reads
/etc/exports when it is started. To make
subsequent /etc/exports edits take effect
immediately, force mountd to reread
it:&prompt.root; service mountd reloadConfiguring the ClientTo enable NFS clients, set this option
in each client's /etc/rc.conf:nfs_client_enable="YES"Then, run this command on each NFS
client:&prompt.root; service nfsclient startThe client now has everything it needs to mount a remote
file system. In these examples, the server's name is
server and the client's name is
client. To mount
/home on
server to the
/mnt mount point on
client:NFSmounting&prompt.root; mount server:/home /mntThe files and directories in
/home will now be available on
client, in the
/mnt directory.To mount a remote file system each time the client boots,
add it to /etc/fstab:server:/home /mnt nfs rw 0 0Refer to &man.fstab.5; for a description of all available
options.LockingSome applications require file locking to operate
correctly. To enable locking, add these lines to
/etc/rc.conf on both the client and
server:rpc_lockd_enable="YES"
rpc_statd_enable="YES"Then start the applications:&prompt.root; service lockd start
&prompt.root; service statd startIf locking is not required on the server, the
NFS client can be configured to lock
locally by including when running
mount. Refer to &man.mount.nfs.8;
for further details.Automating Mounts with &man.amd.8;WylieStilwellContributed by ChernLeeRewritten by amdautomatic mounter daemonThe automatic mounter daemon,
amd, automatically mounts a remote
file system whenever a file or directory within that file
system is accessed. File systems that are inactive for a
period of time will be automatically unmounted by
amd.This daemon provides an alternative to modifying
/etc/fstab to list every client. It
operates by attaching itself as an NFS
server to the /host and
/net directories. When a file is
accessed within one of these directories,
amd looks up the corresponding
remote mount and automatically mounts it.
/net is used to mount an exported file
system from an IP address while
/host is used to mount an export from a
remote hostname. For instance, an attempt to access a file
within /host/foobar/usr would tell
amd to mount the
/usr export on the host
foobar.Mounting an Export with
amdIn this example, showmount -e shows
the exported file systems that can be mounted from the
NFS server,
foobar:&prompt.user; showmount -e foobar
Exports list on foobar:
/usr 10.10.10.0
/a 10.10.10.0
&prompt.user; cd /host/foobar/usrThe output from showmount shows
/usr as an export. When changing
directories to /host/foobar/usr,
amd intercepts the request and
attempts to resolve the hostname
foobar. If successful,
amd automatically mounts the
desired export.To enable amd at boot time, add
this line to /etc/rc.conf:amd_enable="YES"To start amd now:&prompt.root; service amd startCustom flags can be passed to
amd from the
amd_flags environment variable. By
default, amd_flags is set to:amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map"The default options with which exports are mounted are
defined in /etc/amd.map. Some of the
more advanced features of amd are
defined in /etc/amd.conf.Consult &man.amd.8; and &man.amd.conf.5; for more
information.Automating Mounts with &man.autofs.5;The &man.autofs.5; automount facility is supported
starting with &os; 10.1-RELEASE. To use the
automounter functionality in older versions of &os;, use
&man.amd.8; instead. This chapter only describes the
&man.autofs.5; automounter.autofsautomounter subsystemThe &man.autofs.5; facility is a common name for several
components that, together, allow for automatic mounting of
remote and local filesystems whenever a file or directory
within that file system is accessed. It consists of the
kernel component, &man.autofs.5;, and several userspace
applications: &man.automount.8;, &man.automountd.8; and
&man.autounmountd.8;. It serves as an alternative for
&man.amd.8; from previous &os; releases. Amd is still
provided for backward compatibility purposes, as the two use
different map format; the one used by autofs is the same as
with other SVR4 automounters, such as the ones in Solaris,
MacOS X, and Linux.The &man.autofs.5; virtual filesystem is mounted on
specified mountpoints by &man.automount.8;, usually invoked
during boot.Whenever a process attempts to access file within the
&man.autofs.5; mountpoint, the kernel will notify
&man.automountd.8; daemon and pause the triggering process.
The &man.automountd.8; daemon will handle kernel requests by
finding the proper map and mounting the filesystem according
to it, then signal the kernel to release blocked process. The
&man.autounmountd.8; daemon automatically unmounts automounted
filesystems after some time, unless they are still being
used.The primary autofs configuration file is
/etc/auto_master. It assigns individual
maps to top-level mounts. For an explanation of
auto_master and the map syntax, refer to
&man.auto.master.5;.There is a special automounter map mounted on
/net. When a file is accessed within
this directory, &man.autofs.5; looks up the corresponding
remote mount and automatically mounts it. For instance, an
attempt to access a file within
/net/foobar/usr would tell
&man.automountd.8; to mount the /usr export from the host
foobar.Mounting an Export with &man.autofs.5;In this example, showmount -e shows
the exported file systems that can be mounted from the
NFS server,
foobar:&prompt.user; showmount -e foobar
Exports list on foobar:
/usr 10.10.10.0
/a 10.10.10.0
&prompt.user; cd /net/foobar/usrThe output from showmount shows
/usr as an export.
When changing directories to /host/foobar/usr,
&man.automountd.8; intercepts the request and attempts to
resolve the hostname foobar. If successful,
&man.automountd.8; automatically mounts the source
export.To enable &man.autofs.5; at boot time, add this line to
/etc/rc.conf:autofs_enable="YES"Then &man.autofs.5; can be started by running:&prompt.root; service automount start
&prompt.root; service automountd start
&prompt.root; service autounmountd startThe &man.autofs.5; map format is the same as in other
operating systems, it might be desirable to consult
information from other operating systems, such as the Mac
OS X document.Consult the &man.automount.8;, &man.automountd.8;,
&man.autounmountd.8;, and &man.auto.master.5; manual pages for
more information.Network Information System
(NIS)NISSolarisHP-UXAIXLinuxNetBSDOpenBSDyellow pagesNISNetwork Information System (NIS) is
designed to centralize administration of &unix;-like systems
such as &solaris;, HP-UX, &aix;, Linux, NetBSD, OpenBSD, and
&os;. NIS was originally known as Yellow
Pages but the name was changed due to trademark issues. This
is the reason why NIS commands begin with
yp.NISdomainsNIS is a Remote Procedure Call
(RPC)-based client/server system that allows
a group of machines within an NIS domain to
share a common set of configuration files. This permits a
system administrator to set up NIS client
systems with only minimal configuration data and to add, remove,
or modify configuration data from a single location.&os; uses version 2 of the NIS
protocol.NIS Terms and ProcessesTable 28.1 summarizes the terms and important processes
used by NIS:rpcbindportmap
NIS TerminologyTermDescriptionNIS domain nameNIS servers and clients share
an NIS domain name. Typically,
this name does not have anything to do with
DNS.&man.rpcbind.8;This service enables RPC and
must be running in order to run an
NIS server or act as an
NIS client.&man.ypbind.8;This service binds an NIS
client to its NIS server. It will
take the NIS domain name and use
RPC to connect to the server. It
is the core of client/server communication in an
NIS environment. If this service
is not running on a client machine, it will not be
able to access the NIS
server.&man.ypserv.8;This is the process for the
NIS server. If this service stops
running, the server will no longer be able to respond
to NIS requests so hopefully, there
is a slave server to take over. Some non-&os; clients
will not try to reconnect using a slave server and the
ypbind process may need to
be restarted on these
clients.&man.rpc.yppasswdd.8;This process only runs on
NIS master servers. This daemon
allows NIS clients to change their
NIS passwords. If this daemon is
not running, users will have to login to the
NIS master server and change their
passwords there.
Machine TypesNISmaster serverNISslave serverNISclientThere are three types of hosts in an
NIS environment:NIS master serverThis server acts as a central repository for host
configuration information and maintains the
authoritative copy of the files used by all of the
NIS clients. The
passwd, group,
and other various files used by NIS
clients are stored on the master server. While it is
possible for one machine to be an NIS
master server for more than one NIS
domain, this type of configuration will not be covered in
this chapter as it assumes a relatively small-scale
NIS environment.NIS slave serversNIS slave servers maintain copies
of the NIS master's data files in
order to provide redundancy. Slave servers also help to
balance the load of the master server as
NIS clients always attach to the
NIS server which responds
first.NIS clientsNIS clients authenticate
against the NIS server during log
on.Information in many files can be shared using
NIS. The
master.passwd,
group, and hosts
files are commonly shared via NIS.
Whenever a process on a client needs information that would
normally be found in these files locally, it makes a query to
the NIS server that it is bound to
instead.Planning ConsiderationsThis section describes a sample NIS
environment which consists of 15 &os; machines with no
centralized point of administration. Each machine has its own
/etc/passwd and
/etc/master.passwd. These files are kept
in sync with each other only through manual intervention.
Currently, when a user is added to the lab, the process must
be repeated on all 15 machines.The configuration of the lab will be as follows:Machine nameIP addressMachine roleellington10.0.0.2NIS mastercoltrane10.0.0.3NIS slavebasie10.0.0.4Faculty workstationbird10.0.0.5Client machinecli[1-11]10.0.0.[6-17]Other client machinesIf this is the first time an NIS
scheme is being developed, it should be thoroughly planned
ahead of time. Regardless of network size, several decisions
need to be made as part of the planning process.Choosing a NIS Domain NameNISdomain nameWhen a client broadcasts its requests for info, it
includes the name of the NIS domain that
it is part of. This is how multiple servers on one network
can tell which server should answer which request. Think of
the NIS domain name as the name for a
group of hosts.Some organizations choose to use their Internet domain
name for their NIS domain name. This is
not recommended as it can cause confusion when trying to
debug network problems. The NIS domain
name should be unique within the network and it is helpful
if it describes the group of machines it represents. For
example, the Art department at Acme Inc. might be in the
acme-art NIS domain. This
example will use the domain name
test-domain.However, some non-&os; operating systems require the
NIS domain name to be the same as the
Internet domain name. If one or more machines on the
network have this restriction, the Internet domain name
must be used as the
NIS domain name.Physical Server RequirementsThere are several things to keep in mind when choosing a
machine to use as a NIS server. Since
NIS clients depend upon the availability
of the server, choose a machine that is not rebooted
frequently. The NIS server should
ideally be a stand alone machine whose sole purpose is to be
an NIS server. If the network is not
heavily used, it is acceptable to put the
NIS server on a machine running other
services. However, if the NIS server
becomes unavailable, it will adversely affect all
NIS clients.Configuring the NIS Master
Server The canonical copies of all NIS files
are stored on the master server. The databases used to store
the information are called NIS maps. In
&os;, these maps are stored in
/var/yp/[domainname] where
[domainname] is the name of the
NIS domain. Since multiple domains are
supported, it is possible to have several directories, one for
each domain. Each domain will have its own independent set of
maps.NIS master and slave servers handle all
NIS requests through &man.ypserv.8;. This
daemon is responsible for receiving incoming requests from
NIS clients, translating the requested
domain and map name to a path to the corresponding database
file, and transmitting data from the database back to the
client.NISserver configurationSetting up a master NIS server can be
relatively straight forward, depending on environmental needs.
Since &os; provides built-in NIS support,
it only needs to be enabled by adding the following lines to
/etc/rc.conf:nisdomainname="test-domain"
nis_server_enable="YES"
nis_yppasswdd_enable="YES" This line sets the NIS domain name
to test-domain.This automates the start up of the
NIS server processes when the system
boots.This enables the &man.rpc.yppasswdd.8; daemon so that
users can change their NIS password
from a client machine.Care must be taken in a multi-server domain where the
server machines are also NIS clients. It
is generally a good idea to force the servers to bind to
themselves rather than allowing them to broadcast bind
requests and possibly become bound to each other. Strange
failure modes can result if one server goes down and others
are dependent upon it. Eventually, all the clients will time
out and attempt to bind to other servers, but the delay
involved can be considerable and the failure mode is still
present since the servers might bind to each other all over
again.A server that is also a client can be forced to bind to a
particular server by adding these additional lines to
/etc/rc.conf:nis_client_enable="YES" # run client stuff as well
nis_client_flags="-S NIS domain,server"After saving the edits, type
/etc/netstart to restart the network and
apply the values defined in /etc/rc.conf.
Before initializing the NIS maps, start
&man.ypserv.8;:&prompt.root; service ypserv startInitializing the NIS MapsNISmapsNIS maps are generated from the
configuration files in /etc on the
NIS master, with one exception:
/etc/master.passwd. This is to prevent
the propagation of passwords to all the servers in the
NIS domain. Therefore, before the
NIS maps are initialized, configure the
primary password files:&prompt.root; cp /etc/master.passwd /var/yp/master.passwd
&prompt.root; cd /var/yp
&prompt.root; vi master.passwdIt is advisable to remove all entries for system
accounts as well as any user accounts that do not need to be
propagated to the NIS clients, such as
the root and any
other administrative accounts.Ensure that the
/var/yp/master.passwd is neither group
or world readable by setting its permissions to
600.After completing this task, initialize the
NIS maps. &os; includes the
&man.ypinit.8; script to do this. When generating maps
for the master server, include and
specify the NIS domain name:ellington&prompt.root; ypinit -m test-domain
Server Type: MASTER Domain: test-domain
Creating an YP server will require that you answer a few questions.
Questions will all be asked at the beginning of the procedure.
Do you want this procedure to quit on non-fatal errors? [y/n: n] n
Ok, please remember to go back and redo manually whatever fails.
If not, something might not work.
At this point, we have to construct a list of this domains YP servers.
rod.darktech.org is already known as master server.
Please continue to add any slave servers, one per line. When you are
done with the list, type a <control D>.
master server : ellington
next host to add: coltrane
next host to add: ^D
The current list of NIS servers looks like this:
ellington
coltrane
Is this correct? [y/n: y] y
[..output from map generation..]
NIS Map update completed.
ellington has been setup as an YP master server without any errors.This will create /var/yp/Makefile
from /var/yp/Makefile.dist. By
default, this file assumes that the environment has a
single NIS server with only &os; clients.
Since test-domain has a slave server,
edit this line in /var/yp/Makefile so
that it begins with a comment
(#):NOPUSH = "True"Adding New UsersEvery time a new user is created, the user account must
be added to the master NIS server and the
NIS maps rebuilt. Until this occurs, the
new user will not be able to login anywhere except on the
NIS master. For example, to add the new
user jsmith to the
test-domain domain, run these commands on
the master server:&prompt.root; pw useradd jsmith
&prompt.root; cd /var/yp
&prompt.root; make test-domainThe user could also be added using adduser
jsmith instead of pw useradd
smith.Setting up a NIS Slave ServerNISslave serverTo set up an NIS slave server, log on
to the slave server and edit /etc/rc.conf
as for the master server. Do not generate any
NIS maps, as these already exist on the
master server. When running ypinit on the
slave server, use (for slave) instead of
(for master). This option requires the
name of the NIS master in addition to the
domain name, as seen in this example:coltrane&prompt.root; ypinit -s ellington test-domain
Server Type: SLAVE Domain: test-domain Master: ellington
Creating an YP server will require that you answer a few questions.
Questions will all be asked at the beginning of the procedure.
Do you want this procedure to quit on non-fatal errors? [y/n: n] n
Ok, please remember to go back and redo manually whatever fails.
If not, something might not work.
There will be no further questions. The remainder of the procedure
should take a few minutes, to copy the databases from ellington.
Transferring netgroup...
ypxfr: Exiting: Map successfully transferred
Transferring netgroup.byuser...
ypxfr: Exiting: Map successfully transferred
Transferring netgroup.byhost...
ypxfr: Exiting: Map successfully transferred
Transferring master.passwd.byuid...
ypxfr: Exiting: Map successfully transferred
Transferring passwd.byuid...
ypxfr: Exiting: Map successfully transferred
Transferring passwd.byname...
ypxfr: Exiting: Map successfully transferred
Transferring group.bygid...
ypxfr: Exiting: Map successfully transferred
Transferring group.byname...
ypxfr: Exiting: Map successfully transferred
Transferring services.byname...
ypxfr: Exiting: Map successfully transferred
Transferring rpc.bynumber...
ypxfr: Exiting: Map successfully transferred
Transferring rpc.byname...
ypxfr: Exiting: Map successfully transferred
Transferring protocols.byname...
ypxfr: Exiting: Map successfully transferred
Transferring master.passwd.byname...
ypxfr: Exiting: Map successfully transferred
Transferring networks.byname...
ypxfr: Exiting: Map successfully transferred
Transferring networks.byaddr...
ypxfr: Exiting: Map successfully transferred
Transferring netid.byname...
ypxfr: Exiting: Map successfully transferred
Transferring hosts.byaddr...
ypxfr: Exiting: Map successfully transferred
Transferring protocols.bynumber...
ypxfr: Exiting: Map successfully transferred
Transferring ypservers...
ypxfr: Exiting: Map successfully transferred
Transferring hosts.byname...
ypxfr: Exiting: Map successfully transferred
coltrane has been setup as an YP slave server without any errors.
Remember to update map ypservers on ellington.This will generate a directory on the slave server called
/var/yp/test-domain which contains copies
of the NIS master server's maps. Adding
these /etc/crontab entries on each slave
server will force the slaves to sync their maps with the maps
on the master server:20 * * * * root /usr/libexec/ypxfr passwd.byname
21 * * * * root /usr/libexec/ypxfr passwd.byuidThese entries are not mandatory because the master server
automatically attempts to push any map changes to its slaves.
However, since clients may depend upon the slave server to
provide correct password information, it is recommended to
force frequent password map updates. This is especially
important on busy networks where map updates might not always
complete.To finish the configuration, run
/etc/netstart on the slave server in order
to start the NIS services.Setting Up an NIS ClientAn NIS client binds to an
NIS server using &man.ypbind.8;. This
daemon broadcasts RPC requests on the local network. These
requests specify the domain name configured on the client. If
an NIS server in the same domain receives
one of the broadcasts, it will respond to
ypbind, which will record the
server's address. If there are several servers available,
the client will use the address of the first server to respond
and will direct all of its NIS requests to
that server. The client will automatically
ping the server on a regular basis
to make sure it is still available. If it fails to receive a
reply within a reasonable amount of time,
ypbind will mark the domain as
unbound and begin broadcasting again in the hopes of locating
another server.NISclient configurationTo configure a &os; machine to be an
NIS client:Edit /etc/rc.conf and add the
following lines in order to set the
NIS domain name and start
&man.ypbind.8; during network startup:nisdomainname="test-domain"
nis_client_enable="YES"To import all possible password entries from the
NIS server, use
vipw to remove all user accounts
except one from /etc/master.passwd.
When removing the accounts, keep in mind that at least one
local account should remain and this account should be a
member of wheel. If there is a
problem with NIS, this local account
can be used to log in remotely, become the superuser, and
fix the problem. Before saving the edits, add the
following line to the end of the file:+:::::::::This line configures the client to provide anyone with
a valid account in the NIS server's
password maps an account on the client. There are many
ways to configure the NIS client by
modifying this line. One method is described in . For more detailed
reading, refer to the book
Managing NFS and NIS, published by
O'Reilly Media.To import all possible group entries from the
NIS server, add this line to
/etc/group:+:*::To start the NIS client immediately,
execute the following commands as the superuser:&prompt.root; /etc/netstart
&prompt.root; service ypbind startAfter completing these steps, running
ypcat passwd on the client should show
the server's passwd map.NIS SecuritySince RPC is a broadcast-based service,
any system running ypbind within
the same domain can retrieve the contents of the
NIS maps. To prevent unauthorized
transactions, &man.ypserv.8; supports a feature called
securenets which can be used to restrict access
to a given set of hosts. By default, this information is
stored in /var/yp/securenets, unless
&man.ypserv.8; is started with and an
alternate path. This file contains entries that consist of a
network specification and a network mask separated by white
space. Lines starting with # are
considered to be comments. A sample
securenets might look like this:# allow connections from local host -- mandatory
127.0.0.1 255.255.255.255
# allow connections from any host
# on the 192.168.128.0 network
192.168.128.0 255.255.255.0
# allow connections from any host
# between 10.0.0.0 to 10.0.15.255
# this includes the machines in the testlab
10.0.0.0 255.255.240.0If &man.ypserv.8; receives a request from an address that
matches one of these rules, it will process the request
normally. If the address fails to match a rule, the request
will be ignored and a warning message will be logged. If the
securenets does not exist,
ypserv will allow connections from any
host. is an alternate mechanism
for providing access control instead of
securenets. While either access control
mechanism adds some security, they are both vulnerable to
IP spoofing attacks. All
NIS-related traffic should be blocked at
the firewall.Servers using securenets
may fail to serve legitimate NIS clients
with archaic TCP/IP implementations. Some of these
implementations set all host bits to zero when doing
broadcasts or fail to observe the subnet mask when
calculating the broadcast address. While some of these
problems can be fixed by changing the client configuration,
other problems may force the retirement of these client
systems or the abandonment of
securenets.TCP WrapperThe use of TCP Wrapper
increases the latency of the NIS server.
The additional delay may be long enough to cause timeouts in
client programs, especially in busy networks with slow
NIS servers. If one or more clients suffer
from latency, convert those clients into
NIS slave servers and force them to bind to
themselves.Barring Some UsersIn this example, the basie
system is a faculty workstation within the
NIS domain. The
passwd map on the master
NIS server contains accounts for both
faculty and students. This section demonstrates how to
allow faculty logins on this system while refusing student
logins.To prevent specified users from logging on to a system,
even if they are present in the NIS
database, use vipw to add
-username with
the correct number of colons towards the end of
/etc/master.passwd on the client,
where username is the username of
a user to bar from logging in. The line with the blocked
user must be before the + line that
allows NIS users. In this example,
bill is barred
from logging on to basie:basie&prompt.root; cat /etc/master.passwd
root:[password]:0:0::0:0:The super-user:/root:/bin/csh
toor:[password]:0:0::0:0:The other super-user:/root:/bin/sh
daemon:*:1:1::0:0:Owner of many system processes:/root:/sbin/nologin
operator:*:2:5::0:0:System &:/:/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/sbin/nologin
tty:*:4:65533::0:0:Tty Sandbox:/:/sbin/nologin
kmem:*:5:65533::0:0:KMem Sandbox:/:/sbin/nologin
games:*:7:13::0:0:Games pseudo-user:/usr/games:/sbin/nologin
news:*:8:8::0:0:News Subsystem:/:/sbin/nologin
man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/sbin/nologin
bind:*:53:53::0:0:Bind Sandbox:/:/sbin/nologin
uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico
xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/sbin/nologin
pop:*:68:6::0:0:Post Office Owner:/nonexistent:/sbin/nologin
nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin
-bill:::::::::
+:::::::::
basie&prompt.root;Using NetgroupsnetgroupsBarring specified users from logging on to individual
systems becomes unscaleable on larger networks and quickly
loses the main benefit of NIS:
centralized administration.Netgroups were developed to handle large, complex networks
with hundreds of users and machines. Their use is comparable
to &unix; groups, where the main difference is the lack of a
numeric ID and the ability to define a netgroup by including
both user accounts and other netgroups.To expand on the example used in this chapter, the
NIS domain will be extended to add the
users and systems shown in Tables 28.2 and 28.3:
Additional UsersUser Name(s)Descriptionalpha,
betaIT department employeescharlie, deltaIT department apprenticesecho,
foxtrott,
golf,
...employeesable,
baker,
...interns
Additional SystemsMachine Name(s)Descriptionwar,
death,
famine,
pollutionOnly IT employees are allowed to log onto these
servers.pride,
greed,
envy,
wrath,
lust,
slothAll members of the IT department are allowed to
login onto these servers.one,
two,
three,
four,
...Ordinary workstations used by
employees.trashcanA very old machine without any critical data.
Even interns are allowed to use this system.
When using netgroups to configure this scenario, each user
is assigned to one or more netgroups and logins are then
allowed or forbidden for all members of the netgroup. When
adding a new machine, login restrictions must be defined for
all netgroups. When a new user is added, the account must be
added to one or more netgroups. If the
NIS setup is planned carefully, only one
central configuration file needs modification to grant or deny
access to machines.The first step is the initialization of the
NIS netgroup map. In
&os;, this map is not created by default. On the
NIS master server, use an editor to create
a map named /var/yp/netgroup.This example creates four netgroups to represent IT
employees, IT apprentices, employees, and interns:IT_EMP (,alpha,test-domain) (,beta,test-domain)
IT_APP (,charlie,test-domain) (,delta,test-domain)
USERS (,echo,test-domain) (,foxtrott,test-domain) \
(,golf,test-domain)
INTERNS (,able,test-domain) (,baker,test-domain)Each entry configures a netgroup. The first column in an
entry is the name of the netgroup. Each set of brackets
represents either a group of one or more users or the name of
another netgroup. When specifying a user, the three
comma-delimited fields inside each group represent:The name of the host(s) where the other fields
representing the user are valid. If a hostname is not
specified, the entry is valid on all hosts.The name of the account that belongs to this
netgroup.The NIS domain for the account.
Accounts may be imported from other NIS
domains into a netgroup.If a group contains multiple users, separate each user
with whitespace. Additionally, each field may contain
wildcards. See &man.netgroup.5; for details.netgroups
- Netgroup names longer than 8 characters should not be used.
- The names are case sensitive and using capital letters
- for netgroup names is an easy way to distinguish
- between user, machine and netgroup names.
+ Netgroup names longer than 8 characters should not be
+ used. The names are case sensitive and using capital letters
+ for netgroup names is an easy way to distinguish between user,
+ machine and netgroup names.Some non-&os; NIS clients cannot
handle netgroups containing more than 15 entries. This
limit may be circumvented by creating several sub-netgroups
with 15 users or fewer and a real netgroup consisting of the
sub-netgroups, as seen in this example:BIGGRP1 (,joe1,domain) (,joe2,domain) (,joe3,domain) [...]
BIGGRP2 (,joe16,domain) (,joe17,domain) [...]
BIGGRP3 (,joe31,domain) (,joe32,domain)
BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3Repeat this process if more than 225 (15 times 15) users
exist within a single netgroup.To activate and distribute the new
NIS map:ellington&prompt.root; cd /var/yp
ellington&prompt.root; makeThis will generate the three NIS maps
netgroup,
netgroup.byhost and
netgroup.byuser. Use the map key option
of &man.ypcat.1; to check if the new NIS
maps are available:ellington&prompt.user; ypcat -k netgroup
ellington&prompt.user; ypcat -k netgroup.byhost
ellington&prompt.user; ypcat -k netgroup.byuserThe output of the first command should resemble the
contents of /var/yp/netgroup. The second
command only produces output if host-specific netgroups were
created. The third command is used to get the list of
netgroups for a user.To configure a client, use &man.vipw.8; to specify the
name of the netgroup. For example, on the server named
war, replace this line:+:::::::::with+@IT_EMP:::::::::This specifies that only the users defined in the netgroup
IT_EMP will be imported into this system's
password database and only those users are allowed to login to
this system.This configuration also applies to the
~ function of the shell and all routines
which convert between user names and numerical user IDs. In
other words,
cd ~user will
not work, ls -l will show the numerical ID
instead of the username, and find . -user joe
-print will fail with the message
No such user. To fix this, import all
user entries without allowing them to login into the servers.
This can be achieved by adding an extra line:+:::::::::/sbin/nologinThis line configures the client to import all entries but
to replace the shell in those entries with
/sbin/nologin.Make sure that extra line is placed
after+@IT_EMP:::::::::. Otherwise, all user
accounts imported from NIS will have
/sbin/nologin as their login
shell and no one will be able to login to the system.To configure the less important servers, replace the old
+::::::::: on the servers with these
lines:+@IT_EMP:::::::::
+@IT_APP:::::::::
+:::::::::/sbin/nologinThe corresponding lines for the workstations
would be:+@IT_EMP:::::::::
+@USERS:::::::::
+:::::::::/sbin/nologinNIS supports the creation of netgroups from other
netgroups which can be useful if the policy regarding user
access changes. One possibility is the creation of role-based
netgroups. For example, one might create a netgroup called
BIGSRV to define the login restrictions for
the important servers, another netgroup called
SMALLSRV for the less important servers,
and a third netgroup called USERBOX for the
workstations. Each of these netgroups contains the netgroups
that are allowed to login onto these machines. The new
entries for the NIS
netgroup map would look like this:BIGSRV IT_EMP IT_APP
SMALLSRV IT_EMP IT_APP ITINTERN
USERBOX IT_EMP ITINTERN USERSThis method of defining login restrictions works
reasonably well when it is possible to define groups of
machines with identical restrictions. Unfortunately, this is
the exception and not the rule. Most of the time, the ability
to define login restrictions on a per-machine basis is
required.Machine-specific netgroup definitions are another
possibility to deal with the policy changes. In this
scenario, the /etc/master.passwd of each
system contains two lines starting with +.
The first line adds a netgroup with the accounts allowed to
login onto this machine and the second line adds all other
accounts with /sbin/nologin as shell. It
is recommended to use the ALL-CAPS version of
the hostname as the name of the netgroup:+@BOXNAME:::::::::
+:::::::::/sbin/nologinOnce this task is completed on all the machines, there is
no longer a need to modify the local versions of
/etc/master.passwd ever again. All
further changes can be handled by modifying the
NIS map. Here is an example of a possible
netgroup map for this scenario:# Define groups of users first
IT_EMP (,alpha,test-domain) (,beta,test-domain)
IT_APP (,charlie,test-domain) (,delta,test-domain)
DEPT1 (,echo,test-domain) (,foxtrott,test-domain)
DEPT2 (,golf,test-domain) (,hotel,test-domain)
DEPT3 (,india,test-domain) (,juliet,test-domain)
ITINTERN (,kilo,test-domain) (,lima,test-domain)
D_INTERNS (,able,test-domain) (,baker,test-domain)
#
# Now, define some groups based on roles
USERS DEPT1 DEPT2 DEPT3
BIGSRV IT_EMP IT_APP
SMALLSRV IT_EMP IT_APP ITINTERN
USERBOX IT_EMP ITINTERN USERS
#
# And a groups for a special tasks
# Allow echo and golf to access our anti-virus-machine
SECURITY IT_EMP (,echo,test-domain) (,golf,test-domain)
#
# machine-based netgroups
# Our main servers
WAR BIGSRV
FAMINE BIGSRV
# User india needs access to this server
POLLUTION BIGSRV (,india,test-domain)
#
# This one is really important and needs more access restrictions
DEATH IT_EMP
#
# The anti-virus-machine mentioned above
ONE SECURITY
#
# Restrict a machine to a single user
TWO (,hotel,test-domain)
# [...more groups to follow]It may not always be advisable
to use machine-based netgroups. When deploying a couple of
dozen or hundreds of systems,
role-based netgroups instead of machine-based netgroups may be
used to keep the size of the NIS map within
reasonable limits.Password FormatsNISpassword formatsNIS requires that all hosts within an
NIS domain use the same format for
encrypting passwords. If users have trouble authenticating on
an NIS client, it may be due to a differing
password format. In a heterogeneous network, the format must
be supported by all operating systems, where
DES is the lowest common standard.To check which format a server or client is using, look
at this section of
/etc/login.conf:default:\
:passwd_format=des:\
:copyright=/etc/COPYRIGHT:\
[Further entries elided]In this example, the system is using the
DES format. Other possible values are
blf for Blowfish and md5
for MD5 encrypted passwords.If the format on a host needs to be edited to match the
one being used in the NIS domain, the
login capability database must be rebuilt after saving the
change:&prompt.root; cap_mkdb /etc/login.confThe format of passwords for existing user accounts will
not be updated until each user changes their password
after the login capability database is
rebuilt.Lightweight Directory Access Protocol
(LDAP)TomRhodesWritten by LDAPThe Lightweight Directory Access Protocol
(LDAP) is an application layer protocol used
to access, modify, and authenticate objects using a distributed
directory information service. Think of it as a phone or record
book which stores several levels of hierarchical, homogeneous
information. It is used in Active Directory and
OpenLDAP networks and allows users to
access to several levels of internal information utilizing a
single account. For example, email authentication, pulling
employee contact information, and internal website
authentication might all make use of a single user account in
the LDAP server's record base.This section provides a quick start guide for configuring an
LDAP server on a &os; system. It assumes
that the administrator already has a design plan which includes
the type of information to store, what that information will be
used for, which users should have access to that information,
and how to secure this information from unauthorized
access.LDAP Terminology and StructureLDAP uses several terms which should be
understood before starting the configuration. All directory
entries consist of a group of
attributes. Each of these attribute
sets contains a unique identifier known as a
Distinguished Name
(DN) which is normally built from several
other attributes such as the common or
Relative Distinguished Name
(RDN). Similar to how directories have
absolute and relative paths, consider a DN
as an absolute path and the RDN as the
relative path.An example LDAP entry looks like the
following. This example searches for the entry for the
specified user account (uid),
organizational unit (ou), and organization
(o):&prompt.user; ldapsearch -xb "uid=trhodes,ou=users,o=example.com"
# extended LDIF
#
# LDAPv3
# base <uid=trhodes,ou=users,o=example.com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# trhodes, users, example.com
dn: uid=trhodes,ou=users,o=example.com
mail: trhodes@example.com
cn: Tom Rhodes
uid: trhodes
telephoneNumber: (123) 456-7890
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1This example entry shows the values for the
dn, mail,
cn, uid, and
telephoneNumber attributes. The
cn attribute is the
RDN.More information about LDAP and its
terminology can be found at http://www.openldap.org/doc/admin24/intro.html.Configuring an LDAP ServerLDAP Server&os; does not provide a built-in LDAP
server. Begin the configuration by installing the net/openldap24-server package or port.
Since the port has many configurable options, it is
recommended that the default options are reviewed to see if
the package is sufficient, and to instead compile the port if
any options should be changed. In most cases, the defaults
are fine. However, if SQL support is needed, this option must
be enabled and the port compiled using the instructions in
.Next, create the directories to hold the data and to store
the certificates:&prompt.root; mkdir /var/db/openldap-data
&prompt.root; mkdir /usr/local/etc/openldap/privateCopy over the database configuration file:&prompt.root; cp /usr/local/etc/openldap/DB_CONFIG.example /var/db/openldap-data/DB_CONFIGThe next phase is to configure the certificate authority.
The following commands must be executed from
/usr/local/etc/openldap/private. This is
important as the file permissions need to be restrictive and
users should not have access to these files. To create the
certificate authority, start with this command and follow the
prompts:&prompt.root; openssl req -days 365 -nodes -new -x509 -keyout ca.key -out ../ca.crtThe entries for the prompts may be generic
except for the
Common Name. This entry must be
different than the system hostname. If
this will be a self signed certificate, prefix the hostname
with CA for certificate authority.The next task is to create a certificate signing request
and a private key. Input this command and follow the
prompts:&prompt.root; openssl req -days 365 -nodes -new -keyout server.key -out server.csrDuring the certificate generation process, be sure to
correctly set the Common Name attribute.
Once complete, sign the key:&prompt.root; openssl x509 -req -days 365 -in server.csr -out ../server.crt -CA ../ca.crt -CAkey ca.key -CAcreateserialThe final part of the certificate generation process is to
generate and sign the client certificates:&prompt.root; openssl req -days 365 -nodes -new -keyout client.key -out client.csr
&prompt.root; openssl x509 -req -days 3650 -in client.csr -out ../client.crt -CA ../ca.crt -CAkey ca.keyRemember to use the same Common Name
attribute when prompted. When finished, ensure that a total
of eight (8) new files have been generated through the
proceeding commands. If so, the next step is to edit
/usr/local/etc/openldap/slapd.conf and
add the following options:TLSCipherSuite HIGH:MEDIUM:+SSLv3
TLSCertificateFile /usr/local/etc/openldap/server.crt
TLSCertificateKeyFile /usr/local/etc/openldap/private/server.key
TLSCACertificateFile /usr/local/etc/openldap/ca.crtThen, edit
/usr/local/etc/openldap/ldap.conf and add
the following lines:TLS_CACERT /usr/local/etc/openldap/ca.crt
TLS_CIPHER_SUITE HIGH:MEDIUM:+SSLv3While editing this file, uncomment the following entries
and set them to the desired values: ,
, and
. Set the to
contain and
. Then, add two entries pointing to
the certificate authority. When finished, the entries should
look similar to the following:BASE dc=example,dc=com
URI ldap:// ldaps://
SIZELIMIT 12
TIMELIMIT 15
TLS_CACERT /usr/local/etc/openldap/ca.crt
TLS_CIPHER_SUITE HIGH:MEDIUM:+SSLv3The default password for the server should then be
changed:&prompt.root; slappasswd -h "{SHA}" >> /usr/local/etc/openldap/slapd.confThis command will prompt for the password and, if the
process does not fail, a password hash will be added to the
end of slapd.conf. Several hashing
formats are supported. Refer to the manual page for
slappasswd for more information.Next, edit
/usr/local/etc/openldap/slapd.conf and
add the following lines:password-hash {sha}
allow bind_v2The in this file must be updated
to match the used in
/usr/local/etc/openldap/ldap.conf and
should also be set. A recommended
value for is something like
. Before saving this file, place
the in front of the password output
from slappasswd and delete the old
. The end result should
look similar to this:TLSCipherSuite HIGH:MEDIUM:+SSLv3
TLSCertificateFile /usr/local/etc/openldap/server.crt
TLSCertificateKeyFile /usr/local/etc/openldap/private/server.key
TLSCACertificateFile /usr/local/etc/openldap/ca.crt
rootpw {SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g=Finally, enable the OpenLDAP
service in /etc/rc.conf and set the
URI:slapd_enable="YES"
slapd_flags="-4 -h ldaps:///"At this point the server can be started and tested:&prompt.root; service slapd startIf everything is configured correctly, a search of the
directory should show a successful connection with a single
response as in this example:&prompt.root; ldapsearch -Z
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# search result
search: 3
result: 32 No such object
# numResponses: 1If the command fails and the configuration looks
correct, stop the slapd service and
restart it with debugging options:&prompt.root; service slapd stop
&prompt.root; /usr/local/libexec/slapd -d -1Once the service is responding, the directory can be
populated using ldapadd. In this example,
a file containing this list of users is first created. Each
user should use the following format:dn: dc=example,dc=com
objectclass: dcObject
objectclass: organization
o: Example
dc: Example
dn: cn=Manager,dc=example,dc=com
objectclass: organizationalRole
cn: ManagerTo import this file, specify the file name. The following
command will prompt for the password specified earlier and the
output should look something like this:&prompt.root; ldapadd -Z -D "cn=Manager,dc=example,dc=com" -W -f import.ldif
Enter LDAP Password:
adding new entry "dc=example,dc=com"
adding new entry "cn=Manager,dc=example,dc=com"Verify the data was added by issuing a search on the
server using ldapsearch:&prompt.user; ldapsearch -Z
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# example.com
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
o: Example
dc: Example
# Manager, example.com
dn: cn=Manager,dc=example,dc=com
objectClass: organizationalRole
cn: Manager
# search result
search: 3
result: 0 Success
# numResponses: 3
# numEntries: 2At this point, the server should be configured and
functioning properly.Dynamic Host Configuration Protocol
(DHCP)Dynamic Host Configuration ProtocolDHCPInternet Systems Consortium (ISC)The Dynamic Host Configuration Protocol
(DHCP) allows a system to connect to a
network in order to be assigned the necessary addressing
information for communication on that network. &os; includes
the OpenBSD version of dhclient which is used
by the client to obtain the addressing information. &os; does
not install a DHCP server, but several
servers are available in the &os; Ports Collection. The
DHCP protocol is fully described in RFC
2131.
Informational resources are also available at isc.org/downloads/dhcp/.This section describes how to use the built-in
DHCP client. It then describes how to
install and configure a DHCP server.In &os;, the &man.bpf.4; device is needed by both the
DHCP server and DHCP
client. This device is included in the
GENERIC kernel that is installed with
&os;. Users who prefer to create a custom kernel need to keep
this device if DHCP is used.It should be noted that bpf also
allows privileged users to run network packet sniffers on
that system.Configuring a DHCP ClientDHCP client support is included in the
&os; installer, making it easy to configure a newly installed
system to automatically receive its networking addressing
information from an existing DHCP server.
Refer to for examples of
network configuration.UDPWhen dhclient is executed on the client
machine, it begins broadcasting requests for configuration
information. By default, these requests use
UDP port 68. The server replies on
UDP port 67, giving the client an
IP address and other relevant network
information such as a subnet mask, default gateway, and
DNS server addresses. This information is
in the form of a DHCP
lease and is valid for a configurable time.
This allows stale IP addresses for clients
no longer connected to the network to automatically be reused.
DHCP clients can obtain a great deal of
information from the server. An exhaustive list may be found
in &man.dhcp-options.5;.By default, when a &os; system boots, its
DHCP client runs in the background, or
asynchronously. Other startup scripts
continue to run while the DHCP process
completes, which speeds up system startup.Background DHCP works well when the
DHCP server responds quickly to the
client's requests. However, DHCP may take
a long time to complete on some systems. If network services
attempt to run before DHCP has assigned the
network addressing information, they will fail. Using
DHCP in synchronous
mode prevents this problem as it pauses startup until the
DHCP configuration has completed.This line in /etc/rc.conf is used to
configure background or asynchronous mode:ifconfig_fxp0="DHCP"This line may already exist if the system was configured
to use DHCP during installation. Replace
the fxp0 shown in these examples
with the name of the interface to be dynamically configured,
as described in .To instead configure the system to use synchronous mode,
and to pause during startup while DHCP
completes, use
SYNCDHCP:ifconfig_fxp0="SYNCDHCP"Additional client options are available. Search for
dhclient in &man.rc.conf.5; for
details.DHCPconfiguration filesThe DHCP client uses the following
files:/etc/dhclient.confThe configuration file used by
dhclient. Typically, this file
contains only comments as the defaults are suitable for
most clients. This configuration file is described in
&man.dhclient.conf.5;./sbin/dhclientMore information about the command itself can
be found in &man.dhclient.8;./sbin/dhclient-scriptThe
&os;-specific DHCP client configuration
script. It is described in &man.dhclient-script.8;, but
should not need any user modification to function
properly./var/db/dhclient.leases.interfaceThe DHCP client keeps a database of
valid leases in this file, which is written as a log and
is described in &man.dhclient.leases.5;.Installing and Configuring a DHCP
ServerThis section demonstrates how to configure a &os; system
to act as a DHCP server using the Internet
Systems Consortium (ISC) implementation of
the DHCP server. This implementation and
its documentation can be installed using the
net/isc-dhcp42-server package or
port.DHCPserverDHCPinstallationThe installation of
net/isc-dhcp42-server installs a sample
configuration file. Copy
/usr/local/etc/dhcpd.conf.example to
/usr/local/etc/dhcpd.conf and make any
edits to this new file.DHCPdhcpd.confThe configuration file is comprised of declarations for
subnets and hosts which define the information that is
provided to DHCP clients. For example,
these lines configure the following:option domain-name "example.org";
option domain-name-servers ns1.example.org;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 72400;
ddns-update-style none;
subnet 10.254.239.0 netmask 255.255.255.224 {
range 10.254.239.10 10.254.239.20;
option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}
host fantasia {
hardware ethernet 08:00:07:26:c0:a5;
fixed-address fantasia.fugue.com;
}This option specifies the default search domain that
will be provided to clients. Refer to
&man.resolv.conf.5; for more information.This option specifies a comma separated list of
DNS servers that the client should use.
They can be listed by their Fully Qualified Domain Names
(FQDN), as seen in the example, or by
their IP addresses.The subnet mask that will be provided to
clients.The default lease expiry time in seconds. A client
can be configured to override this value. The maximum allowed length of time, in seconds, for a
lease. Should a client request a longer lease, a lease
will still be issued, but it will only be valid for
max-lease-time.The default of disables dynamic
DNS updates. Changing this to
configures the DHCP server to update a
DNS server whenever it hands out a
lease so that the DNS server knows
which IP addresses are associated with
which computers in the network. Do not change the default
setting unless the DNS server has been
configured to support dynamic
DNS.This line creates a pool of available
IP addresses which are reserved for
allocation to DHCP clients. The range
of addresses must be valid for the network or subnet
specified in the previous line.Declares the default gateway that is valid for the
network or subnet specified before the opening
{ bracket.Specifies the hardware MAC address
of a client so that the DHCP server can
recognize the client when it makes a request.Specifies that this host should always be given the
same IP address. Using the hostname is
correct, since the DHCP server will
resolve the hostname before returning the lease
information.This configuration file supports many more options. Refer
to dhcpd.conf(5), installed with the server, for details and
examples.Once the configuration of dhcpd.conf
is complete, enable the DHCP server in
/etc/rc.conf:dhcpd_enable="YES"
dhcpd_ifaces="dc0"Replace the dc0 with the interface (or
interfaces, separated by whitespace) that the
DHCP server should listen on for
DHCP client requests.Start the server by issuing the following command:&prompt.root; service isc-dhcpd startAny future changes to the configuration of the server will
require the dhcpd service to be
stopped and then started using &man.service.8;.The DHCP server uses the following
files. Note that the manual pages are installed with the
server software.DHCPconfiguration files/usr/local/sbin/dhcpdMore information about the
dhcpd server can be found in
dhcpd(8)./usr/local/etc/dhcpd.confThe server configuration file needs to contain all the
information that should be provided to clients, along with
information regarding the operation of the server. This
configuration file is described in dhcpd.conf(5)./var/db/dhcpd.leasesThe DHCP server keeps a database of
leases it has issued in this file, which is written as a
log. Refer to dhcpd.leases(5), which gives a slightly
longer description./usr/local/sbin/dhcrelayThis daemon is used in advanced environments where one
DHCP server forwards a request from a
client to another DHCP server on a
separate network. If this functionality is required,
install the net/isc-dhcp42-relay
package or port. The installation includes dhcrelay(8)
which provides more detail.Domain Name System (DNS)DNSDomain Name System (DNS) is the protocol
through which domain names are mapped to IP
addresses, and vice versa. DNS is
coordinated across the Internet through a somewhat complex
system of authoritative root, Top Level Domain
(TLD), and other smaller-scale name servers,
which host and cache individual domain information. It is not
necessary to run a name server to perform
DNS lookups on a system.BINDIn &os; 10, the Berkeley Internet Name Domain
(BIND) has been removed from the base system
and replaced with Unbound. Unbound as configured in the &os;
Base is a local caching resolver. BIND is
still available from The Ports Collection as dns/bind99 or dns/bind98. In &os; 9 and lower,
BIND is included in &os; Base. The &os;
version provides enhanced security features, a new file system
layout, and automated &man.chroot.8; configuration.
BIND is maintained by the Internet Systems
Consortium.resolverreverse
DNSroot zoneThe following table describes some of the terms associated
with DNS:
DNS TerminologyTermDefinitionForward DNSMapping of hostnames to IP
addresses.OriginRefers to the domain covered in a particular zone
file.named, BINDCommon names for the BIND name server package
within &os;.ResolverA system process through which a machine queries
a name server for zone information.Reverse DNSMapping of IP addresses to
hostnames.Root zoneThe beginning of the Internet zone hierarchy. All
zones fall under the root zone, similar to how all files
in a file system fall under the root directory.ZoneAn individual domain, subdomain, or portion of the
DNS administered by the same
authority.
zonesexamplesExamples of zones:. is how the root zone is
usually referred to in documentation.org. is a Top Level Domain
(TLD) under the root zone.example.org. is a zone
under the org.
TLD.1.168.192.in-addr.arpa is a
zone referencing all IP addresses which
fall under the 192.168.1.*
IP address space.As one can see, the more specific part of a hostname
appears to its left. For example, example.org. is more
specific than org., as
org. is more specific than the root
zone. The layout of each part of a hostname is much like a file
system: the /dev directory falls within the
root, and so on.Reasons to Run a Name ServerName servers generally come in two forms: authoritative
name servers, and caching (also known as resolving) name
servers.An authoritative name server is needed when:One wants to serve DNS information
to the world, replying authoritatively to queries.A domain, such as example.org, is
registered and IP addresses need to be
assigned to hostnames under it.An IP address block requires
reverse DNS entries
(IP to hostname).A backup or second name server, called a slave, will
reply to queries.A caching name server is needed when:A local DNS server may cache and
respond more quickly than querying an outside name
server.When one queries for www.FreeBSD.org, the
resolver usually queries the uplink ISP's
name server, and retrieves the reply. With a local, caching
DNS server, the query only has to be made
once to the outside world by the caching
DNS server. Additional queries will not
have to go outside the local network, since the information is
cached locally.DNS Server Configuration in &os; 10.0
and LaterIn &os; 10.0, BIND has been
replaced with Unbound.
Unbound is a validating caching
resolver only. If an authoritative server is needed, many are
available from the Ports Collection.Unbound is provided in the &os;
base system. By default, it will provide
DNS resolution to the local machine only.
While the base system package can be configured to provide
resolution services beyond the local machine, it is
recommended that such requirements be addressed by installing
Unbound from the &os; Ports
Collection.To enable Unbound, add the
following to /etc/rc.conf:local_unbound_enable="YES"Any existing nameservers in
/etc/resolv.conf will be configured as
forwarders in the new Unbound
configuration.If any of the listed nameservers do not support
DNSSEC, local DNS
resolution will fail. Be sure to test each nameserver and
remove any that fail the test. The following command will
show the trust tree or a failure for a nameserver running on
192.168.1.1:&prompt.user; drill -S FreeBSD.org @192.168.1.1Once each nameserver is confirmed to support
DNSSEC, start
Unbound:&prompt.root; service local_unbound onestartThis will take care of updating
/etc/resolv.conf so that queries for
DNSSEC secured domains will now work. For
example, run the following to validate the FreeBSD.org
DNSSEC trust tree:&prompt.user; drill -S FreeBSD.org
;; Number of trusted keys: 1
;; Chasing: freebsd.org. A
DNSSEC Trust tree:
freebsd.org. (A)
|---freebsd.org. (DNSKEY keytag: 36786 alg: 8 flags: 256)
|---freebsd.org. (DNSKEY keytag: 32659 alg: 8 flags: 257)
|---freebsd.org. (DS keytag: 32659 digest type: 2)
|---org. (DNSKEY keytag: 49587 alg: 7 flags: 256)
|---org. (DNSKEY keytag: 9795 alg: 7 flags: 257)
|---org. (DNSKEY keytag: 21366 alg: 7 flags: 257)
|---org. (DS keytag: 21366 digest type: 1)
| |---. (DNSKEY keytag: 40926 alg: 8 flags: 256)
| |---. (DNSKEY keytag: 19036 alg: 8 flags: 257)
|---org. (DS keytag: 21366 digest type: 2)
|---. (DNSKEY keytag: 40926 alg: 8 flags: 256)
|---. (DNSKEY keytag: 19036 alg: 8 flags: 257)
;; Chase successfulDNS Server Configuration in &os;
9.X and EarlierIn &os;, the BIND daemon is called
named.FileDescription&man.named.8;The BIND daemon.&man.rndc.8;Name server control utility./etc/namedbDirectory where BIND zone information
resides./etc/namedb/named.confConfiguration file of the daemon.Depending on how a given zone is configured on the server,
the files related to that zone can be found in the
master,
slave, or
dynamic subdirectories
of the /etc/namedb
directory. These files contain the DNS
information that will be given out by the name server in
response to queries.Starting BINDBINDstartingSince BIND is installed by default, configuring it is
relatively simple.The default named configuration
is that of a basic resolving name server, running in a
&man.chroot.8; environment, and restricted to listening on the
local IPv4 loopback address (127.0.0.1). To start the server
one time with this configuration, use the following
command:&prompt.root; service named onestartTo ensure the named daemon is
started at boot each time, put the following line into the
/etc/rc.conf:named_enable="YES"There are many configuration options for
/etc/namedb/named.conf that are beyond
the scope of this document. Other startup options
for named on &os; can be found in
the named_*
flags in /etc/defaults/rc.conf and in
&man.rc.conf.5;. The
section is also a good
read.Configuration FilesBINDconfiguration filesConfiguration files for named
currently reside in
/etc/namedb directory
and will need modification before use unless all that is
needed is a simple resolver. This is where most of the
configuration will be performed./etc/namedb/named.conf// $FreeBSD$
//
// Refer to the named.conf(5) and named(8) man pages, and the documentation
// in /usr/share/doc/bind9 for more details.
//
// If you are going to set up an authoritative server, make sure you
// understand the hairy details of how DNS works. Even with
// simple mistakes, you can break connectivity for affected parties,
// or cause huge amounts of useless Internet traffic.
options {
// All file and path names are relative to the chroot directory,
// if any, and should be fully qualified.
directory "/etc/namedb/working";
pid-file "/var/run/named/pid";
dump-file "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats";
// If named is being used only as a local resolver, this is a safe default.
// For named to be accessible to the network, comment this option, specify
// the proper IP address, or delete this option.
listen-on { 127.0.0.1; };
// If you have IPv6 enabled on this system, uncomment this option for
// use as a local resolver. To give access to the network, specify
// an IPv6 address, or the keyword "any".
// listen-on-v6 { ::1; };
// These zones are already covered by the empty zones listed below.
// If you remove the related empty zones below, comment these lines out.
disable-empty-zone "255.255.255.255.IN-ADDR.ARPA";
disable-empty-zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";
disable-empty-zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";
// If you've got a DNS server around at your upstream provider, enter
// its IP address here, and enable the line below. This will make you
// benefit from its cache, thus reduce overall DNS traffic in the Internet.
/*
forwarders {
127.0.0.1;
};
*/
// If the 'forwarders' clause is not empty the default is to 'forward first'
// which will fall back to sending a query from your local server if the name
// servers in 'forwarders' do not have the answer. Alternatively you can
// force your name server to never initiate queries of its own by enabling the
// following line:
// forward only;
// If you wish to have forwarding configured automatically based on
// the entries in /etc/resolv.conf, uncomment the following line and
// set named_auto_forward=yes in /etc/rc.conf. You can also enable
// named_auto_forward_only (the effect of which is described above).
// include "/etc/namedb/auto_forward.conf";Just as the comment says, to benefit from an uplink's
cache, forwarders can be enabled here.
Under normal circumstances, a name server will recursively
query the Internet looking at certain name servers until it
finds the answer it is looking for. Having this enabled
will have it query the uplink's name server (or name server
provided) first, taking advantage of its cache. If the
uplink name server in question is a heavily trafficked, fast
name server, enabling this may be worthwhile.127.0.0.1
will not work here. Change this
IP address to a name server at the
uplink. /*
Modern versions of BIND use a random UDP port for each outgoing
query by default in order to dramatically reduce the possibility
of cache poisoning. All users are strongly encouraged to utilize
this feature, and to configure their firewalls to accommodate it.
AS A LAST RESORT in order to get around a restrictive firewall
policy you can try enabling the option below. Use of this option
will significantly reduce your ability to withstand cache poisoning
attacks, and should be avoided if at all possible.
Replace NNNNN in the example with a number between 49160 and 65530.
*/
// query-source address * port NNNNN;
};
// If you enable a local name server, don't forget to enter 127.0.0.1
// first in your /etc/resolv.conf so this server will be queried.
// Also, make sure to enable it in /etc/rc.conf.
// The traditional root hints mechanism. Use this, OR the slave zones below.
zone "." { type hint; file "/etc/namedb/named.root"; };
/* Slaving the following zones from the root name servers has some
significant advantages:
1. Faster local resolution for your users
2. No spurious traffic will be sent from your network to the roots
3. Greater resilience to any potential root server failure/DDoS
On the other hand, this method requires more monitoring than the
hints file to be sure that an unexpected failure mode has not
incapacitated your server. Name servers that are serving a lot
of clients will benefit more from this approach than individual
hosts. Use with caution.
To use this mechanism, uncomment the entries below, and comment
the hint zone above.
As documented at http://dns.icann.org/services/axfr/ these zones:
"." (the root), ARPA, IN-ADDR.ARPA, IP6.ARPA, and ROOT-SERVERS.NET
are available for AXFR from these servers on IPv4 and IPv6:
xfr.lax.dns.icann.org, xfr.cjr.dns.icann.org
*/
/*
zone "." {
type slave;
file "/etc/namedb/slave/root.slave";
masters {
192.5.5.241; // F.ROOT-SERVERS.NET.
};
notify no;
};
zone "arpa" {
type slave;
file "/etc/namedb/slave/arpa.slave";
masters {
192.5.5.241; // F.ROOT-SERVERS.NET.
};
notify no;
};
*/
/* Serving the following zones locally will prevent any queries
for these zones leaving your network and going to the root
name servers. This has two significant advantages:
1. Faster local resolution for your users
2. No spurious traffic will be sent from your network to the roots
*/
// RFCs 1912 and 5735 (and BCP 32 for localhost)
zone "localhost" { type master; file "/etc/namedb/master/localhost-forward.db"; };
zone "127.in-addr.arpa" { type master; file "/etc/namedb/master/localhost-reverse.db"; };
zone "255.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// RFC 1912-style zone for IPv6 localhost address
zone "0.ip6.arpa" { type master; file "/etc/namedb/master/localhost-reverse.db"; };
// "This" Network (RFCs 1912 and 5735)
zone "0.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// Private Use Networks (RFCs 1918 and 5735)
zone "10.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "16.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "17.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "18.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "19.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "20.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "21.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "22.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "23.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "24.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "25.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "26.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "27.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "28.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "29.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "30.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "31.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "168.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// Link-local/APIPA (RFCs 3927 and 5735)
zone "254.169.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// IETF protocol assignments (RFCs 5735 and 5736)
zone "0.0.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// TEST-NET-[1-3] for Documentation (RFCs 5735 and 5737)
zone "2.0.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "100.51.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "113.0.203.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// IPv6 Range for Documentation (RFC 3849)
zone "8.b.d.0.1.0.0.2.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// Domain Names for Documentation and Testing (BCP 32)
zone "test" { type master; file "/etc/namedb/master/empty.db"; };
zone "example" { type master; file "/etc/namedb/master/empty.db"; };
zone "invalid" { type master; file "/etc/namedb/master/empty.db"; };
zone "example.com" { type master; file "/etc/namedb/master/empty.db"; };
zone "example.net" { type master; file "/etc/namedb/master/empty.db"; };
zone "example.org" { type master; file "/etc/namedb/master/empty.db"; };
// Router Benchmark Testing (RFCs 2544 and 5735)
zone "18.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "19.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// IANA Reserved - Old Class E Space (RFC 5735)
zone "240.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "241.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "242.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "243.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "244.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "245.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "246.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "247.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "248.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "249.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "250.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "251.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "252.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "253.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "254.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// IPv6 Unassigned Addresses (RFC 4291)
zone "1.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "3.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "4.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "5.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "6.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "7.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "8.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "9.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "a.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "b.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "c.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "d.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "e.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "0.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "1.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "2.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "3.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "4.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "5.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "6.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "7.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "8.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "9.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "a.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "b.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "0.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "1.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "2.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "3.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "4.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "5.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "6.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "7.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// IPv6 ULA (RFC 4193)
zone "c.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "d.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// IPv6 Link Local (RFC 4291)
zone "8.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "9.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "a.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "b.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// IPv6 Deprecated Site-Local Addresses (RFC 3879)
zone "c.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "d.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "e.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "f.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// IP6.INT is Deprecated (RFC 4159)
zone "ip6.int" { type master; file "/etc/namedb/master/empty.db"; };
// NB: Do not use the IP addresses below, they are faked, and only
// serve demonstration/documentation purposes!
//
// Example slave zone config entries. It can be convenient to become
// a slave at least for the zone your own domain is in. Ask
// your network administrator for the IP address of the responsible
// master name server.
//
// Do not forget to include the reverse lookup zone!
// This is named after the first bytes of the IP address, in reverse
// order, with ".IN-ADDR.ARPA" appended, or ".IP6.ARPA" for IPv6.
//
// Before starting to set up a master zone, make sure you fully
// understand how DNS and BIND work. There are sometimes
// non-obvious pitfalls. Setting up a slave zone is usually simpler.
//
// NB: Don't blindly enable the examples below. :-) Use actual names
// and addresses instead.
/* An example dynamic zone
key "exampleorgkey" {
algorithm hmac-md5;
secret "sf87HJqjkqh8ac87a02lla==";
};
zone "example.org" {
type master;
allow-update {
key "exampleorgkey";
};
file "/etc/namedb/dynamic/example.org";
};
*/
/* Example of a slave reverse zone
zone "1.168.192.in-addr.arpa" {
type slave;
file "/etc/namedb/slave/1.168.192.in-addr.arpa";
masters {
192.168.1.1;
};
};
*/In named.conf, these are examples
of slave entries for a forward and reverse zone.For each new zone served, a new zone entry must be added
to named.conf.For example, the simplest zone entry for
example.org
can look like:zone "example.org" {
type master;
file "master/example.org";
};The zone is a master, as indicated by the
statement, holding its zone
information in
/etc/namedb/master/example.org
indicated by the statement.zone "example.org" {
type slave;
file "slave/example.org";
};In the slave case, the zone information is transferred
from the master name server for the particular zone, and
saved in the file specified. If and when the master server
dies or is unreachable, the slave name server will have the
transferred zone information and will be able to serve
it.Zone FilesBINDzone filesAn example master zone file for example.org (existing
within /etc/namedb/master/example.org)
is as follows:$TTL 3600 ; 1 hour default TTL
example.org. IN SOA ns1.example.org. admin.example.org. (
2006051501 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
300 ; Negative Response TTL
)
; DNS Servers
IN NS ns1.example.org.
IN NS ns2.example.org.
; MX Records
IN MX 10 mx.example.org.
IN MX 20 mail.example.org.
IN A 192.168.1.1
; Machine Names
localhost IN A 127.0.0.1
ns1 IN A 192.168.1.2
ns2 IN A 192.168.1.3
mx IN A 192.168.1.4
mail IN A 192.168.1.5
; Aliases
www IN CNAME example.org.Note that every hostname ending in a . is
an exact hostname, whereas everything without a trailing
. is relative to the origin. For example,
ns1 is translated into
ns1.example.org.The format of a zone file follows:recordname IN recordtype valueDNSrecordsThe most commonly used DNS
records:SOAstart of zone authorityNSan authoritative name serverAa host addressCNAMEthe canonical name for an
aliasMXmail exchangerPTRa domain name pointer (used in reverse
DNS)example.org. IN SOA ns1.example.org. admin.example.org. (
2006051501 ; Serial
10800 ; Refresh after 3 hours
3600 ; Retry after 1 hour
604800 ; Expire after 1 week
300 ) ; Negative Response TTLexample.org.the domain name, also the origin for this
zone file.ns1.example.org.the primary/authoritative name server for this
zone.admin.example.org.the responsible person for this zone,
email address with @
replaced. (admin@example.org becomes
admin.example.org)2006051501the serial number of the file. This must be
incremented each time the zone file is modified.
Nowadays, many admins prefer a
yyyymmddrr format for the serial
number. 2006051501 would mean last
modified 05/15/2006, the latter 01
being the first time the zone file has been modified
this day. The serial number is important as it alerts
slave name servers for a zone when it is
updated. IN NS ns1.example.org.This is an NS entry. Every name server that is going to
reply authoritatively for the zone must have one of these
entries.localhost IN A 127.0.0.1
ns1 IN A 192.168.1.2
ns2 IN A 192.168.1.3
mx IN A 192.168.1.4
mail IN A 192.168.1.5The A record indicates machine names. As seen above,
ns1.example.org would
resolve to 192.168.1.2. IN A 192.168.1.1This line assigns IP address
192.168.1.1 to
the current origin, in this case example.org.www IN CNAME @The canonical name record is usually used for giving
aliases to a machine. In the example,
www is aliased to the
master machine whose name happens to be the
same as the domain name example.org
(192.168.1.1).
CNAMEs can never be used together with another kind of
record for the same hostname.MX record IN MX 10 mail.example.org.The MX record indicates which mail servers are
responsible for handling incoming mail for the zone.
mail.example.org is the
hostname of a mail server, and 10 is the priority of that
mail server.One can have several mail servers, with priorities of
10, 20 and so on. A mail server attempting to deliver to
example.org
would first try the highest priority MX (the record with the
lowest priority number), then the second highest, etc, until
the mail can be properly delivered.For in-addr.arpa zone files (reverse
DNS), the same format is used, except
with PTR entries instead of A or CNAME.$TTL 3600
1.168.192.in-addr.arpa. IN SOA ns1.example.org. admin.example.org. (
2006051501 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
300 ) ; Negative Response TTL
IN NS ns1.example.org.
IN NS ns2.example.org.
1 IN PTR example.org.
2 IN PTR ns1.example.org.
3 IN PTR ns2.example.org.
4 IN PTR mx.example.org.
5 IN PTR mail.example.org.This file gives the proper IP address
to hostname mappings for the above fictitious domain.It is worth noting that all names on the right side
of a PTR record need to be fully qualified (i.e., end in
a .).Caching Name ServerBINDcaching name serverA caching name server is a name server whose primary role
is to resolve recursive queries. It simply asks queries of
its own, and remembers the answers for later use.DNSSECBINDDNS security
extensionsDomain Name System Security Extensions, or DNSSEC for
short, is a suite of specifications to protect resolving name
servers from forged DNS data, such as
spoofed DNS records. By using digital
signatures, a resolver can verify the integrity of the record.
Note that DNSSEC only provides integrity via
digitally signing the Resource Records (RRs). It provides neither
confidentiality nor protection against false end-user
assumptions. This means that it cannot protect against people
going to example.net instead of
example.com.
The only thing DNSSEC does is authenticate
that the data has not been compromised in transit. The
security of DNS is an important step in
securing the Internet in general. For more in-depth details
of how DNSSEC works, the relevant
RFCs are a good place to start. See the
list in .The following sections will demonstrate how to enable
DNSSEC for an authoritative
DNS server and a recursive (or caching)
DNS server running BIND
9. While all versions of BIND 9 support
DNSSEC, it is necessary to have at least
version 9.6.2 in order to be able to use the signed root zone
when validating DNS queries. This is
because earlier versions lack the required algorithms to
enable validation using the root zone key. It is strongly
recommended to use the latest version of
BIND 9.7 or later to take advantage of
automatic key updating for the root key, as well as other
features to automatically keep zones signed and signatures up
to date. Where configurations differ between 9.6.2 and 9.7
and later, differences will be pointed out.Recursive DNS Server
ConfigurationEnabling DNSSEC validation of queries
performed by a recursive DNS server
requires a few changes to named.conf.
Before making these changes the root zone key, or trust
anchor, must be acquired. Currently the root zone key is
not available in a file format BIND
understands, so it has to be manually converted into the
proper format. The key itself can be obtained by querying
the root zone for it using dig.
By running&prompt.user; dig +multi +noall +answer DNSKEY . > root.dnskeythe key will end up in root.dnskey.
The contents should look something like this:. 93910 IN DNSKEY 257 3 8 (
AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQ
bSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh
/RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWA
JQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXp
oY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3
LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGO
Yl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGc
LmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0=
) ; key id = 19036
. 93910 IN DNSKEY 256 3 8 (
AwEAAcaGQEA+OJmOzfzVfoYN249JId7gx+OZMbxy69Hf
UyuGBbRN0+HuTOpBxxBCkNOL+EJB9qJxt+0FEY6ZUVjE
g58sRr4ZQ6Iu6b1xTBKgc193zUARk4mmQ/PPGxn7Cn5V
EGJ/1h6dNaiXuRHwR+7oWh7DnzkIJChcTqlFrXDW3tjt
) ; key id = 34525Do not be alarmed if the obtained keys differ from this
example. They might have changed since these instructions
were last updated. This output actually contains two keys.
The first key in the listing, with the value 257 after the
DNSKEY record type, is the one needed. This value indicates
that this is a Secure Entry Point
(SEP), commonly
known as a Key Signing Key
(KSK). The second
key, with value 256, is a subordinate key, commonly called a
Zone Signing Key
(ZSK). More on
the different key types later in
.Now the key must be verified and formatted so that
BIND can use it. To verify the key,
generate a DS
RR set. Create a
file containing these
RRs with&prompt.user; dnssec-dsfromkey -f root.dnskey . > root.dsThese records use SHA-1 and SHA-256 respectively, and
should look similar to the following example, where the
longer is using SHA-256.. IN DS 19036 8 1
B256BD09DC8DD59F0E0F0D8541B8328DD986DF6E
. IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5The SHA-256 RR can now be compared to
the digest in https://data.iana.org/root-anchors/root-anchors.xml.
To be absolutely sure that the key has not been tampered
with the data in the XML file can be
verified using the PGP signature in
https://data.iana.org/root-anchors/root-anchors.asc.Next, the key must be formatted properly. This differs
a little between BIND versions 9.6.2 and
9.7 and later. In version 9.7 support was added to
automatically track changes to the key and update it as
necessary. This is done using
managed-keys as seen in the example
below. When using the older version, the key is added using
a trusted-keys statement and updates must
be done manually. For BIND 9.6.2 the
format should look like:trusted-keys {
"." 257 3 8
"AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF
FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX
bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD
X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz
W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS
Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq
QxA+Uk1ihz0=";
};For 9.7 the format will instead be:managed-keys {
"." initial-key 257 3 8
"AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF
FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX
bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD
X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz
W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS
Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq
QxA+Uk1ihz0=";
};The root key can now be added to
named.conf either directly or by
including a file containing the key. After these steps,
configure BIND to do
DNSSEC validation on queries by editing
named.conf and adding the following to
the options directive:dnssec-enable yes;
dnssec-validation yes;To verify that it is actually working use
dig to make a query for a signed
zone using the resolver just configured. A successful reply
will contain the AD flag to indicate the
data was authenticated. Running a query such as&prompt.user; dig @resolver +dnssec se ds should return the DS
RR for the .se zone.
In the flags: section the
AD flag should be set, as seen
in:...
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
...The resolver is now capable of authenticating
DNS queries.Authoritative DNS Server
ConfigurationIn order to get an authoritative name server to serve a
DNSSEC signed zone a little more work is
required. A zone is signed using cryptographic keys which
must be generated. It is possible to use only one key for
this. The preferred method however is to have a strong
well-protected Key Signing Key
(KSK) that is
not rotated very often and a Zone Signing Key
(ZSK) that is
rotated more frequently. Information on recommended
operational practices can be found in RFC
4641: DNSSEC Operational
Practices. Practices regarding the root zone can
be found in DNSSEC
Practice Statement for the Root Zone
KSK operator and DNSSEC
Practice Statement for the Root Zone
ZSK operator. The
KSK is used to
build a chain of authority to the data in need of validation
and as such is also called a Secure Entry Point
(SEP) key. A
message digest of this key, called a Delegation Signer
(DS) record,
must be published in the parent zone to establish the trust
chain. How this is accomplished depends on the parent zone
owner. The ZSK
is used to sign the zone, and only needs to be published
there.To enable DNSSEC for the example.com zone
depicted in previous examples, the first step is to use
dnssec-keygen to generate the
KSK and ZSK key pair.
This key pair can utilize different cryptographic
algorithms. It is recommended to use RSA/SHA256 for the
keys and 2048 bits key length should be enough. To generate
the KSK for example.com, run&prompt.user; dnssec-keygen -f KSK -a RSASHA256 -b 2048 -n ZONE example.comand to generate the ZSK, run&prompt.user; dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.comdnssec-keygen outputs two
files, the public and the private keys in files named
similar to Kexample.com.+005+nnnnn.key
(public) and
Kexample.com.+005+nnnnn.private
(private). The nnnnn part of the file
name is a five digit key ID. Keep track of which key ID
belongs to which key. This is especially important when
having more than one key in a zone. It is also possible to
rename the keys. For each KSK file
do:&prompt.user; mv Kexample.com.+005+nnnnn.key Kexample.com.+005+nnnnn.KSK.key
&prompt.user; mv Kexample.com.+005+nnnnn.private Kexample.com.+005+nnnnn.KSK.privateFor the ZSK files, substitute
KSK for ZSK as
necessary. The files can now be included in the zone file,
using the $include statement. It should
look something like this:$include Kexample.com.+005+nnnnn.KSK.key ; KSK
$include Kexample.com.+005+nnnnn.ZSK.key ; ZSKFinally, sign the zone and tell BIND
to use the signed zone file. To sign a zone
dnssec-signzone is used. The
command to sign the zone example.com, located in
example.com.db would look similar
to&prompt.user; dnssec-signzone -o
example.com -k Kexample.com.+005+nnnnn.KSK example.com.db
Kexample.com.+005+nnnnn.ZSK.keyThe key supplied to the argument is
the KSK and the other key file is the
ZSK that should be used in the signing.
It is possible to supply more than one
KSK and ZSK, which
will result in the zone being signed with all supplied keys.
This can be needed to supply zone data signed using more
than one algorithm. The output of
dnssec-signzone is a zone file
with all RRs signed. This output will
end up in a file with the extension
.signed, such as
example.com.db.signed. The
DS records will
also be written to a separate file
dsset-example.com. To use this signed
zone just modify the zone directive in
named.conf to use
example.com.db.signed. By default, the
signatures are only valid 30 days, meaning that the zone
needs to be resigned in about 15 days to be sure that
resolvers are not caching records with stale signatures. It
is possible to make a script and a cron job to do this. See
relevant manuals for details.Be sure to keep private keys confidential, as with all
cryptographic keys. When changing a key it is best to
include the new key into the zone, while still signing with
the old one, and then move over to using the new key to
sign. After these steps are done the old key can be removed
from the zone. Failure to do this might render the
DNS data unavailable for a time, until
the new key has propagated through the
DNS hierarchy. For more information on
key rollovers and other DNSSEC
operational issues, see RFC
4641: DNSSEC Operational
practices.Automation Using BIND 9.7 or
LaterBeginning with BIND version 9.7 a new
feature called Smart Signing was
introduced. This feature aims to make the key management
and signing process simpler by automating parts of the task.
By putting the keys into a directory called a
key repository, and using the new
option auto-dnssec, it is possible to
create a dynamic zone which will be resigned as needed. To
update this zone use nsupdate
with the new option .
rndc has also grown the ability
to sign zones with keys in the key repository, using the
option . To tell
BIND to use this automatic signing and
zone updating for example.com, add the
following to named.conf:zone example.com {
type master;
key-directory "/etc/named/keys";
update-policy local;
auto-dnssec maintain;
file "/etc/named/dynamic/example.com.zone";
};After making these changes, generate keys for the zone
as explained in , put those
keys in the key repository given as the argument to the
key-directory in the zone configuration
and the zone will be signed automatically. Updates to a
zone configured this way must be done using
nsupdate, which will take care of
re-signing the zone with the new data added. For further
details, see and the
BIND documentation.SecurityAlthough BIND is the most common implementation of
DNS, there is always the issue of security.
Possible and exploitable security holes are sometimes
found.While &os; automatically drops
named into a &man.chroot.8;
environment; there are several other security mechanisms in
place which could help to lure off possible
DNS service attacks.It is always good idea to read
CERT's security
advisories and to subscribe to the &a.security-notifications;
to stay up to date with the current Internet and &os; security
issues.If a problem arises, keeping sources up to date and
having a fresh build of named
may help.Further ReadingBIND/named manual pages:
&man.rndc.8; &man.named.8; &man.named.conf.5; &man.nsupdate.1;
&man.dnssec-signzone.8; &man.dnssec-keygen.8;Official
ISC BIND PageOfficial
ISC BIND ForumO'Reilly
DNS and BIND 5th
EditionRoot
DNSSECDNSSEC
Trust Anchor Publication for the Root
ZoneRFC1034
- Domain Names - Concepts and FacilitiesRFC1035
- Domain Names - Implementation and
SpecificationRFC4033
- DNS Security Introduction and
RequirementsRFC4034
- Resource Records for the DNS
Security ExtensionsRFC4035
- Protocol Modifications for the DNS
Security ExtensionsRFC4641
- DNSSEC Operational PracticesRFC 5011
- Automated Updates of DNS Security
(DNSSEC
Trust AnchorsApache HTTP ServerMurrayStokelyContributed by web serverssetting upApacheThe open source
Apache HTTP Server is the most widely
used web server. &os; does not install this web server by
default, but it can be installed from the
www/apache24 package or port.This section summarizes how to configure and start version
2.x of the Apache HTTP
Server on &os;. For more detailed information
about Apache 2.X and its
configuration directives, refer to httpd.apache.org.Configuring and Starting ApacheApacheconfiguration fileIn &os;, the main Apache HTTP
Server configuration file is installed as
/usr/local/etc/apache2x/httpd.conf,
where x represents the version
number. This ASCII text file begins
comment lines with a #. The most
frequently modified directives are:ServerRoot "/usr/local"Specifies the default directory hierarchy for the
Apache installation.
Binaries are stored in the bin and
sbin subdirectories of the server
root and configuration files are stored in the etc/apache2x
subdirectory.ServerAdmin you@example.comChange this to the email address to receive problems
with the server. This address also appears on some
server-generated pages, such as error documents.ServerName
www.example.com:80Allows an administrator to set a hostname which is
sent back to clients for the server. For example,
www can be used instead of the
actual hostname. If the system does not have a
registered DNS name, enter its
IP address instead. If the server
will listen on an alternate report, change
80 to the alternate port
number.DocumentRoot
"/usr/local/www/apache2x/data"The directory where documents will be served from.
By default, all requests are taken from this directory,
but symbolic links and aliases may be used to point to
other locations.It is always a good idea to make a backup copy of the
default Apache configuration file
before making changes. When the configuration of
Apache is complete, save the file
and verify the configuration using
apachectl. Running apachectl
configtest should return Syntax
OK.Apachestarting or stoppingTo launch Apache at system
startup, add the following line to
/etc/rc.conf:apache24_enable="YES"If Apache should be started
with non-default options, the following line may be added to
/etc/rc.conf to specify the needed
flags:apache24_flags=""If apachectl does not report
configuration errors, start httpd
now:&prompt.root; service apache24 startThe httpd service can be tested by
entering
http://localhost
in a web browser, replacing
localhost with the fully-qualified
domain name of the machine running httpd.
The default web page that is displayed is
/usr/local/www/apache24/data/index.html.The Apache configuration can be
tested for errors after making subsequent configuration
changes while httpd is running using the
following command:&prompt.root; service apache24 configtestIt is important to note that
configtest is not an &man.rc.8; standard,
and should not be expected to work for all startup
scripts.Virtual HostingVirtual hosting allows multiple websites to run on one
Apache server. The virtual hosts
can be IP-based or
name-based.
IP-based virtual hosting uses a different
IP address for each website. Name-based
virtual hosting uses the clients HTTP/1.1 headers to figure
out the hostname, which allows the websites to share the same
IP address.To setup Apache to use
name-based virtual hosting, add a
VirtualHost block for each website. For
example, for the webserver named www.domain.tld with a
virtual domain of www.someotherdomain.tld,
add the following entries to
httpd.conf:<VirtualHost *>
ServerName www.domain.tld
DocumentRoot /www/domain.tld
</VirtualHost>
<VirtualHost *>
ServerName www.someotherdomain.tld
DocumentRoot /www/someotherdomain.tld
</VirtualHost>For each virtual host, replace the values for
ServerName and
DocumentRoot with the values to be
used.For more information about setting up virtual hosts,
consult the official Apache
documentation at: http://httpd.apache.org/docs/vhosts/.Apache ModulesApachemodulesApache uses modules to augment
the functionality provided by the basic server. Refer to http://httpd.apache.org/docs/current/mod/
for a complete listing of and the configuration details for
the available modules.In &os;, some modules can be compiled with the
www/apache24 port. Type make
config within
/usr/ports/www/apache24 to see which
modules are available and which are enabled by default. If
the module is not compiled with the port, the &os; Ports
Collection provides an easy way to install many modules. This
section describes three of the most commonly used
modules.mod_sslweb serverssecureSSLcryptographyThe mod_ssl module uses the
OpenSSL library to provide strong
cryptography via the Secure Sockets Layer
(SSLv3) and Transport Layer Security
(TLSv1) protocols. This module provides
everything necessary to request a signed certificate from a
trusted certificate signing authority to run a secure web
server on &os;.In &os;, mod_ssl module is enabled
by default in both the package and the port. The available
configuration directives are explained at http://httpd.apache.org/docs/current/mod/mod_ssl.html.mod_perlmod_perlPerlThe
mod_perl module makes it possible to
write Apache modules in
Perl. In addition, the
persistent interpreter embedded in the server avoids the
overhead of starting an external interpreter and the penalty
of Perl start-up time.The mod_perl can be installed using
the www/mod_perl2 package or port.
Documentation for using this module can be found at http://perl.apache.org/docs/2.0/index.html.mod_phpTomRhodesWritten by mod_phpPHPPHP: Hypertext Preprocessor
(PHP) is a general-purpose scripting
language that is especially suited for web development.
Capable of being embedded into HTML, its
syntax draws upon C, &java;, and
Perl with the intention of
allowing web developers to write dynamically generated
webpages quickly.To gain support for PHP5 for the
Apache web server, install the
www/mod_php5 package or port. This will
install and configure the modules required to support
dynamic PHP applications. The
installation will automatically add this line to
/usr/local/etc/apache24/httpd.conf:LoadModule php5_module libexec/apache24/libphp5.soThen, perform a graceful restart to load the
PHP module:&prompt.root; apachectl gracefulThe PHP support provided by
www/mod_php5 is limited. Additional
support can be installed using the
lang/php5-extensions port which provides
a menu driven interface to the available
PHP extensions.Alternatively, individual extensions can be installed
using the appropriate port. For instance, to add
PHP support for the
MySQL database server, install
databases/php5-mysql.After installing an extension, the
Apache server must be reloaded to
pick up the new configuration changes:&prompt.root; apachectl gracefulDynamic Websitesweb serversdynamicIn addition to mod_perl and
mod_php, other languages are
available for creating dynamic web content. These include
Django and
Ruby on Rails.DjangoPythonDjangoDjango is a BSD-licensed
framework designed to allow developers to write high
performance, elegant web applications quickly. It provides
an object-relational mapper so that data types are developed
as Python objects. A rich
dynamic database-access API is provided
for those objects without the developer ever having to write
SQL. It also provides an extensible
template system so that the logic of the application is
separated from the HTML
presentation.Django depends on mod_python, and
an SQL database engine. In &os;, the
www/py-django port automatically installs
mod_python and supports the
PostgreSQL,
MySQL, or
SQLite databases, with the
default being SQLite. To change
the database engine, type make config
within /usr/ports/www/py-django, then
install the port.Once Django is installed, the
application will need a project directory along with the
Apache configuration in order to
use the embedded Python
interpreter. This interpreter is used to call the
application for specific URLs on the
site.To configure Apache to pass
requests for certain URLs to the web
application, add the following to
httpd.conf, specifying the full path to
the project directory:<Location "/">
SetHandler python-program
PythonPath "['/dir/to/the/django/packages/'] + sys.path"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonAutoReload On
PythonDebug On
</Location>Refer to https://docs.djangoproject.com/en/1.6/
for more information on how to use
Django.Ruby on RailsRuby on RailsRuby on Rails is another open
source web framework that provides a full development stack.
It is optimized to make web developers more productive and
capable of writing powerful applications quickly. On &os;,
it can be installed using the
www/rubygem-rails package or port.Refer to http://rubyonrails.org/documentation
for more information on how to use Ruby on
Rails.File Transfer Protocol (FTP)FTP
serversThe File Transfer Protocol (FTP) provides
users with a simple way to transfer files to and from an
FTP server. &os; includes
FTP server software,
ftpd, in the base system.&os; provides several configuration files for controlling
access to the FTP server. This section
summarizes these files. Refer to &man.ftpd.8; for more details
about the built-in FTP server.ConfigurationThe most important configuration step is deciding which
accounts will be allowed access to the FTP
server. A &os; system has a number of system accounts which
should not be allowed FTP access. The list
of users disallowed any FTP access can be
found in /etc/ftpusers. By default, it
includes system accounts. Additional users that should not be
allowed access to FTP can be added.In some cases it may be desirable to restrict the access
of some users without preventing them completely from using
FTP. This can be accomplished be creating
/etc/ftpchroot as described in
&man.ftpchroot.5;. This file lists users and groups subject
to FTP access restrictions.FTPanonymousTo enable anonymous FTP access to the
server, create a user named ftp on the &os; system. Users
will then be able to log on to the
FTP server with a username of
ftp or anonymous. When prompted for
the password, any input will be accepted, but by convention,
an email address should be used as the password. The
FTP server will call &man.chroot.2; when an
anonymous user logs in, to restrict access to only the home
directory of the ftp user.There are two text files that can be created to specify
welcome messages to be displayed to FTP
clients. The contents of
/etc/ftpwelcome will be displayed to
users before they reach the login prompt. After a successful
login, the contents of
/etc/ftpmotd will be displayed. Note
that the path to this file is relative to the login
environment, so the contents of
~ftp/etc/ftpmotd would be displayed for
anonymous users.Once the FTP server has been
configured, set the appropriate variable in
/etc/rc.conf to start the service during
boot:ftpd_enable="YES"To start the service now:&prompt.root; service ftpd startTest the connection to the FTP server
by typing:&prompt.user; ftp localhostsysloglog filesFTPThe ftpd daemon uses
&man.syslog.3; to log messages. By default, the system log
daemon will write messages related to FTP
in /var/log/xferlog. The location of
the FTP log can be modified by changing the
following line in
/etc/syslog.conf:ftp.info /var/log/xferlogFTPanonymousBe aware of the potential problems involved with running
an anonymous FTP server. In particular,
think twice about allowing anonymous users to upload files.
It may turn out that the FTP site becomes
a forum for the trade of unlicensed commercial software or
worse. If anonymous FTP uploads are
required, then verify the permissions so that these files
can not be read by other anonymous users until they have
been reviewed by an administrator.File and Print Services for µsoft.windows; Clients
(Samba)Samba serverMicrosoft Windowsfile serverWindows clientsprint serverWindows clientsSamba is a popular open source
software package that provides file and print services using the
SMB/CIFS protocol. This protocol is built
into µsoft.windows; systems. It can be added to
non-µsoft.windows; systems by installing the
Samba client libraries. The protocol
allows clients to access shared data and printers. These shares
can be mapped as a local disk drive and shared printers can be
used as if they were local printers.On &os;, the Samba client
libraries can be installed using the
net/samba-smbclient port or package. The
client provides the ability for a &os; system to access
SMB/CIFS shares in a µsoft.windows;
network.A &os; system can also be configured to act as a
Samba server. This allows the
administrator to create SMB/CIFS shares on
the &os; system which can be accessed by clients running
µsoft.windows; or the Samba
client libraries. In order to configure a
Samba server on &os;, the
net/samba36 port or package must first be
installed. The rest of this section provides an overview of how
to configure a Samba server on
&os;.ConfigurationA default Samba configuration
file is installed as
/usr/local/share/examples/samba36/smb.conf.default.
This file must be copied to
/usr/local/etc/smb.conf and customized
before Samba can be used.Runtime configuration information for
Samba is found in
smb.conf, such as definitions of the
printers and file system shares that will
be shared with &windows; clients. The
Samba package includes a web based
tool called swat which provides a
simple way for configuring
smb.conf.Using the Samba Web Administration Tool (SWAT)The Samba Web Administration Tool (SWAT) runs as a
daemon from inetd. Therefore,
inetd must be enabled as shown in
. To enable
swat, uncomment the following
line in /etc/inetd.conf:swat stream tcp nowait/400 root /usr/local/sbin/swat swatAs explained in ,
the inetd configuration must be
reloaded after this configuration file is changed.Once swat has been enabled,
use a web browser to connect to http://localhost:901.
At first login, enter the credentials for root.Once logged in, the main
Samba configuration page and the
system documentation will be available. Begin configuration
by clicking on the Globals tab. The
Globals section corresponds to the
variables that are set in the [global]
section of
/usr/local/etc/smb.conf.Global SettingsWhether swat is used or
/usr/local/etc/smb.conf is edited
directly, the first directives encountered when configuring
Samba are:workgroupThe domain name or workgroup name for the
computers that will be accessing this server.netbios nameThe NetBIOS name by which a
Samba server is known. By
default it is the same as the first component of the
host's DNS name.server stringThe string that will be displayed in the output of
net view and some other
networking tools that seek to display descriptive text
about the server.Security SettingsTwo of the most important settings in
/usr/local/etc/smb.conf are the
security model and the backend password format for client
users. The following directives control these
options:securityThe two most common options are
security = share and
security = user. If the clients
use usernames that are the same as their usernames on
the &os; machine, user level security should be
used. This is the default security policy and it
requires clients to first log on before they can
access shared resources.In share level security, clients do not need to
log onto the server with a valid username and password
before attempting to connect to a shared resource.
This was the default security model for older versions
of Samba.passdb backendNIS+LDAPSQL databaseSamba has several
different backend authentication models. Clients may
be authenticated with LDAP, NIS+, an SQL database,
or a modified password file. The default
authentication method is smbpasswd,
and that is all that will be covered here.Assuming that the default smbpasswd
backend is used,
/usr/local/etc/samba/smbpasswd
must be created to allow Samba to
authenticate clients. To provide &unix; user accounts
access from &windows; clients, use the following command to
add each required user to that file:&prompt.root; smbpasswd -a usernameThe recommended backend is now
tdbsam. If this backend is selected,
use the following command to add user accounts:&prompt.root; pdbedit -a -u usernameThis section has only mentioned the most commonly used
settings. Refer to the Official
Samba HOWTO for additional information about the
available configuration options.Starting SambaTo enable Samba at boot time,
add the following line to
/etc/rc.conf:samba_enable="YES"Alternately, its services can be started
separately:nmbd_enable="YES"smbd_enable="YES"To start Samba now:&prompt.root; service samba start
Starting SAMBA: removing stale tdbs :
Starting nmbd.
Starting smbd.Samba consists of three
separate daemons. Both the nmbd
and smbd daemons are started by
samba_enable. If winbind name resolution
services are enabled in smb.conf, the
winbindd daemon is started as
well.Samba may be stopped at any
time by typing:&prompt.root; service samba stopSamba is a complex software
suite with functionality that allows broad integration with
µsoft.windows; networks. For more information about
functionality beyond the basic configuration described here,
refer to http://www.samba.org.Clock Synchronization with NTPNTPntpdOver time, a computer's clock is prone to drift. This is
problematic as many network services require the computers on a
network to share the same accurate time. Accurate time is also
needed to ensure that file timestamps stay consistent. The
Network Time Protocol (NTP) is one way to
provide clock accuracy in a network.&os; includes &man.ntpd.8; which can be configured to query
other NTP servers in order to synchronize the
clock on that machine or to provide time services to other
computers in the network. The servers which are queried can be
local to the network or provided by an ISP.
In addition, an online
list of publicly accessible NTP
servers is available. When choosing a public
NTP server, select one that is geographically
close and review its usage policy.Choosing several NTP servers is
recommended in case one of the servers becomes unreachable or
its clock proves unreliable. As ntpd
receives responses, it favors reliable servers over the less
reliable ones.This section describes how to configure
ntpd on &os;. Further documentation
can be found in /usr/share/doc/ntp/ in HTML
format.NTP ConfigurationNTPntp.confOn &os;, the built-in ntpd can
be used to synchronize a system's clock. To enable
ntpd at boot time, add
ntpd_enable="YES" to
/etc/rc.conf. Additional variables can
be specified in /etc/rc.conf. Refer to
&man.rc.conf.5; and &man.ntpd.8; for
details.This application reads /etc/ntp.conf
to determine which NTP servers to query.
Here is a simple example of an
/etc/ntp.conf: Sample /etc/ntp.confserver ntplocal.example.com prefer
server timeserver.example.org
server ntp2a.example.net
driftfile /var/db/ntp.driftThe format of this file is described in &man.ntp.conf.5;.
The server option specifies which servers
to query, with one server listed on each line. If a server
entry includes prefer, that server is
preferred over other servers. A response from a preferred
server will be discarded if it differs significantly from
other servers' responses; otherwise it will be used. The
prefer argument should only be used for
NTP servers that are known to be highly
accurate, such as those with special time monitoring
hardware.The driftfile entry specifies which
file is used to store the system clock's frequency offset.
ntpd uses this to automatically
compensate for the clock's natural drift, allowing it to
maintain a reasonably correct setting even if it is cut off
from all external time sources for a period of time. This
file also stores information about previous responses
from NTP servers. Since this file contains
internal information for NTP, it should not
be modified.By default, an NTP server is accessible
to any network host. The restrict option
in /etc/ntp.conf can be used to control
which systems can access the server. For example, to deny all
machines from accessing the NTP server, add
the following line to
/etc/ntp.conf:restrict default ignoreThis will also prevent access from other
NTP servers. If there is a need to
synchronize with an external NTP server,
allow only that specific server. Refer to &man.ntp.conf.5;
for more information.To allow machines within the network to synchronize their
clocks with the server, but ensure they are not allowed to
configure the server or be used as peers to synchronize
against, instead use:restrict 192.168.1.0 mask 255.255.255.0 nomodify notrapwhere 192.168.1.0 is the local
network address and 255.255.255.0 is the network's
subnet mask.Multiple restrict entries are
supported. For more details, refer to the Access
Control Support subsection of
&man.ntp.conf.5;.Once ntpd_enable="YES" has been added
to /etc/rc.conf,
ntpd can be started now without
rebooting the system by typing:&prompt.root; service ntpd startUsing NTP with a
PPP Connectionntpd does not need a permanent
connection to the Internet to function properly. However, if
a PPP connection is configured to dial out
on demand, NTP traffic should be prevented
from triggering a dial out or keeping the connection alive.
This can be configured with filter
directives in /etc/ppp/ppp.conf. For
example: set filter dial 0 deny udp src eq 123
# Prevent NTP traffic from initiating dial out
set filter dial 1 permit 0 0
set filter alive 0 deny udp src eq 123
# Prevent incoming NTP traffic from keeping the connection open
set filter alive 1 deny udp dst eq 123
# Prevent outgoing NTP traffic from keeping the connection open
set filter alive 2 permit 0/0 0/0For more details, refer to the
PACKET FILTERING section in &man.ppp.8; and
the examples in
/usr/share/examples/ppp/.Some Internet access providers block low-numbered ports,
preventing NTP from functioning since replies never reach
the machine.iSCSI Initiator and Target
ConfigurationiSCSI is a way to share storage over a
network. Unlike NFS, which works at the file
system level, iSCSI works at the block device
level.In iSCSI terminology, the system that
shares the storage is known as the target.
The storage can be a physical disk, or an area representing
multiple disks or a portion of a physical disk. For example, if
the disk(s) are formatted with ZFS, a zvol
can be created to use as the iSCSI
storage.The clients which access the iSCSI
storage are called initiators. To
initiators, the storage available through
iSCSI appears as a raw, unformatted disk
known as a LUN. Device nodes for the disk
appear in /dev/ and the device must be
separately formatted and mounted.Beginning with 10.0-RELEASE, &os; provides a native,
kernel-based iSCSI target and initiator.
This section describes how to configure a &os; system as a
target or an initiator.Configuring an iSCSI TargetThe native iSCSI target is supported
starting with &os; 10.0-RELEASE. To use
iSCSI in older versions of &os;, install
a userspace target from the Ports Collection, such as
net/istgt. This chapter only describes
the native target.To configure an iSCSI target, create
the /etc/ctl.conf configuration file, add
a line to /etc/rc.conf to make sure the
&man.ctld.8; daemon is automatically started at boot, and then
start the daemon.The following is an example of a simple
/etc/ctl.conf configuration file. Refer
to &man.ctl.conf.5; for a more complete description of this
file's available options.portal-group pg0 {
discovery-auth-group no-authentication
listen 0.0.0.0
listen [::]
}
target iqn.2012-06.com.example:target0 {
auth-group no-authentication
portal-group pg0
lun 0 {
path /data/target0-0
size 4G
}
}The first entry defines the pg0 portal
group. Portal groups define which network addresses the
&man.ctld.8; daemon will listen on. The
discovery-auth-group no-authentication
entry indicates that any initiator is allowed to perform
iSCSI target discovery without
authentication. Lines three and four configure &man.ctld.8;
to listen on all IPv4
(listen 0.0.0.0) and
IPv6 (listen [::])
addresses on the default port of 3260.It is not necessary to define a portal group as there is a
built-in portal group called default. In
this case, the difference between default
and pg0 is that with
default, target discovery is always denied,
while with pg0, it is always
allowed.The second entry defines a single target. Target has two
possible meanings: a machine serving iSCSI
or a named group of LUNs. This example
uses the latter meaning, where
iqn.2012-06.com.example:target0 is the
target name. This target name is suitable for testing
purposes. For actual use, change
com.example to the real domain name,
reversed. The 2012-06 represents the year
and month of acquiring control of that domain name, and
target0 can be any value. Any number of
targets can be defined in this configuration file.The auth-group no-authentication line
allows all initiators to connect to the specified target and
portal-group pg0 makes the target reachable
through the pg0 portal group.The next section defines the LUN. To
the initiator, each LUN will be visible as
a separate disk device. Multiple LUNs can
be defined for each target. Each LUN is
identified by a number, where LUN 0 is
mandatory. The path /data/target0-0 line
defines the full path to a file or zvol backing the
LUN. That path must exist before starting
&man.ctld.8;. The second line is optional and specifies the
size of the LUN.Next, to make sure the &man.ctld.8; daemon is started at
boot, add this line to
/etc/rc.conf:ctld_enable="YES"To start &man.ctld.8; now, run this command:&prompt.root; service ctld startAs the &man.ctld.8; daemon is started, it reads
/etc/ctl.conf. If this file is edited
after the daemon starts, use this command so that the changes
take effect immediately:&prompt.root; service ctld reloadAuthenticationThe previous example is inherently insecure as it uses
no authentication, granting anyone full access to all
targets. To require a username and password to access
targets, modify the configuration as follows:auth-group ag0 {
chap username1 secretsecret
chap username2 anothersecret
}
portal-group pg0 {
discovery-auth-group no-authentication
listen 0.0.0.0
listen [::]
}
target iqn.2012-06.com.example:target0 {
auth-group ag0
portal-group pg0
lun 0 {
path /data/target0-0
size 4G
}
}The auth-group section defines
username and password pairs. An initiator trying to connect
to iqn.2012-06.com.example:target0 must
first specify a defined username and secret. However,
target discovery is still permitted without authentication.
To require target discovery authentication, set
discovery-auth-group to a defined
auth-group name instead of
no-authentication.It is common to define a single exported target for
every initiator. As a shorthand for the syntax above, the
username and password can be specified directly in the
target entry:target iqn.2012-06.com.example:target0 {
portal-group pg0
chap username1 secretsecret
lun 0 {
path /data/target0-0
size 4G
}
}Configuring an iSCSI InitiatorThe iSCSI initiator described in this
section is supported starting with &os; 10.0-RELEASE. To
use the iSCSI initiator available in
older versions, refer to &man.iscontrol.8;.The iSCSI initiator requires that the
&man.iscsid.8; daemon is running. This daemon does not use a
configuration file. To start it automatically at boot, add
this line to /etc/rc.conf:iscsid_enable="YES"To start &man.iscsid.8; now, run this command:&prompt.root; service iscsid startConnecting to a target can be done with or without an
/etc/iscsi.conf configuration file. This
section demonstrates both types of connections.Connecting to a Target Without a Configuration
FileTo connect an initiator to a single target, specify the
IP address of the portal and the name of
the target:&prompt.root; iscsictl -A -p 10.10.10.10 -t iqn.2012-06.com.example:target0To verify if the connection succeeded, run
iscsictl without any arguments. The
output should look similar to this:Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.10 Connected: da0In this example, the iSCSI session
was successfully established, with
/dev/da0 representing the attached
LUN. If the
iqn.2012-06.com.example:target0 target
exports more than one LUN, multiple
device nodes will be shown in that section of the
output:Connected: da0 da1 da2.Any errors will be reported in the output, as well as
the system logs. For example, this message usually means
that the &man.iscsid.8; daemon is not running:Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.10 Waiting for iscsid(8)The following message suggests a networking problem,
such as a wrong IP address or
port:Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.11 Connection refusedThis message means that the specified target name is
wrong:Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.10 Not foundThis message means that the target requires
authentication:Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.10 Authentication failedTo specify a CHAP username and
secret, use this syntax:&prompt.root; iscsictl -A -p 10.10.10.10 -t iqn.2012-06.com.example:target0 -u user -s secretsecretConnecting to a Target with a Configuration
FileTo connect using a configuration file, create
/etc/iscsi.conf with contents like
this:t0 {
TargetAddress = 10.10.10.10
TargetName = iqn.2012-06.com.example:target0
AuthMethod = CHAP
chapIName = user
chapSecret = secretsecret
}The t0 specifies a nickname for the
configuration file section. It will be used by the
initiator to specify which configuration to use. The other
lines specify the parameters to use during connection. The
TargetAddress and
TargetName are mandatory, whereas the
other options are optional. In this example, the
CHAP username and secret are
shown.To connect to the defined target, specify the
nickname:&prompt.root; iscsictl -An t0Alternately, to connect to all targets defined in the
configuration file, use:&prompt.root; iscsictl -AaTo make the initiator automatically connect to all
targets in /etc/iscsi.conf, add the
following to /etc/rc.conf:iscsictl_enable="YES"
iscsictl_flags="-Aa"
Index: head/en_US.ISO8859-1/books/handbook/ports/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/ports/chapter.xml (revision 46820)
+++ head/en_US.ISO8859-1/books/handbook/ports/chapter.xml (revision 46821)
@@ -1,1915 +1,1917 @@
Installing Applications: Packages and PortsSynopsisportspackages&os; is bundled with a rich collection of system tools as
part of the base system. In addition, &os; provides two
complementary technologies for installing third-party software:
the &os; Ports Collection, for installing from source, and
packages, for installing from pre-built binaries. Either
method may be used to install software from local media or
from the network.After reading this chapter, you will know:The difference between binary packages and ports.How to find third-party software that has been ported
to &os;.How to manage binary packages using
pkg.How to build third-party software from source using the
Ports Collection.How to find the files installed with the application
for post-installation configuration.What to do if a software installation fails.Overview of Software InstallationThe typical steps for installing third-party software on a
&unix; system include:Find and download the software, which might be
distributed in source code format or as a binary.Unpack the software from its distribution format. This
is typically a tarball compressed with &man.compress.1;,
&man.gzip.1;, or &man.bzip2.1;.Locate the documentation in
INSTALL, README
or some file in a doc/ subdirectory and
read up on how to install the software.If the software was distributed in source format,
compile it. This may involve editing a
Makefile or running a
configure script.Test and install the software.If the software package was not deliberately ported, or
tested to work, on &os;, the source code may need editing in
order for it to install and run properly. At the time of this
writing, over &os.numports; third-party applications have been
ported to &os;.A &os; package contains pre-compiled copies of all the
commands for an application, as well as any configuration files
and documentation. A package can be manipulated with the
pkg commands, such as
pkg install.A &os; port is a collection of files designed to automate
the process of compiling an application from source code. The
files that comprise a port contain all the necessary information
to automatically download, extract, patch, compile, and install
the application.The ports system can also be used to generate packages which
can be manipulated with the &os; package management
commands.Both packages and ports understand dependencies. If a
package or port is used to install an application and a
dependent library is not already installed, the library will
automatically be installed first.While the two technologies are similar, packages and
ports each have their own strengths. Select the technology that
meets your requirements for installing a particular
application.Package BenefitsA compressed package tarball is typically smaller than
the compressed tarball containing the source code for the
application.Packages do not require compilation time. For large
applications, such as Mozilla,
KDE, or
GNOME, this can be important
on a slow system.Packages do not require any understanding of the process
involved in compiling software on &os;.Port BenefitsPackages are normally compiled with conservative
options because they have to run on the maximum number of
systems. By compiling from the port, one can change the
compilation options.Some applications have compile-time options relating to
which features are installed. For example,
Apache can be configured with a
wide variety of different built-in options.In some cases, multiple packages will exist for the same
application to specify certain settings. For example,
Ghostscript is available as a
ghostscript package and a
ghostscript-nox11 package, depending on
whether or not Xorg is installed.
Creating multiple packages rapidly becomes impossible if an
application has more than one or two different compile-time
options.The licensing conditions of some software forbid binary
distribution. Such software must be distributed as source
code which must be compiled by the end-user.Some people do not trust binary distributions or prefer
to read through source code in order to look for potential
problems.Source code is needed in
order to apply custom patches.To keep track of updated ports, subscribe to the
&a.ports; and the &a.ports-bugs;.Before installing any application, check
for security issues related to the application or type
pkg audit -F to check all installed
applications for known vulnerabilities.The remainder of this chapter explains how to use packages
and ports to install and manage third-party software on
&os;.Finding Software&os;'s list of available applications is growing all the
time. There are a number of ways to find software to
install:The &os; web site maintains an up-to-date searchable
list of all the available applications, at http://www.FreeBSD.org/ports/.
The ports can be searched by application name or by
software category.FreshPortsDan Langille maintains FreshPorts.org
which provides a comprehensive search utility and also
tracks changes to the applications in the Ports Collection.
Registered users can create a customized watch list in order
to receive an automated email when their watched ports are
updated.SourceForgeIf finding a particular application becomes challenging,
try searching a site like SourceForge.net
or GitHub.com then
check back at the &os; site
to see if the application has been ported.pkgsearchTo search the binary package
repository for an application:&prompt.root; pkg search subversion
git-subversion-1.9.2
java-subversion-1.8.8_2
p5-subversion-1.8.8_2
py27-hgsubversion-1.6
py27-subversion-1.8.8_2
ruby-subversion-1.8.8_2
subversion-1.8.8_2
subversion-book-4515
subversion-static-1.8.8_2
subversion16-1.6.23_4
subversion17-1.7.16_2Package names include the version number and in case of
ports based on python, the version number of the version of
python the package was built with. Some ports also have
multiple versions available. In case of
subversion there are different
versions available, as well as different compile options.
In this case, the staticly linked version of
subversion. When indicating
which package to install, it is best to specify the
application by the port origin, which is the path in the
ports tree. Repeat the pkg search with
to list the origin of each
package:&prompt.root; pkg search -o subversion
devel/git-subversion
java/java-subversion
devel/p5-subversion
devel/py-hgsubversion
devel/py-subversion
devel/ruby-subversion
devel/subversion16
devel/subversion17
devel/subversion
devel/subversion-book
devel/subversion-staticSearching by shell globs, regular expressions, exact
match, by description, or any other field in the repository
database is also supported by pkg search.
After installing ports-mgmt/pkg or
ports-mgmt/pkg-devel, see
&man.pkg-search.8; for more details.If the Ports Collection is already installed, there are
several methods to query the local version of the ports
tree. To find out which category a port is in, type
whereis file,
where file is the program to be
installed:&prompt.root; whereis lsof
lsof: /usr/ports/sysutils/lsofAlternately, an &man.echo.1; statement can be
used:&prompt.root; echo /usr/ports/*/*lsof*
/usr/ports/sysutils/lsofNote that this will also return any matched files
downloaded into the
/usr/ports/distfiles directory.Another way to find software is by using the Ports
Collection's built-in search mechanism. To use the search
feature, cd to
/usr/ports then run make
search name=program-name where
program-name is the name of the
software. For example, to search for
lsof:&prompt.root; cd /usr/ports
&prompt.root; make search name=lsof
Port: lsof-4.88.d,8
Path: /usr/ports/sysutils/lsof
Info: Lists information about open files (similar to fstat(1))
Maint: ler@lerctr.org
Index: sysutils
B-deps:
R-deps: The built-in search mechanism uses a file
of index information. If a message indicates that the
INDEX is required, run
make fetchindex to download the current
index file. With the INDEX present,
make search will be able to perform the
requested search.The Path: line indicates where to find
the port.To receive less information, use the
quicksearch feature:&prompt.root; cd /usr/ports
&prompt.root; make quicksearch name=lsof
Port: lsof-4.88.d,8
Path: /usr/ports/sysutils/lsof
Info: Lists information about open files (similar to fstat(1))For more in-depth searching, use
make search
key=string or
make quicksearch
key=string, where
string is some text to search
for. The text can be in comments, descriptions, or
dependencies in order to find ports which relate to a
particular subject when the name of the program is
unknown.When using search or
quicksearch, the search string
is case-insensitive. Searching for LSOF will
yield the same results as searching for
lsof.Using pkg for Binary Package
Managementpkg is the next generation
replacement for the traditional &os; package management tools,
offering many features that make dealing with binary packages
faster and easier.pkg is not a replacement for
port management tools like
ports-mgmt/portmaster or
ports-mgmt/portupgrade. These tools can be
used to install third-party software from both binary packages
and the Ports Collection, while
pkg installs only binary
packages.Getting Started with
pkg&os; 8.4 and later includes a bootstrap utility
which can be used to download and install
pkg, along with its manual
pages.To bootstrap the system, run:&prompt.root; /usr/sbin/pkgFor earlier &os; versions,
pkg must instead be installed
from the Ports Collection or as a binary package.To install the port, run:&prompt.root; cd /usr/ports/ports-mgmt/pkg
&prompt.root; make
&prompt.root; make install cleanWhen upgrading an existing system that originally used the
older package system, the database must be converted to the
new format, so that the new tools are aware of the already
installed packages. Once pkg has
been installed, the
package database must be converted from the traditional format
to the new format by running this command:&prompt.root; pkg2ngThis step is not required for new installations that
do not yet have any third-party software
installed.This step is not reversible. Once the package database
has been converted to the pkg
format, the traditional pkg_* tools
should no longer be used.The package database conversion may emit errors as the
contents are converted to the new version. Generally, these
errors can be safely ignored. However, a list of
third-party software that was not successfully converted
will be listed after pkg2ng has finished
and these applications must be manually reinstalled.To ensure that the &os; Ports Collection registers
new software with pkg, and not
the traditional packages format, &os; versions earlier than
10.X require this line in
/etc/make.conf:WITH_PKGNG= yesBy default pkg uses the &os;
package mirrors. For information about building a custom
- package repository, see
+ package repository, see
- Additional pkg
- configuration options are described in &man.pkg.conf.5;.
+ Additional pkg configuration
+ options are described in &man.pkg.conf.5;.Usage information for pkg is
available in the &man.pkg.8; manpage or by running
pkg without additional arguments.Each pkg command argument is
documented in a command-specific manual page. To read the
manual page for pkg install, for example,
run either of these commands:&prompt.root; pkg help install&prompt.root; man pkg-installThe rest of this section demonstrates common binary
package management tasks which can be performed using
pkg. Each demonstrated command
provides many switches to customize its use. Refer to a
command's help or man page for details and more
examples.Obtaining Information About Installed PackagesInformation about the packages installed on a system
can be viewed by running pkg info which,
when run without any switches, will list the package version
for either all installed packages or the specified
package.For example, to see which version of
pkg is installed, run:&prompt.root; pkg info pkg
pkg-1.1.4_1Installing and Removing PackagesTo install a binary package use the following command,
where packagename is the name of
the package to install:&prompt.root; pkg install packagenameThis command uses repository data to determine which
version of the software to install and if it has any
uninstalled dependencies. For example, to install
curl:&prompt.root; pkg install curl
Updating repository catalogue
/usr/local/tmp/All/curl-7.31.0_1.txz 100% of 1181 kB 1380 kBps 00m01s
/usr/local/tmp/All/ca_root_nss-3.15.1_1.txz 100% of 288 kB 1700 kBps 00m00s
Updating repository catalogue
The following 2 packages will be installed:
Installing ca_root_nss: 3.15.1_1
Installing curl: 7.31.0_1
The installation will require 3 MB more space
0 B to be downloaded
Proceed with installing packages [y/N]: y
Checking integrity... done
[1/2] Installing ca_root_nss-3.15.5_1... done
[2/2] Installing curl-7.31.0_1... done
Cleaning up cache files...DoneThe new package and any additional packages that were
installed as dependencies can be seen in the installed
packages list:&prompt.root; pkg info
ca_root_nss-3.15.5_1 The root certificate bundle from the Mozilla Project
curl-7.31.0_1 Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers
pkg-1.1.4_6 New generation package managerPackages that are no longer needed can be removed with
pkg delete. For example:&prompt.root; pkg delete curl
The following packages will be deleted:
curl-7.31.0_1
The deletion will free 3 MB
Proceed with deleting packages [y/N]: y
[1/1] Deleting curl-7.31.0_1... doneUpgrading Installed PackagesInstalled packages can be upgraded to their latest
versions by running:&prompt.root; pkg upgrade
- This command will compare the installed versions with those
- available in the repository catalogue and upgrade them from the
- repository.
+ This command will compare the installed versions with
+ those available in the repository catalogue and upgrade them
+ from the repository.Auditing Installed PackagesOccasionally, software vulnerabilities may be discovered
in third-party applications. To address this,
pkg includes a built-in auditing
mechanism. To determine if there are any known
vulnerabilities for the software installed on the system,
run:&prompt.root; pkg audit -FAutomatically Removing Leaf DependenciesRemoving a package may leave behind dependencies which
are no longer required. Unneeded packages that were installed
as dependencies can be automatically detected and removed
using:&prompt.root; pkg autoremove
Packages to be autoremoved:
ca_root_nss-3.13.5
The autoremoval will free 723 kB
Proceed with autoremoval of packages [y/N]: y
Deinstalling ca_root_nss-3.15.1_1... doneRestoring the Package DatabaseUnlike the traditional package management system,
pkg includes its own package
database backup mechanism. This functionality is enabled by
default.To disable the periodic script from backing up the
package database, set
daily_backup_pkgdb_enable="NO" in
&man.periodic.conf.5;.To restore the contents of a previous package database
backup, run the following command replacing
- /path/to/pkg.sql with the location of
- the backup:
+ /path/to/pkg.sql with the location
+ of the backup:
&prompt.root; pkg backup -r /path/to/pkg.sqlIf restoring a backup taken by the periodic script,
it must be decompressed prior to being restored.To run a manual backup of the
pkg database, run the following
command, replacing /path/to/pkg.sql
with a suitable file name and location:&prompt.root; pkg backup -d /path/to/pkg.sqlRemoving Stale PackagesBy default, pkg stores
binary packages in a cache directory defined by
PKG_CACHEDIR in &man.pkg.conf.5;. Only copies
of the latest installed packages are kept. Older versions of
pkg kept all previous packages. To
remove these outdated binary packages, run:&prompt.root; pkg cleanThe entire cache may be cleared by running:&prompt.root; pkg clean -aModifying Package MetadataSoftware within the &os; Ports Collection can
undergo major version number changes. To address this,
pkg has a built-in command to
update package origins. This can be useful, for example, if
lang/php5 is renamed to
lang/php53 so that
lang/php5 can now
represent version 5.4.To change the package origin for the above example,
run:&prompt.root; pkg set -o lang/php5:lang/php53As another example, to update
lang/ruby18 to
lang/ruby19, run:&prompt.root; pkg set -o lang/ruby18:lang/ruby19As a final example, to change the origin of the
libglut shared libraries from
graphics/libglut to
graphics/freeglut, run:&prompt.root; pkg set -o graphics/libglut:graphics/freeglutWhen changing package origins, it is important to
reinstall packages that are dependent on the package with
the modified origin. To force a reinstallation of dependent
packages, run:&prompt.root; pkg install -Rf graphics/freeglutUsing the Ports CollectionThe Ports Collection is a set of
Makefiles, patches, and description files
stored in /usr/ports. This set of files is
used to compile and install applications on &os;. Before an
application can be compiled using a port, the Ports Collection
must first be installed. If it was not installed during the
installation of &os;, use one of the following methods to
install it:Portsnap MethodThe base system of &os; includes
Portsnap. This is a fast and
user-friendly tool for retrieving the Ports Collection and
is the recommended choice for most users. This utility
connects to a &os; site, verifies the secure key, and
downloads a new copy of the Ports Collection. The key is used
to verify the integrity of all downloaded files.To download a compressed snapshot of the Ports
Collection into
/var/db/portsnap:&prompt.root; portsnap fetchWhen running Portsnap for the
first time, extract the snapshot into
/usr/ports:&prompt.root; portsnap extractAfter the first use of
Portsnap has been completed as
shown above, /usr/ports can be updated
as needed by running:&prompt.root; portsnap fetch
&prompt.root; portsnap updateWhen using fetch, the
extract or the update
operation may be run consecutively, like so:&prompt.root; portsnap fetch updateSubversion MethodIf more control over the ports tree is needed or if local
changes need to be maintained,
Subversion can be used to obtain
the Ports Collection. Refer to the
Subversion Primer for a detailed description of
Subversion.Subversion must be installed
before it can be used to check out the ports tree. If a
copy of the ports tree is already present, install
Subversion like this:&prompt.root; cd /usr/ports/devel/subversion
&prompt.root; make install cleanIf the ports tree is not available, or
pkg is being used to manage
packages, Subversion can be
installed as a package:&prompt.root; pkg install subversionCheck out a copy of the ports tree. For better
performance, replace
svn0.us-east.FreeBSD.org with a
Subversion
mirror close to your geographic location:&prompt.root; svn checkout https://svn0.us-east.FreeBSD.org/ports/head /usr/portsAs needed, update /usr/ports after
the initial Subversion
checkout:&prompt.root; svn update /usr/portsThe Ports Collection installs a series of directories
representing software categories with each category having
a subdirectory for each application. Each subdirectory, also
referred to as a ports skeleton, contains a set of files that
tell &os; how to compile and install that program. Each port
skeleton includes these files and directories:Makefile: contains statements that
specify how the application should be compiled and where
its components should be installed.distinfo: contains the names and
checksums of the files that must be downloaded to build the
port.files/: this directory contains
any patches needed for the program to compile and install
on &os;. This directory may also contain other files used
to build the port.pkg-descr: provides a more detailed
description of the program.pkg-plist: a list of all the
files that will be installed by the port. It also tells
the ports system which files to remove upon
deinstallation.Some ports include pkg-message or
other files to handle special situations. For more details
on these files, and on ports in general, refer to the &os;
Porter's Handbook.The port does not include the actual source code, also
known as a distfile. The extract portion
of building a port will automatically save the downloaded
source to /usr/ports/distfiles.Installing PortsportsinstallingThis section provides basic instructions on using the
Ports Collection to install or remove software. The detailed
description of available make targets and
environment variables is available in &man.ports.7;.Before compiling any port, be sure to update the Ports
Collection as described in the previous section. Since
the installation of any third-party software can introduce
security vulnerabilities, it is recommended to first check
for known security issues related to the port. Alternately,
run pkg audit -F before installing a new
port. This command can be configured to automatically
perform a security audit and an update of the vulnerability
database during the daily security system check. For more
information, refer to &man.pkg-audit.8; and
&man.periodic.8;.Using the Ports Collection assumes a working Internet
connection. It also requires superuser privilege.Some third-party DVD products such as the &os; Toolkit
from freebsdmall.com
contain distfiles which can be used to install ports without
an Internet connection. Mount the DVD on
/cdrom. If you use a different mount
point, set the CD_MOUNTPTS make variable.
The needed distfiles will be automatically used if they are
present on the disk. However, the licenses of a few ports do
not allow their inclusion on the DVD. This could be because a
registration form needs to be filled out before downloading or
redistribution is not allowed. In order to install a port not
included on the DVD, a connection to the Internet will still
be required.To compile and install the port, change to the directory
of the port to be installed, then type make
install at the prompt. Messages will indicate
the progress:&prompt.root; cd /usr/ports/sysutils/lsof
&prompt.root; make install
>> lsof_4.88D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/.
===> Extracting for lsof-4.88
...
[extraction output snipped]
...
>> Checksum OK for lsof_4.88D.freebsd.tar.gz.
===> Patching for lsof-4.88.d,8
===> Applying FreeBSD patches for lsof-4.88.d,8
===> Configuring for lsof-4.88.d,8
...
[configure output snipped]
...
===> Building for lsof-4.88.d,8
...
[compilation output snipped]
...
===> Installing for lsof-4.88.d,8
...
[installation output snipped]
...
===> Generating temporary packing list
===> Compressing manual pages for lsof-4.88.d,8
===> Registering installation for lsof-4.88.d,8
===> SECURITY NOTE:
This port has installed the following binaries which execute with
increased privileges.
/usr/local/sbin/lsof
&prompt.root;Since lsof is a program that runs
with increased privileges, a security warning is displayed
as it is installed. Once the installation is complete, the
prompt will be returned.Some shells keep a cache of the commands that are
available in the directories listed in the
PATH environment variable, to speed up lookup
operations for the executable file of these commands. Users
of the tcsh shell should type
rehash so that a newly installed command
can be used without specifying its full path. Use
hash -r instead for the
sh shell. Refer to the documentation
for the shell for more information.During installation, a working subdirectory is created
which contains all the temporary files used during
compilation. Removing this directory saves disk space and
minimizes the chance of problems later when upgrading to the
newer version of the port:&prompt.root; make clean
===> Cleaning for lsof-88.d,8
&prompt.root;To save this extra step, instead use make
install clean when compiling the port.Customizing Ports InstallationSome ports provide build options which can be used to
enable or disable application components, provide security
options, or allow for other customizations. Examples
include www/firefox,
security/gpgme, and
mail/sylpheed-claws.
If the port depends upon other ports which have configurable
options, it may pause several times for user interaction
as the default behavior is to prompt the user to select
options from a menu. To avoid this, run make
config-recursive within the port skeleton to do
this configuration in one batch. Then, run make
install [clean] to compile and install the
port.When using
config-recursive, the list of
ports to configure are gathered by the
all-depends-list target. It is
recommended to run make
config-recursive until all dependent ports
options have been defined, and ports options screens no
longer appear, to be certain that all dependency options
have been configured.There are several ways to revisit a port's build options
menu in order to add, remove, or change these options after
a port has been built. One method is to
cd into the directory containing the
port and type make config. Another
option is to use make showconfig.
Another option is to execute make
rmconfig which will remove all selected options
and allow you to start over. All of these options, and
others, are explained in great detail in
&man.ports.7;.The ports system uses &man.fetch.1; to download the
source files, which supports various environment variables.
The FTP_PASSIVE_MODE,
FTP_PROXY, and FTP_PASSWORD
variables may need to be set if the &os; system is behind
a firewall or FTP/HTTP proxy. See &man.fetch.3; for the
complete list of supported variables.For users who cannot be connected to the Internet all
the time, make fetch can be run within
/usr/ports, to fetch all distfiles, or
within a category, such as
/usr/ports/net, or within the specific
port skeleton. Note that if a port has any dependencies,
running this command in a category or ports skeleton will
not fetch the distfiles of ports from
another category. Instead, use make
fetch-recursive to also fetch the distfiles for
all the dependencies of a port.In rare cases, such as when an organization has a local
distfiles repository, the MASTER_SITES
variable can be used to override the download locations
specified in the Makefile. When using,
specify the alternate location:&prompt.root; cd /usr/ports/directory
&prompt.root; make MASTER_SITE_OVERRIDE= \
ftp://ftp.organization.org/pub/FreeBSD/ports/distfiles/ fetchThe WRKDIRPREFIX and
PREFIX variables can override the default
working and target directories. For example:&prompt.root; make WRKDIRPREFIX=/usr/home/example/ports installwill compile the port in
/usr/home/example/ports and install
everything under /usr/local.&prompt.root; make PREFIX=/usr/home/example/local installwill compile the port in /usr/ports
and install it in
/usr/home/example/local. And:&prompt.root; make WRKDIRPREFIX=../ports PREFIX=../local installwill combine the two.These can also be set as environmental variables. Refer
to the manual page for your shell for instructions on how to
set an environmental variable.Removing Installed PortsportsremovingInstalled ports can be uninstalled using pkg
delete. Examples for using this command can be
found in the &man.pkg-delete.8; manpage.Alternately, make deinstall can be
run in the port's directory:&prompt.root; cd /usr/ports/sysutils/lsofmake deinstall
===> Deinstalling for sysutils/lsof
===> Deinstalling
Deinstallation has been requested for the following 1 packages:
lsof-4.88.d,8
The deinstallation will free 229 kB
[1/1] Deleting lsof-4.88.d,8... doneIt is recommended to read the messages as the port is
uninstalled. If the port has any applications that depend
upon it, this information will be displayed but the
uninstallation will proceed. In such cases, it may be better
to reinstall the application in order to prevent broken
dependencies.Upgrading PortsportsupgradingOver time, newer versions of software become available
in the Ports Collection. This section describes how to
determine which software can be upgraded and how to perform
the upgrade.To determine if newer versions of installed ports are
available, ensure that the latest version of the ports tree is
installed, using the updating command described in either
or
. On &os; 10
and later, or if the system has been converted to
pkg, the following command will
list the installed ports which are out of date:&prompt.root; pkg version -l "<"For &os; 9.X and lower, the
following command will list the installed ports that are out
of date:&prompt.root; pkg_version -l "<"Before
attempting an upgrade, read
/usr/ports/UPDATING from the top of
the file to the date closest to the last time ports were
upgraded or the system was installed. This file describes
various issues and additional steps users may encounter and
need to perform when updating a port, including such things
as file format changes, changes in locations of
configuration files, or any incompatibilities with previous
versions. Make note of any instructions which match any of
the ports that need upgrading and follow these instructions
when performing the upgrade.To perform the actual upgrade, use either
Portmaster or
Portupgrade.Upgrading Ports Using
PortmasterportmasterThe ports-mgmt/portmaster package or
port is the recommended tool for upgrading installed ports
as it is designed to use the tools installed with &os;
without depending upon other ports. It uses the
information in /var/db/pkg/ to
determine which ports to upgrade. To install this utility
as a port:&prompt.root; cd /usr/ports/ports-mgmt/portmaster
&prompt.root; make install cleanPortmaster defines four
categories of ports:Root port: has no dependencies and is not a
dependency of any other ports.Trunk port: has no dependencies, but other ports
depend upon it.Branch port: has dependencies and other ports
depend upon it.Leaf port: has dependencies but no other ports
depend upon it.To list these categories and search for updates:&prompt.root; portmaster -L
===>>> Root ports (No dependencies, not depended on)
===>>> ispell-3.2.06_18
===>>> screen-4.0.3
===>>> New version available: screen-4.0.3_1
===>>> tcpflow-0.21_1
===>>> 7 root ports
...
===>>> Branch ports (Have dependencies, are depended on)
===>>> apache22-2.2.3
===>>> New version available: apache22-2.2.8
...
===>>> Leaf ports (Have dependencies, not depended on)
===>>> automake-1.9.6_2
===>>> bash-3.1.17
===>>> New version available: bash-3.2.33
...
===>>> 32 leaf ports
===>>> 137 total installed ports
===>>> 83 have new versions availableThis command is used to upgrade all outdated
ports:&prompt.root; portmaster -aBy default, Portmaster will
make a backup package before deleting the existing port.
If the installation of the new version is successful,
Portmaster will delete the
backup. Using will instruct
Portmaster not to automatically
delete the backup. Adding will start
Portmaster in interactive mode,
prompting for confirmation before upgrading each port.
Many other options are available. Read through the
manual page for portmaster(8) for details regarding
their usage.If errors are encountered during the upgrade process,
add to upgrade and rebuild all
ports:&prompt.root; portmaster -afPortmaster can also be used
to install new ports on the system, upgrading all
dependencies before building and installing the new
port. To use this function, specify the location of the
port in the Ports Collection:&prompt.root; portmaster shells/bashUpgrading Ports Using PortupgradeportupgradeAnother utility that can be used to upgrade ports is
Portupgrade, which is available
as the ports-mgmt/portupgrade package
or port. This utility installs a suite of applications
which can be used to manage ports. However, it is dependent
upon Ruby. To install the port:&prompt.root; cd /usr/ports/ports-mgmt/portupgrade
&prompt.root; make install cleanBefore performing an upgrade using this utility, it is
recommended to scan the list of installed ports using
pkgdb -F and to fix all the
inconsistencies it reports.To upgrade all the outdated ports installed on the
system, use portupgrade -a. Alternately,
include to be asked for confirmation
of every individual upgrade:&prompt.root; portupgrade -aiTo upgrade only a specified application instead of all
available ports, use portupgrade
pkgname. It is very
important to include to first upgrade
all the ports required by the given application:&prompt.root; portupgrade -R firefoxIf
is included,
Portupgrade searches for
available packages in the local directories listed in
PKG_PATH. If none are available locally, it
then fetches packages from a remote site. If packages can
not be found locally or fetched remotely,
Portupgrade will use ports. To
avoid using ports entirely, specify .
This last set of options tells
Portupgrade to abort if no
packages are available:&prompt.root; portupgrade -PP gnome2To just fetch the port distfiles, or packages, if
is specified, without building or
installing anything, use . For further
information on all of the available switches, refer to the
manual page for portupgrade.Ports and Disk Spaceportsdisk-spaceUsing the Ports Collection will use up disk space over
time. After building and installing a port, running
make clean within the ports skeleton will
clean up the temporary work directory.
If Portmaster is used to install a
port, it will automatically remove this directory unless
is specified. If
Portupgrade is installed, this
command will remove all work directories
found within the local copy of the Ports Collection:&prompt.root; portsclean -CIn addition, a lot of out-dated source distribution files
will collect in /usr/ports/distfiles over
time. If Portupgrade is installed,
this command will delete all the distfiles that are no longer
referenced by any ports:&prompt.root; portsclean -DTo use Portupgrade to remove
all distfiles not referenced by any port currently installed
on the system:&prompt.root; portsclean -DDIf Portmaster is installed,
use:&prompt.root; portmaster --clean-distfilesBy default, this command is interactive and will prompt
the user to confirm if a distfile should be deleted.In addition to these commands, the
ports-mgmt/pkg_cutleaves package or port
automates the task of removing installed ports that are no
longer needed.Building Packages with
PoudrierePoudriere is a
BSD-licensed utility for creating and testing
&os; packages. It uses &os; jails to set up isolated
compilation environments. These jails can be used to build
packages for versions of &os; that are different from the system
on which it is installed, and also to build packages for i386 if
the host is an &arch.amd64; system. Once the packages are
built, they are in a layout identical to the official mirrors.
These packages are usable by &man.pkg.8; and other package
management tools.Poudriere is installed using
the ports-mgmt/poudriere package
or port. The installation includes a sample configuration
file /usr/local/etc/poudriere.conf.sample.
Copy this file to
/usr/local/etc/poudriere.conf. Edit the
copied file to suit the local configuration.While ZFS is not required on the system
running poudriere, it is beneficial.
When ZFS is used,
ZPOOL must be specified in
/usr/local/etc/poudriere.conf and
FREEBSD_HOST should be set to a nearby
mirror. Defining CCACHE_DIR enables the use
of devel/ccache to cache
compilation and reduce build times for frequently-compiled code.
It may be convenient to put
poudriere datasets in an isolated
tree mounted at /poudriere. Defaults for the
other configuration values are adequate.The number of processor cores detected is used to define how
many builds should run in parallel. Supply enough virtual
memory, either with RAM or swap space. If
virtual memory runs out, compiling jails will stop and be torn
down, resulting in weird error messages.Initialize Jails and Port TreesAfter configuration, initialize
poudriere so that it installs a
jail with the required &os; tree and a ports tree. Specify a
name for the jail using and the &os;
version with . On systems running
&os;/&arch.amd64;, the architecture can be set with
to either i386 or
amd64. The default is the
architecture shown by uname.&prompt.root; poudriere jail -c -j 10amd64 -v 10.0-RELEASE
====>> Creating 10amd64 fs... done
====>> Fetching base.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/base.txz 100% of 59 MB 1470 kBps 00m42s
====>> Extracting base.txz... done
====>> Fetching src.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/src.txz 100% of 107 MB 1476 kBps 01m14s
====>> Extracting src.txz... done
====>> Fetching games.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/games.txz 100% of 865 kB 734 kBps 00m01s
====>> Extracting games.txz... done
====>> Fetching lib32.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/lib32.txz 100% of 14 MB 1316 kBps 00m12s
====>> Extracting lib32.txz... done
====>> Cleaning up... done
====>> Jail 10amd64 10.0-RELEASE amd64 is ready to be used&prompt.root; poudriere ports -c -p local
====>> Creating local fs... done
====>> Extracting portstree "local"...
Looking up portsnap.FreeBSD.org mirrors... 7 mirrors found.
Fetching public key from ec2-eu-west-1.portsnap.freebsd.org... done.
Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Fetching snapshot generated at Tue Feb 11 01:07:15 CET 2014:
94a3431f0ce567f6452ffde4fd3d7d3c6e1da143efec76100% of 69 MB 1246 kBps 00m57s
Extracting snapshot... done.
Verifying snapshot integrity... done.
Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Updating from Tue Feb 11 01:07:15 CET 2014 to Tue Feb 11 16:05:20 CET 2014.
Fetching 4 metadata patches... done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 48 patches.
(48/48) 100.00% done.
done.
Applying patches...
done.
Fetching 1 new ports or files... done.
/poudriere/ports/tester/CHANGES
/poudriere/ports/tester/COPYRIGHT
[...]
Building new INDEX files... done.On a single computer, poudriere
can build ports with multiple configurations, in multiple
jails, and from different port trees. Custom configurations
for these combinations are called sets.
See the CUSTOMIZATION section of &man.poudriere.8; for details
after ports-mgmt/poudriere or
ports-mgmt/poudriere-devel is
installed.The basic configuration shown here puts a single jail-,
port-, and set-specific make.conf in
/usr/local/etc/poudriere.d.
The filename in this example is created by combining the jail
name, port name, and set name:
10amd64-local-workstation-make.conf.
The system make.conf and this new file
are combined at build time to create the
make.conf used by the build jail.Packages to be built are entered in
10amd64-local-workstation-pkglist:editors/emacs
devel/git
ports-mgmt/pkg
...Options and dependencies for the specified ports are
configured:&prompt.root; poudriere options -j 10amd64 -p local -z workstation -f 10amd64-local-workstation-pkglistFinally, packages are built and a package
repository is created:&prompt.root; poudriere bulk -j 10amd64 -p local -z workstation -f 10amd64-local-workstation-pkglistCtrlt
displays the current state of the build.
Poudriere also builds files in
/poudriere/logs/bulk/jailname
that can be used with a web server to display build
information.Packages are now available for
installation from the poudriere
repository.For more information on using
poudriere, see &man.poudriere.8;
and the main web site, .
- Configuring pkg clients to use a Poudriere repository
+ Configuring pkg clients to use a Poudriere
+ repositoryWhile it is possible to use both a custom repository along
side of the official repository, sometimes it is useful to
disable the official repository. This is done by creating a
configuration file that overrides and disables the official
configuration file. Create
/usr/local/etc/pkg/repos/FreeBSD.conf
that contains the following:FreeBSD: {
enabled: no
}
- Usually it is easiest to serve a poudriere repository to the
- client machines via HTTP. Setup a webserver to serve up the
- package directory, usually something like:
+ Usually it is easiest to serve a poudriere repository to
+ the client machines via HTTP. Setup a webserver to serve up
+ the package directory, usually something like:
/usr/local/poudriere/data/packages/10amd64.
- Where 10amd64 is the name of the build.
-
+ Where 10amd64 is the name of the
+ build.If the URL to the package repository is:
http://pkg.example.com/10amd64, then the
repository configuration file in
- /usr/local/etc/pkg/repos/custom.conf would
- look like:
+ /usr/local/etc/pkg/repos/custom.conf
+ would look like:
custom: {
url: "http://pkg.example.com/10amd64",
mirror_type: "http",
enabled: yes,
}Post-Installation ConsiderationsRegardless of whether the software was installed from a
binary package or port, most third-party applications require
some level of configuration after installation. The following
commands and locations can be used to help determine what was
installed with the application.Most applications install at least one default
configuration file in /usr/local/etc.
In the case where an application has a large number of
configuration files, a subdirectory will be created to hold
them. Often, sample configuration files are installed which
end with a suffix such as .sample. The
configuration files should be reviewed and possibly
edited to meet the system's needs. To edit a sample file,
first copy it without the .sample
extension.Applications which provide documentation will install
it into /usr/local/share/doc and many
applications also install manual pages. This documentation
should be consulted before continuing.Some applications run services which must be added
to /etc/rc.conf before starting the
application. These applications usually install a startup
script in /usr/local/etc/rc.d. See
Starting
Services for more information.Users of &man.csh.1; should run
rehash to rebuild the known binary list
in the shells PATH.Use pkg info to determine which
files, man pages, and binaries were installed with the
application.Dealing with Broken PortsWhen a port does not build or
install, try the following:Search to see if there is a fix pending for the port in
the Problem
Report database. If so, implementing the proposed
fix may fix the issue.Ask the maintainer of the port for help. Type
make maintainer
in the ports skeleton or read the port's
Makefile to find the maintainer's
email address. Remember to include the
$FreeBSD: line from the port's
Makefile and the output leading up to
the error in the email to the maintainer.Some ports are not maintained by an individual but
instead by a mailing
list. Many, but not all, of these addresses look
like freebsd-listname@FreeBSD.org.
Take this into account when sending an email.In particular, ports shown as maintained by
ports@FreeBSD.org are not
maintained by a specific individual. Instead, any fixes
and support come from the general community who subscribe
to that mailing list. More volunteers are always
needed!If there is no response to the email, use
Bugzilla to submit a bug report using the
instructions in Writing
&os; Problem Reports.Fix it! The Porter's
Handbook includes detailed information on the
ports infrastructure so that you can fix the occasional
broken port or even submit your own!Install the package instead of the port using the
instructions in .
Index: head/en_US.ISO8859-1/books/handbook/security/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/security/chapter.xml (revision 46820)
+++ head/en_US.ISO8859-1/books/handbook/security/chapter.xml (revision 46821)
@@ -1,3916 +1,3916 @@
SecurityTomRhodesRewritten by securitySynopsisSecurity, whether physical or virtual, is a topic so broad
that an entire industry has grown up around it. Hundreds of
standard practices have been authored about how to secure
systems and networks, and as a user of &os;, understanding how
to protect against attacks and intruders is a must.In this chapter, several fundamentals and techniques will be
discussed. The &os; system comes with multiple layers of
security, and many more third party utilities may be added to
enhance security.After reading this chapter, you will know:Basic &os; system security concepts.The various crypt mechanisms available in &os;.How to set up one-time password authentication.How to configure TCP Wrapper
for use with &man.inetd.8;.How to set up Kerberos on
&os;.How to configure IPsec and create a
VPN.How to configure and use
OpenSSH on &os;.How to use file system ACLs.How to use pkg to audit
third party software packages installed from the Ports
Collection.How to utilize &os; security advisories.What Process Accounting is and how to enable it on
&os;.How to control user resources using login classes or the
resource limits database.Before reading this chapter, you should:Understand basic &os; and Internet concepts.Additional security topics are covered elsewhere in this
Handbook. For example, Mandatory Access Control is discussed in
and Internet firewalls are discussed in
.IntroductionSecurity is everyone's responsibility. A weak entry point
in any system could allow intruders to gain access to critical
information and cause havoc on an entire network. One of the
core principles of information security is the
CIA triad, which stands for the
Confidentiality, Integrity, and Availability of information
systems.The CIA triad is a bedrock concept of
computer security as customers and users expect their data to be
protected. For example, a customer expects that their credit
card information is securely stored (confidentiality), that
their orders are not changed behind the scenes (integrity), and
that they have access to their order information at all times
(availablility).To provide CIA, security professionals
apply a defense in depth strategy. The idea of defense in depth
is to add several layers of security to prevent one single layer
failing and the entire security system collapsing. For example,
a system administrator cannot simply turn on a firewall and
consider the network or system secure. One must also audit
accounts, check the integrity of binaries, and ensure malicious
tools are not installed. To implement an effective security
strategy, one must understand threats and how to defend against
them.What is a threat as it pertains to computer security?
Threats are not limited to remote attackers who attempt to
access a system without permission from a remote location.
Threats also include employees, malicious software, unauthorized
network devices, natural disasters, security vulnerabilities,
and even competing corporations.Systems and networks can be accessed without permission,
sometimes by accident, or by remote attackers, and in some
cases, via corporate espionage or former employees. As a user,
it is important to prepare for and admit when a mistake has lead
to a security breach and report possible issues to the security
team. As an administrator, it is important to know of the
threats and be prepared to mitigate them.When applying security to systems, it is recommended to
start by securing the basic accounts and system configuration,
and then to secure the network layer so that it adheres to the
system policy and the organization's security procedures. Many
organizations already have a security policy that covers the
configuration of technology devices. The policy should include
the security configuration of workstations, desktops, mobile
devices, phones, production servers, and development servers.
In many cases, standard operating procedures
(SOPs) already exist. When in doubt, ask the
security team.The rest of this introduction describes how some of these
basic security configurations are performed on a &os; system.
The rest of this chapter describes some specific tools which can
be used when implementing a security policy on a &os;
system.Preventing LoginsIn securing a system, a good starting point is an audit of
accounts. Ensure that root has a strong password and
that this password is not shared. Disable any accounts that
do not need login access.To deny login access to accounts, two methods exist. The
first is to lock the account. This example locks the
toor account:&prompt.root; pw lock toorThe second method is to prevent login access by changing
the shell to /sbin/nologin. Only the
superuser can change the shell for other users:&prompt.root; chsh -s /usr/sbin/nologin toorThe /usr/sbin/nologin shell prevents
the system from assigning a shell to the user when they
attempt to login.Permitted Account EscalationIn some cases, system administration needs to be shared
with other users. &os; has two methods to handle this. The
first one, which is not recommended, is a shared root password
used by members of the wheel group. With this
method, a user types su and enters the
password for wheel
whenever superuser access is needed. The user should then
type exit to leave privileged access after
finishing the commands that required administrative access.
To add a user to this group, edit
/etc/group and add the user to the end of
the wheel entry. The user must be
separated by a comma character with no space.The second, and recommended, method to permit privilege
escalation is to install the security/sudo
package or port. This software provides additional auditing,
more fine-grained user control, and can be configured to lock
users into running only the specified privileged
commands.After installation, use visudo to edit
/usr/local/etc/sudoers. This example
creates a new webadmin group, adds the
trhodes account to
that group, and configures that group access to restart
apache24:&prompt.root; pw groupadd webadmin -M trhodes -g 6000
&prompt.root; visudo
%webadmin ALL=(ALL) /usr/sbin/service apache24 *Password HashesPasswords are a necessary evil of technology. When they
must be used, they should be complex and a powerful hash
mechanism should be used to encrypt the version that is stored
in the password database. &os; supports the
DES, MD5,
SHA256, SHA512, and
Blowfish hash algorithms in its crypt()
library. The default of SHA512 should not
be changed to a less secure hashing algorithm, but can be
changed to the more secure Blowfish algorithm.Blowfish is not part of AES and is
not considered compliant with any Federal Information
Processing Standards (FIPS). Its use may
not be permitted in some environments.To determine which hash algorithm is used to encrypt a
user's password, the superuser can view the hash for the user
in the &os; password database. Each hash starts with a symbol
which indicates the type of hash mechanism used to encrypt the
password. If DES is used, there is no
beginning symbol. For MD5, the symbol is
$. For SHA256 and
SHA512, the symbol is
$6$. For Blowfish, the symbol is
$2a$. In this example, the password for
dru is hashed using
the default SHA512 algorithm as the hash
starts with $6$. Note that the encrypted
hash, not the password itself, is stored in the password
database:&prompt.root; grep dru /etc/master.passwd
dru:$6$pzIjSvCAn.PBYQBA$PXpSeWPx3g5kscj3IMiM7tUEUSPmGexxta.8Lt9TGSi2lNQqYGKszsBPuGME0:1001:1001::0:0:dru:/usr/home/dru:/bin/cshThe hash mechanism is set in the user's login class. For
this example, the user is in the default
login class and the hash algorithm is set with this line in
/etc/login.conf: :passwd_format=sha512:\To change the algorithm to Blowfish, modify that line to
look like this: :passwd_format=blf:\Then run cap_mkdb /etc/login.conf as
described in . Note that this
change will not affect any existing password hashes. This
means that all passwords should be re-hashed by asking users
to run passwd in order to change their
password.For remote logins, two-factor authentication should be
used. An example of two-factor authentication is
something you have, such as a key, and
something you know, such as the passphrase for
that key. Since OpenSSH is part of
the &os; base system, all network logins should be over an
encrypted connection and use key-based authentication instead
of passwords. For more information, refer to . Kerberos users may need to make
additional changes to implement
OpenSSH in their network. These
changes are described in .Password Policy EnforcementEnforcing a strong password policy for local accounts is a
fundamental aspect of system security. In &os;, password
length, password strength, and password complexity can be
implemented using built-in Pluggable Authentication Modules
(PAM).This section demonstrates how to configure the minimum and
maximum password length and the enforcement of mixed
characters using the pam_passwdqc.so
module. This module is enforced when a user changes their
password.To configure this module, become the superuser and
uncomment the line containing
pam_passwdqc.so in
/etc/pam.d/passwd. Then, edit that line
to match the password policy:password requisite pam_passwdqc.so min=disabled,disabled,disabled,12,10 similar=deny retry=3 enforce=usersThis example sets several requirements for new passwords.
The min setting controls the minimum
password length. It has five values because this module
defines five different types of passwords based on their
complexity. Complexity is defined by the type of characters
that must exist in a password, such as letters, numbers,
symbols, and case. The types of passwords are described in
&man.pam.passwdqc.8;. In this example, the first three types
of passwords are disabled, meaning that passwords that meet
those complexity requirements will not be accepted, regardless
of their length. The 12 sets a minimum
password policy of at least twelve characters, if the password
also contains characters with three types of complexity. The
10 sets the password policy to also allow
passwords of at least ten characters, if the password contains
characters with four types of complexity.The similar setting denies passwords
that are similar to the user's previous password. The
retry setting provides a user with three
opportunities to enter a new password.Once this file is saved, a user changing their password
will see a message similar to the following:&prompt.user; passwd
Changing local password for trhodes
Old Password:
You can now choose the new password.
A valid password should be a mix of upper and lower case letters,
digits and other characters. You can use a 12 character long
password with characters from at least 3 of these 4 classes, or
a 10 character long password containing characters from all the
classes. Characters that form a common pattern are discarded by
the check.
Alternatively, if noone else can see your terminal now, you can
pick this as your password: "trait-useful&knob".
Enter new password:If a password that does not match the policy is entered,
it will be rejected with a warning and the user will have an
opportunity to try again, up to the configured number of
retries.Most password policies require passwords to expire after
so many days. To set a password age time in &os;, set
for the user's login class in
/etc/login.conf. The
default login class contains an
example:# :passwordtime=90d:\So, to set an expiry of 90 days for this login class,
remove the comment symbol (#), save the
edit, and run cap_mkdb
/etc/login.conf.To set the expiration on individual users, pass an
expiration date or the number of days to expiry and a username
to pw:&prompt.root; pw usermod -p 30-apr-2015 -n trhodesAs seen here, an expiration date is set in the form of
day, month, and year. For more information, see
&man.pw.8;.Detecting RootkitsA rootkit is any unauthorized
software that attempts to gain root access to a system. Once
installed, this malicious software will normally open up
another avenue of entry for an attacker. Realistically, once
a system has been compromised by a rootkit and an
investigation has been performed, the system should be
reinstalled from scratch. There is tremendous risk that even
the most prudent security or systems engineer will miss
something an attacker left behind.A rootkit does do one thing usefulfor administrators: once
detected, it is a sign that a compromise happened at some
point. But, these types of applications tend to be very well
hidden. This section demonstrates a tool that can be used to
detect rootkits, security/rkhunter.After installation of this package or port, the system may
be checked using the following command. It will produce a lot
of information and will require some manual pressing of
ENTER:&prompt.root; rkhunter -cAfter the process completes, a status message will be
printed to the screen. This message will include the amount
of files checked, suspect files, possible rootkits, and more.
During the check, some generic security warnings may
be produced about hidden files, the
OpenSSH protocol selection, and
known vulnerable versions of installed software. These can be
handled now or after a more detailed analysis has been
performed.Every administrator should know what is running on the
systems they are responsible for. Third-party tools like
rkhunter and
sysutils/lsof, and native commands such
as netstat and ps, can
show a great deal of information on the system. Take notes on
what is normal, ask questions when something seems out of
place, and be paranoid. While preventing a compromise is
ideal, detecting a compromise is a must.Binary VerificationVerification of system files and binaries is important
because it provides the system administration and security
teams information about system changes. A software
application that monitors the system for changes is called an
Intrusion Detection System (IDS).&os; provides native support for a basic
IDS system. While the nightly security
emails will notify an administrator of changes, the
information is stored locally and there is a chance that a
malicious user could modify this information in order to hide
their changes to the system. As such, it is recommended to
create a separate set of binary signatures and store them on a
read-only, root-owned directory or, preferably, on a removable
USB disk or remote
rsync server.The built-in mtree utility can be used
to generate a specification of the contents of a directory. A
seed, or a numeric constant, is used to generate the
specification and is required to check that the specification
has not changed. This makes it possible to determine if a
file or binary has been modified. Since the seed value is
unknown by an attacker, faking or checking the checksum values
of files will be difficult to impossible. The following
example generates a set of SHA256 hashes,
one for each system binary in /bin, and
saves those values to a hidden file in root's home directory,
/root/.bin_chksum_mtree:&prompt.root; mtree -s 3483151339707503 -c -K cksum,sha256digest -p /bin > /root/.bin_chksum_mtree
&prompt.root; mtree: /bin checksum: 3427012225The 3483151339707503 represents
the seed. This value should be remembered, but not
shared.Viewing /root/.bin_cksum_mtree should
yield output similar to the following:# user: root
# machine: dreadnaught
# tree: /bin
# date: Mon Feb 3 10:19:53 2014
# .
/set type=file uid=0 gid=0 mode=0555 nlink=1 flags=none
. type=dir mode=0755 nlink=2 size=1024 \
time=1380277977.000000000
\133 nlink=2 size=11704 time=1380277977.000000000 \
cksum=484492447 \
sha256digest=6207490fbdb5ed1904441fbfa941279055c3e24d3a4049aeb45094596400662a
cat size=12096 time=1380277975.000000000 cksum=3909216944 \
sha256digest=65ea347b9418760b247ab10244f47a7ca2a569c9836d77f074e7a306900c1e69
chflags size=8168 time=1380277975.000000000 cksum=3949425175 \
sha256digest=c99eb6fc1c92cac335c08be004a0a5b4c24a0c0ef3712017b12c89a978b2dac3
chio size=18520 time=1380277975.000000000 cksum=2208263309 \
sha256digest=ddf7c8cb92a58750a675328345560d8cc7fe14fb3ccd3690c34954cbe69fc964
chmod size=8640 time=1380277975.000000000 cksum=2214429708 \
sha256digest=a435972263bf814ad8df082c0752aa2a7bdd8b74ff01431ccbd52ed1e490bbe7The machine's hostname, the date and time the
specification was created, and the name of the user who
created the specification are included in this report. There
is a checksum, size, time, and SHA256
digest for each binary in the directory.To verify that the binary signatures have not changed,
compare the current contents of the directory to the
previously generated specification, and save the results to a
file. This command requires the seed that was used to
generate the original specification:&prompt.root; mtree -s 3483151339707503 -p /bin < /root/.bin_chksum_mtree >> /root/.bin_chksum_output
&prompt.root; mtree: /bin checksum: 3427012225This should produce the same checksum for
/bin that was produced when the
specification was created. If no changes have occurred to the
binaries in this directory, the
/root/.bin_chksum_output output file will
be empty. To simulate a change, change the date on
/bin/cat using touch
and run the verification command again:&prompt.root; touch /bin/cat
&prompt.root; mtree -s 3483151339707503 -p /bin < /root/.bin_chksum_mtree >> /root/.bin_chksum_output
&prompt.root; more /root/.bin_chksum_output
cat changed
modification time expected Fri Sep 27 06:32:55 2013 found Mon Feb 3 10:28:43 2014It is recommended to create specifications for the
directories which contain binaries and configuration files, as
well as any directories containing sensitive data. Typically,
specifications are created for /bin,
/sbin, /usr/bin,
/usr/sbin,
/usr/local/bin,
/etc, and
/usr/local/etc.More advanced IDS systems exist, such
as security/aide. In most cases,
mtree provides the functionality
administrators need. It is important to keep the seed value
and the checksum output hidden from malicious users. More
information about mtree can be found in
&man.mtree.8;.System Tuning for SecurityIn &os;, many system features can be tuned using
sysctl. A few of the security features
which can be tuned to prevent Denial of Service
(DoS) attacks will be covered in this
section. More information about using
sysctl, including how to temporarily change
values and how to make the changes permanent after testing,
can be found in .Any time a setting is changed with
sysctl, the chance to cause undesired
harm is increased, affecting the availability of the system.
All changes should be monitored and, if possible, tried on a
testing system before being used on a production
system.By default, the &os; kernel boots with a security level of
-1. This is called insecure
mode because immutable file flags may be turned off
and all devices may be read from or written to. The security
level will remain at -1 unless it is
altered through sysctl or by a setting in
the startup scripts. The security level may be increased
during system startup by setting
kern_securelevel_enable to
YES in /etc/rc.conf,
and the value of kern_securelevel to the
desired security level. See &man.security.7; and &man.init.8;
for more information on these settings and the available
security levels.Increasing the securelevel can break
Xorg and cause other issues. Be
prepared to do some debugging.The net.inet.tcp.blackhole and
net.inet.udp.blackhole settings can be used
to drop incoming SYN packets on closed
ports without sending a return RST
response. The default behavior is to return an
RST to show a port is closed. Changing the
default provides some level of protection against ports scans,
which are used to determine which applications are running on
a system. Set net.inet.tcp.blackhole to
2 and
net.inet.udp.blackhole to
1. Refer to &man.blackhole.4; for more
information about these settings.The net.inet.icmp.drop_redirect and
net.inet.ip.redirect settings help prevent
against redirect attacks. A redirect
attack is a type of DoS which sends mass
numbers of ICMP type 5 packets. Since
these packets are not required, set
net.inet.icmp.drop_redirect to
1 and set
net.inet.ip.redirect to
0.Source routing is a method for detecting and accessing
non-routable addresses on the internal network. This should
be disabled as non-routable addresses are normally not
routable on purpose. To disable this feature, set
net.inet.ip.sourceroute and
net.inet.ip.accept_sourceroute to
0.When a machine on the network needs to send messages to
all hosts on a subnet, an ICMP echo request
message is sent to the broadcast address. However, there is
no reason for an external host to perform such an action. To
reject all external broadcast requests, set
net.inet.icmp.bmcastecho to
0.Some additional settings are documented in
&man.security.7;.One-time Passwordsone-time passwordssecurityone-time passwordsBy default, &os; includes support for One-time Passwords In
Everything (OPIE). OPIE
is designed to prevent replay attacks, in which an attacker
discovers a user's password and uses it to access a system.
Since a password is only used once in OPIE, a
discovered password is of little use to an attacker.
OPIE uses a secure hash and a
challenge/response system to manage passwords. The &os;
implementation uses the MD5 hash by
default.OPIE uses three different types of
passwords. The first is the usual &unix; or Kerberos password.
The second is the one-time password which is generated by
opiekey. The third type of password is the
secret password which is used to generate
one-time passwords. The secret password has nothing to do with,
and should be different from, the &unix; password.There are two other pieces of data that are important to
OPIE. One is the seed or
key, consisting of two letters and five digits.
The other is the iteration count, a number
between 1 and 100. OPIE creates the one-time
password by concatenating the seed and the secret password,
applying the MD5 hash as many times as
specified by the iteration count, and turning the result into
six short English words which represent the one-time password.
The authentication system keeps track of the last one-time
password used, and the user is authenticated if the hash of the
user-provided password is equal to the previous password.
Because a one-way hash is used, it is impossible to generate
future one-time passwords if a successfully used password is
captured. The iteration count is decremented after each
successful login to keep the user and the login program in sync.
When the iteration count gets down to 1,
OPIE must be reinitialized.There are a few programs involved in this process. A
one-time password, or a consecutive list of one-time passwords,
is generated by passing an iteration count, a seed, and a secret
password to &man.opiekey.1;. In addition to initializing
OPIE, &man.opiepasswd.1; is used to change
passwords, iteration counts, or seeds. The relevant credential
files in /etc/opiekeys are examined by
&man.opieinfo.1; which prints out the invoking user's current
iteration count and seed.This section describes four different sorts of operations.
The first is how to set up one-time-passwords for the first time
over a secure connection. The second is how to use
opiepasswd over an insecure connection. The
third is how to log in over an insecure connection. The fourth
is how to generate a number of keys which can be written down or
printed out to use at insecure locations.Initializing OPIETo initialize OPIE for the first time,
run this command from a secure location:&prompt.user; opiepasswd -c
[grimreaper] ~ $ opiepasswd -f -c
Adding unfurl:
Only use this method from the console; NEVER from remote. If you are using
telnet, xterm, or a dial-in, type ^C now or exit with no password.
Then run opiepasswd without the -c parameter.
Using MD5 to compute responses.
Enter new secret pass phrase:
Again new secret pass phrase:
ID unfurl OTP key is 499 to4268
MOS MALL GOAT ARM AVID COEDThe sets console mode which assumes
that the command is being run from a secure location, such as
a computer under the user's control or a
SSH session to a computer under the user's
control.When prompted, enter the secret password which will be
used to generate the one-time login keys. This password
should be difficult to guess and should be different than the
password which is associated with the user's login account.
It must be between 10 and 127 characters long. Remember this
password.The ID line lists the login name
(unfurl), default iteration count
(499), and default seed
(to4268). When logging in, the system will
remember these parameters and display them, meaning that they
do not have to be memorized. The last line lists the
generated one-time password which corresponds to those
parameters and the secret password. At the next login, use
this one-time password.Insecure Connection InitializationTo initialize or change the secret password on an
insecure system, a secure connection is needed to some place
where opiekey can be run. This might be a
shell prompt on a trusted machine. An iteration count is
needed, where 100 is probably a good value, and the seed can
either be specified or the randomly-generated one used. On
the insecure connection, the machine being initialized, use
&man.opiepasswd.1;:&prompt.user; opiepasswd
Updating unfurl:
You need the response from an OTP generator.
Old secret pass phrase:
otp-md5 498 to4268 ext
Response: GAME GAG WELT OUT DOWN CHAT
New secret pass phrase:
otp-md5 499 to4269
Response: LINE PAP MILK NELL BUOY TROY
ID mark OTP key is 499 gr4269
LINE PAP MILK NELL BUOY TROYTo accept the default seed, press Return.
Before entering an access password, move over to the secure
connection and give it the same parameters:&prompt.user; opiekey 498 to4268
Using the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
GAME GAG WELT OUT DOWN CHATSwitch back over to the insecure connection, and copy the
generated one-time password over to the relevant
program.Generating a Single One-time PasswordAfter initializing OPIE and logging in,
a prompt like this will be displayed:&prompt.user; telnet example.com
Trying 10.0.0.1...
Connected to example.com
Escape character is '^]'.
FreeBSD/i386 (example.com) (ttypa)
login: <username>
otp-md5 498 gr4269 ext
Password: The OPIE prompts provides a useful
feature. If Return is pressed at the
password prompt, the prompt will turn echo on and display
what is typed. This can be useful when attempting to type in
a password by hand from a printout.MS-DOSWindowsMacOSAt this point, generate the one-time password to answer
this login prompt. This must be done on a trusted system
where it is safe to run &man.opiekey.1;. There are versions
of this command for &windows;, &macos; and &os;. This command
needs the iteration count and the seed as command line
options. Use cut-and-paste from the login prompt on the
machine being logged in to.On the trusted system:&prompt.user; opiekey 498 to4268
Using the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
GAME GAG WELT OUT DOWN CHATOnce the one-time password is generated, continue to log
in.Generating Multiple One-time PasswordsSometimes there is no access to a trusted machine or
secure connection. In this case, it is possible to use
&man.opiekey.1; to generate a number of one-time passwords
beforehand. For example:&prompt.user; opiekey -n 5 30 zz99999
Using the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase: <secret password>
26: JOAN BORE FOSS DES NAY QUIT
27: LATE BIAS SLAY FOLK MUCH TRIG
28: SALT TIN ANTI LOON NEAL USE
29: RIO ODIN GO BYE FURY TIC
30: GREW JIVE SAN GIRD BOIL PHIThe requests five keys in sequence,
and specifies what the last iteration
number should be. Note that these are printed out in
reverse order of use. The really
paranoid might want to write the results down by hand;
otherwise, print the list. Each line shows both the iteration
count and the one-time password. Scratch off the passwords as
they are used.Restricting Use of &unix; PasswordsOPIE can restrict the use of &unix;
passwords based on the IP address of a login session. The
relevant file is /etc/opieaccess, which
is present by default. Refer to &man.opieaccess.5; for more
information on this file and which security considerations to
be aware of when using it.Here is a sample opieaccess:permit 192.168.0.0 255.255.0.0This line allows users whose IP source address (which is
vulnerable to spoofing) matches the specified value and mask,
to use &unix; passwords at any time.If no rules in opieaccess are
matched, the default is to deny non-OPIE
logins.TCP WrapperTomRhodesWritten
by TCP WrapperTCP Wrapper is a host-based
access control system which extends the abilities of . It can be configured to provide
logging support, return messages, and connection restrictions
for the server daemons under the control of
inetd. Refer to &man.tcpd.8; for
more information about
TCP Wrapper and its features.TCP Wrapper should not be
considered a replacement for a properly configured firewall.
Instead, TCP Wrapper should be used
in conjunction with a firewall and other security enhancements
in order to provide another layer of protection in the
implementation of a security policy.Initial ConfigurationTo enable TCP Wrapper in &os;,
add the following lines to
/etc/rc.conf:inetd_enable="YES"
inetd_flags="-Ww"Then, properly configure
/etc/hosts.allow.Unlike other implementations of
TCP Wrapper, the use of
hosts.deny is deprecated in &os;. All
configuration options should be placed in
/etc/hosts.allow.In the simplest configuration, daemon connection policies
are set to either permit or block, depending on the options in
/etc/hosts.allow. The default
configuration in &os; is to allow all connections to the
daemons started with inetd.Basic configuration usually takes the form of
daemon : address : action, where
daemon is the daemon which
inetd started,
address is a valid hostname,
IP address, or an IPv6 address enclosed in
brackets ([ ]), and action is either
allow or deny.
TCP Wrapper uses a first rule match
semantic, meaning that the configuration file is scanned from
the beginning for a matching rule. When a match is found, the
rule is applied and the search process stops.For example, to allow POP3 connections
via the mail/qpopper daemon, the following
lines should be appended to
hosts.allow:# This line is required for POP3 connections:
qpopper : ALL : allowWhenever this file is edited, restart
inetd:&prompt.root; service inetd restartAdvanced ConfigurationTCP Wrapper provides advanced
options to allow more control over the way connections are
handled. In some cases, it may be appropriate to return a
comment to certain hosts or daemon connections. In other
cases, a log entry should be recorded or an email sent to the
administrator. Other situations may require the use of a
service for local connections only. This is all possible
through the use of configuration options known as wildcards,
expansion characters, and external command execution.Suppose that a situation occurs where a connection should
be denied yet a reason should be sent to the host who
attempted to establish that connection. That action is
possible with . When a connection
attempt is made, executes a shell
command or script. An example exists in
hosts.allow:# The rest of the daemons are protected.
ALL : ALL \
: severity auth.info \
: twist /bin/echo "You are not welcome to use %d from %h."In this example, the message You are not allowed to
use daemon name from
hostname. will be
returned for any daemon not configured in
hosts.allow. This is useful for sending
a reply back to the connection initiator right after the
established connection is dropped. Any message returned
must be wrapped in quote
(") characters.It may be possible to launch a denial of service attack
on the server if an attacker floods these daemons with
connection requests.Another possibility is to use .
Like , implicitly
denies the connection and may be used to run external shell
commands or scripts. Unlike ,
will not send a reply back to the host
who established the connection. For example, consider the
following configuration:# We do not allow connections from example.com:
ALL : .example.com \
: spawn (/bin/echo %a from %h attempted to access %d >> \
/var/log/connections.log) \
: denyThis will deny all connection attempts from *.example.com and log the
hostname, IP address, and the daemon to
which access was attempted to
/var/log/connections.log. This example
uses the substitution characters %a and
%h. Refer to &man.hosts.access.5; for the
complete list.To match every instance of a daemon, domain, or
IP address, use ALL.
Another wildcard is PARANOID which may be
used to match any host which provides an IP
address that may be forged because the IP
address differs from its resolved hostname. In this example,
all connection requests to Sendmail
which have an IP address that varies from
its hostname will be denied:# Block possibly spoofed requests to sendmail:
sendmail : PARANOID : denyUsing the PARANOID wildcard will
result in denied connections if the client or server has a
broken DNS setup.To learn more about wildcards and their associated
functionality, refer to &man.hosts.access.5;.When adding new configuration lines, make sure that any
unneeded entries for that daemon are commented out in
hosts.allow.KerberosTillmanHodgsonContributed by MarkMurrayBased on a contribution by Kerberos is a network
authentication protocol which was originally created by the
Massachusetts Institute of Technology (MIT)
as a way to securely provide authentication across a potentially
hostile network. The Kerberos
protocol uses strong cryptography so that both a client and
server can prove their identity without sending any unencrypted
secrets over the network. Kerberos
can be described as an identity-verifying proxy system and as a
trusted third-party authentication system. After a user
authenticates with Kerberos, their
communications can be encrypted to assure privacy and data
integrity.The only function of Kerberos is
to provide the secure authentication of users and servers on the
network. It does not provide authorization or auditing
functions. It is recommended that
Kerberos be used with other security
methods which provide authorization and audit services.The current version of the protocol is version 5, described
in RFC 4120. Several free
implementations of this protocol are available, covering a wide
range of operating systems. MIT continues to
develop their Kerberos package. It
is commonly used in the US as a cryptography
product, and has historically been subject to
US export regulations. In &os;,
MIT Kerberos is
available as the security/krb5 package or
port. The Heimdal Kerberos
implementation was explicitly developed outside of the
US to avoid export regulations. The Heimdal
Kerberos distribution is included in
the base &os; installation, and another distribution with more
configurable options is available as
security/heimdal in the Ports
Collection.In Kerberos users and services
are identified as principals which are contained
within an administrative grouping, called a
realm. A typical user principal would be of the
form
user@REALM
(realms are traditionally uppercase).This section provides a guide on how to set up
Kerberos using the Heimdal
distribution included in &os;.For purposes of demonstrating a
Kerberos installation, the name
spaces will be as follows:The DNS domain (zone) will be
example.org.The Kerberos realm will be
EXAMPLE.ORG.Use real domain names when setting up
Kerberos, even if it will run
internally. This avoids DNS problems and
assures inter-operation with other
Kerberos realms.Setting up a Heimdal KDCKerberos5Key Distribution CenterThe Key Distribution Center (KDC) is
the centralized authentication service that
Kerberos provides, the
trusted third party of the system. It is the
computer that issues Kerberos
tickets, which are used for clients to authenticate to
servers. Because the KDC is considered
trusted by all other computers in the
Kerberos realm, it has heightened
security concerns. Direct access to the KDC should be
limited.While running a KDC requires few
computing resources, a dedicated machine acting only as a
KDC is recommended for security
reasons.To begin setting up a KDC, add these
lines to /etc/rc.conf:kerberos5_server_enable="YES"
kadmind5_server_enable="YES"Next, edit /etc/krb5.conf as
follows:[libdefaults]
default_realm = EXAMPLE.ORG
[realms]
EXAMPLE.ORG = {
kdc = kerberos.example.org
admin_server = kerberos.example.org
}
[domain_realm]
.example.org = EXAMPLE.ORGIn this example, the KDC will use the
fully-qualified hostname kerberos.example.org. The
hostname of the KDC must be resolvable in the
DNS.Kerberos can also use the
DNS to locate KDCs, instead of a
[realms] section in
/etc/krb5.conf. For large organizations
that have their own DNS servers, the above
example could be trimmed to:[libdefaults]
default_realm = EXAMPLE.ORG
[domain_realm]
.example.org = EXAMPLE.ORGWith the following lines being included in the
example.org zone
file:_kerberos._udp IN SRV 01 00 88 kerberos.example.org.
_kerberos._tcp IN SRV 01 00 88 kerberos.example.org.
_kpasswd._udp IN SRV 01 00 464 kerberos.example.org.
_kerberos-adm._tcp IN SRV 01 00 749 kerberos.example.org.
_kerberos IN TXT EXAMPLE.ORGIn order for clients to be able to find the
Kerberos services, they
must have either
a fully configured /etc/krb5.conf or a
minimally configured /etc/krb5.confand a properly configured
DNS server.Next, create the Kerberos
database which contains the keys of all principals (users and
hosts) encrypted with a master password. It is not required
to remember this password as it will be stored in
/var/heimdal/m-key; it would be
reasonable to use a 45-character random password for this
purpose. To create the master key, run
kstash and enter a password:&prompt.root; kstash
Master key: xxxxxxxxxxxxxxxxxxxxxxx
Verifying password - Master key: xxxxxxxxxxxxxxxxxxxxxxxOnce the master key has been created, the database should
be initialized. The Kerberos
administrative tool &man.kadmin.8; can be used on the KDC in a
mode that operates directly on the database, without using the
&man.kadmind.8; network service, as
kadmin -l. This resolves the
chicken-and-egg problem of trying to connect to the database
before it is created. At the kadmin
prompt, use init to create the realm's
initial database:&prompt.root; kadmin -l
kadmin> init EXAMPLE.ORG
Realm max ticket life [unlimited]:Lastly, while still in kadmin, create
the first principal using add. Stick to
the default options for the principal for now, as these can be
changed later with modify. Type
? at the prompt to see the available
options.kadmin> add tillman
Max ticket life [unlimited]:
Max renewable life [unlimited]:
Attributes []:
Password: xxxxxxxx
Verifying password - Password: xxxxxxxxNext, start the KDC services by running
service kerberos start and
service kadmind start. While there will
not be any kerberized daemons running at this point, it is
possible to confirm that the KDC is
functioning by obtaining a ticket for the
principal that was just created:&prompt.user; kinit tillman
tillman@EXAMPLE.ORG's Password:Confirm that a ticket was successfully obtained using
klist:&prompt.user; klist
Credentials cache: FILE:/tmp/krb5cc_1001
Principal: tillman@EXAMPLE.ORG
Issued Expires Principal
Aug 27 15:37:58 2013 Aug 28 01:37:58 2013 krbtgt/EXAMPLE.ORG@EXAMPLE.ORGThe temporary ticket can be destroyed when the test is
finished:&prompt.user; kdestroyConfiguring a Server to Use
KerberosKerberos5enabling servicesThe first step in configuring a server to use
Kerberos authentication is to
ensure that it has the correct configuration in
/etc/krb5.conf. The version from the
KDC can be used as-is, or it can be
regenerated on the new system.Next, create /etc/krb5.keytab on the
server. This is the main part of Kerberizing a
service — it corresponds to generating a secret shared
between the service and the KDC. The
secret is a cryptographic key, stored in a
keytab. The keytab contains the server's host
key, which allows it and the KDC to verify
each others' identity. It must be transmitted to the server
in a secure fashion, as the security of the server can be
broken if the key is made public. Typically, the
keytab is generated on an administrator's
trusted machine using kadmin, then securely
transferred to the server, e.g., with &man.scp.1;; it can also
be created directly on the server if that is consistent with
the desired security policy. It is very important that the
keytab is transmitted to the server in a secure fashion: if
the key is known by some other party, that party can
impersonate any user to the server! Using
kadmin on the server directly is
convenient, because the entry for the host principal in the
KDC database is also created using
kadmin.Of course, kadmin is a kerberized
service; a Kerberos ticket is
needed to authenticate to the network service, but to ensure
that the user running kadmin is actually
present (and their session has not been hijacked),
kadmin will prompt for the password to get
a fresh ticket. The principal authenticating to the kadmin
service must be permitted to use the kadmin
interface, as specified in kadmind.acl.
See the section titled Remote administration in
info heimdal for details on designing
access control lists. Instead of enabling remote
kadmin access, the administrator could
securely connect to the KDC via the local
console or &man.ssh.1;, and perform administration locally
using kadmin -l.After installing /etc/krb5.conf,
use add --random-key in
kadmin. This adds the server's host
principal to the database, but does not extract a copy of the
host principal key to a keytab. To generate the keytab, use
ext to extract the server's host principal
key to its own keytab:&prompt.root; kadmin
kadmin> add --random-key host/myserver.example.org
Max ticket life [unlimited]:
Max renewable life [unlimited]:
Principal expiration time [never]:
Password expiration time [never]:
Attributes []:
kadmin> ext_keytab host/myserver.example.org
kadmin> exitNote that ext_keytab stores the
extracted key in /etc/krb5.keytab by
default. This is good when being run on the server being
kerberized, but the --keytab
path/to/file argument
should be used when the keytab is being extracted
elsewhere:&prompt.root; kadmin
kadmin> ext_keytab --keytab=/tmp/example.keytab host/myserver.example.org
kadmin> exitThe keytab can then be securely copied to the server
using &man.scp.1; or a removable media. Be sure to specify a
non-default keytab name to avoid inserting unneeded keys into
the system's keytab.At this point, the server can read encrypted messages from
the KDC using its shared key, stored in
krb5.keytab. It is now ready for the
Kerberos-using services to be
enabled. One of the most common such services is
&man.sshd.8;, which supports
Kerberos via the
GSS-API. In
/etc/ssh/sshd_config, add the
line:GSSAPIAuthentication yesAfter making this change, &man.sshd.8; must be restared
for the new configuration to take effect:
service sshd restart.Configuring a Client to Use
KerberosKerberos5configure clientsAs it was for the server, the client requires
configuration in /etc/krb5.conf. Copy
the file in place (securely) or re-enter it as needed.Test the client by using kinit,
klist, and kdestroy from
the client to obtain, show, and then delete a ticket for an
existing principal. Kerberos
applications should also be able to connect to
Kerberos enabled servers. If that
does not work but obtaining a ticket does, the problem is
likely with the server and not with the client or the
KDC. In the case of kerberized
&man.ssh.1;, GSS-API is disabled by
default, so test using ssh -o
GSSAPIAuthentication=yes
hostname.When testing a Kerberized application, try using a packet
sniffer such as tcpdump to confirm that no
sensitive information is sent in the clear.Various Kerberos client
applications are available. With the advent of a bridge so
that applications using SASL for
authentication can use GSS-API mechanisms
as well, large classes of client applications can use
Kerberos for authentication, from
Jabber clients to IMAP clients..k5login.k5usersUsers within a realm typically have their
Kerberos principal mapped to a
local user account. Occasionally, one needs to grant access
to a local user account to someone who does not have a
matching Kerberos principal. For
example, tillman@EXAMPLE.ORG may need
access to the local user account webdevelopers. Other
principals may also need access to that local account.The .k5login and
.k5users files, placed in a user's home
directory, can be used to solve this problem. For example, if
the following .k5login is placed in the
home directory of webdevelopers, both principals
listed will have access to that account without requiring a
shared password.:tillman@example.org
jdoe@example.orgRefer to &man.ksu.1; for more information about
.k5users.MIT DifferencesThe major difference between the MIT
and Heimdal implementations is that kadmin
has a different, but equivalent, set of commands and uses a
different protocol. If the KDC is
MIT, the Heimdal version of
kadmin cannot be used to administer the
KDC remotely, and vice versa.Client applications may also use slightly different
command line options to accomplish the same tasks. Following
the instructions at http://web.mit.edu/Kerberos/www/
is recommended. Be careful of path issues: the
MIT port installs into
/usr/local/ by default, and the &os;
system applications run instead of the
MIT versions if PATH lists
the system directories first.When using MIT Kerberos as a KDC on
&os;, the following edits should also be made to
rc.conf:kerberos5_server="/usr/local/sbin/krb5kdc"
kadmind5_server="/usr/local/sbin/kadmind"
kerberos5_server_flags=""
kerberos5_server_enable="YES"
kadmind5_server_enable="YES"Kerberos Tips, Tricks, and
TroubleshootingWhen configuring and troubleshooting
Kerberos, keep the following points
in mind:When using either Heimdal or MIT
Kerberos from ports, ensure
that the PATH lists the port's versions of
the client applications before the system versions.If all the computers in the realm do not have
synchronized time settings, authentication may fail.
describes how to synchronize
clocks using NTP.If the hostname is changed, the host/ principal must be
changed and the keytab updated. This also applies to
special keytab entries like the HTTP/ principal used for
Apache's www/mod_auth_kerb.All hosts in the realm must be both forward and
reverse resolvable in DNS or, at a
minimum, exist in /etc/hosts. CNAMEs
will work, but the A and PTR records must be correct and
in place. The error message for unresolvable hosts is not
intuitive: Kerberos5 refuses authentication
because Read req failed: Key table entry not
found.Some operating systems that act as clients to the
KDC do not set the permissions for
ksu to be setuid root. This means that
ksu does not work. This is a
permissions problem, not a KDC
error.With MIT
Kerberos, to allow a principal
to have a ticket life longer than the default lifetime of
ten hours, use modify_principal at the
&man.kadmin.8; prompt to change the
maxlife of both the principal in
question and the
krbtgt
principal. The principal can then use
kinit -l to request a ticket with a
longer lifetime.When running a packet sniffer on the
KDC to aid in troubleshooting while
running kinit from a workstation, the
Ticket Granting Ticket (TGT) is sent
immediately, even before the password is typed. This is
because the Kerberos server
freely transmits a TGT to any
unauthorized request. However, every
TGT is encrypted in a key derived from
the user's password. When a user types their password, it
is not sent to the KDC, it is instead
used to decrypt the TGT that
kinit already obtained. If the
decryption process results in a valid ticket with a valid
time stamp, the user has valid
Kerberos credentials. These
credentials include a session key for establishing secure
communications with the
Kerberos server in the future,
as well as the actual TGT, which is
encrypted with the Kerberos
server's own key. This second layer of encryption allows
the Kerberos server to verify
the authenticity of each TGT.Host principals can have a longer ticket lifetime. If
the user principal has a lifetime of a week but the host
being connected to has a lifetime of nine hours, the user
cache will have an expired host principal and the ticket
cache will not work as expected.When setting up krb5.dict to
prevent specific bad passwords from being used as
described in &man.kadmind.8;, remember that it only
applies to principals that have a password policy assigned
to them. The format used in
krb5.dict is one string per line.
Creating a symbolic link to
/usr/share/dict/words might be
useful.Mitigating Kerberos
LimitationsKerberos5limitations and shortcomingsSince Kerberos is an all or
nothing approach, every service enabled on the network must
either be modified to work with
Kerberos or be otherwise secured
against network attacks. This is to prevent user credentials
from being stolen and re-used. An example is when
Kerberos is enabled on all remote
shells but the non-Kerberized POP3 mail
server sends passwords in plain text.The KDC is a single point of failure.
By design, the KDC must be as secure as its
master password database. The KDC should
have absolutely no other services running on it and should be
physically secure. The danger is high because
Kerberos stores all passwords
encrypted with the same master key which is stored as a file
on the KDC.A compromised master key is not quite as bad as one might
fear. The master key is only used to encrypt the
Kerberos database and as a seed for
the random number generator. As long as access to the
KDC is secure, an attacker cannot do much
with the master key.If the KDC is unavailable, network
services are unusable as authentication cannot be performed.
This can be alleviated with a single master
KDC and one or more slaves, and with
careful implementation of secondary or fall-back
authentication using PAM.Kerberos allows users, hosts
and services to authenticate between themselves. It does not
have a mechanism to authenticate the
KDC to the users, hosts, or services. This
means that a trojanned kinit could record
all user names and passwords. File system integrity checking
tools like security/tripwire can
alleviate this.Resources and Further InformationKerberos5external resources
The Kerberos
FAQDesigning
an Authentication System: a Dialog in Four
ScenesRFC
4120, The Kerberos Network
Authentication Service (V5)MIT
Kerberos home
pageHeimdal
Kerberos home
pageOpenSSLTomRhodesWritten
by securityOpenSSLOpenSSL is an open source
implementation of the SSL and
TLS protocols. It provides an encryption
transport layer on top of the normal communications layer,
allowing it to be intertwined with many network applications and
services.The version of OpenSSL included
in &os; supports the Secure Sockets Layer v2/v3 (SSLv2/SSLv3)
and Transport Layer Security v1 (TLSv1) network security
protocols and can be used as a general cryptographic
library.OpenSSL is often used to encrypt
authentication of mail clients and to secure web based
transactions such as credit card payments. Some ports, such as
www/apache24 and
databases/postgresql91-server, include a
compile option for building with
OpenSSL.&os; provides two versions of
OpenSSL: one in the base system and
one in the Ports Collection. Users can choose which version to
use by default for other ports using the following knobs:WITH_OPENSSL_PORT: when set, the port will use
OpenSSL from the
security/openssl port, even if the
version in the base system is up to date or newer.WITH_OPENSSL_BASE: when set, the port will compile
against OpenSSL provided by the
base system.Another common use of OpenSSL is
to provide certificates for use with software applications.
Certificates can be used to verify the credentials of a company
or individual. If a certificate has not been signed by an
external Certificate Authority
(CA), such as http://www.verisign.com,
the application that uses the certificate will produce a
warning. There is a cost associated with obtaining a signed
certificate and using a signed certificate is not mandatory as
certificates can be self-signed. However, using an external
authority will prevent warnings and can put users at
ease.This section demonstrates how to create and use certificates
on a &os; system. Refer to for an
example of how to create a CA for signing
one's own certificates.Generating CertificatesOpenSSLcertificate generationTo generate a certificate that will be signed by an
external CA, issue the following command
and input the information requested at the prompts. This
input information will be written to the certificate. At the
Common Name prompt, input the fully
qualified name for the system that will use the certificate.
If this name does not match the server, the application
verifying the certificate will issue a warning to the user,
rendering the verification provided by the certificate as
useless.&prompt.root; openssl req -new -nodes -out req.pem -keyout cert.pem
Generating a 1024 bit RSA private key
................++++++
.......................................++++++
writing new private key to 'cert.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:PA
Locality Name (eg, city) []:Pittsburgh
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:Systems Administrator
Common Name (eg, YOUR name) []:localhost.example.org
Email Address []:trhodes@FreeBSD.org
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:SOME PASSWORD
An optional company name []:Another NameOther options, such as the expire time and alternate
encryption algorithms, are available when creating a
certificate. A complete list of options is described in
&man.openssl.1;.This command will create two files in the current
directory. The certificate request,
req.pem, can be sent to a
CA who will validate the entered
credentials, sign the request, and return the signed
certificate. The second file,
cert.pem, is the private key for the
certificate and should be stored in a secure location. If
this falls in the hands of others, it can be used to
impersonate the user or the server.Alternately, if a signature from a CA
is not required, a self-signed certificate can be created.
First, generate the RSA key:&prompt.root; openssl dsaparam -rand -genkey -out myRSA.key 1024
0 semi-random bytes loaded
Generating DSA parameters, 1024 bit long prime
This could take some time
.............+........+...........+...+....+........+.....+++++++++++++++++++++++++++++++++++++++++++++++++++*
..........+.+...........+....+........+.................+.+++++++++++++++++++++++++++++++++++++++++++++++++++*Next, generate the CA key. When
prompted, enter a passphrase between 4 to 1023 characters.
Remember this passphrase as it is needed whenever the key is
used to sign a certificate.&prompt.root; openssl gendsa -des3 -out myca.key myRSA.key
Generating DSA key, 1024 bits
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:Use this key to create a self-signed certificate. When
prompted, enter the passphrase. Then follow the usual prompts
for creating a certificate:&prompt.root; openssl req -new -x509 -days 365 -key myca.key -out new.crt
Enter pass phrase for myca.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:PA
Locality Name (eg, city) []:Pittsburgh
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:Systems Administrator
Common Name (e.g. server FQDN or YOUR name) []:localhost.example.org
Email Address []:trhodes@FreeBSD.orgThis will create two new files in the current directory: a
certificate authority signature file,
myca.key, and the certificate itself,
new.crt. These should be placed in a
directory, preferably under /etc, which
is readable only by root. Permissions of
0700 are appropriate for these files and
can be set using chmod.Using CertificatesOne use for a certificate is to encrypt connections to the
Sendmail mail server in order to
prevent the use of clear text authentication.Some mail clients will display an error if the user has
not installed a local copy of the certificate. Refer to the
documentation included with the software for more
information on certificate installation.In &os; 10.0-RELEASE and above, it is possible to create a
self-signed certificate for
Sendmail automatically. To enable
this, add the following lines to
/etc/rc.conf:sendmail_enable="YES"
sendmail_cert_create="YES"
sendmail_cert_cn="localhost.example.org"This will automatically create a self-signed certificate,
/etc/mail/certs/host.cert, a signing key,
/etc/mail/certs/host.key, and a
CA certificate,
/etc/mail/certs/cacert.pem. The
certificate will use the Common Name
specified in . After saving
the edits, restart Sendmail:&prompt.root; service sendmail restartIf all went well, there will be no error messages in
/var/log/maillog. For a simple test,
connect to the mail server's listening port using
telnet:&prompt.root; telnet example.com 25
Trying 192.0.34.166...
Connected to example.com.
Escape character is '^]'.
220 example.com ESMTP Sendmail 8.14.7/8.14.7; Fri, 18 Apr 2014 11:50:32 -0400 (EDT)
ehlo example.com
250-example.com Hello example.com [192.0.34.166], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-STARTTLS
250-DELIVERBY
250 HELP
quit
221 2.0.0 example.com closing connection
Connection closed by foreign host.If the STARTTLS line appears in the
output, everything is working correctly.VPN over
IPsecNikClaytonnik@FreeBSD.orgWritten by Hiten M.Pandyahmp@FreeBSD.orgWritten by IPsecInternet Protocol Security (IPsec) is a
set of protocols which sit on top of the Internet Protocol
(IP) layer. It allows two or more hosts to
communicate in a secure manner by authenticating and encrypting
each IP packet of a communication session.
The &os; IPsec network stack is based on the
http://www.kame.net/
implementation and supports both IPv4 and
IPv6 sessions.IPsecESPIPsecAHIPsec is comprised of the following
sub-protocols:Encapsulated Security Payload
(ESP): this protocol
protects the IP packet data from third
party interference by encrypting the contents using
symmetric cryptography algorithms such as Blowfish and
3DES.Authentication Header
(AH)): this protocol
protects the IP packet header from third
party interference and spoofing by computing a cryptographic
checksum and hashing the IP packet
header fields with a secure hashing function. This is then
followed by an additional header that contains the hash, to
allow the information in the packet to be
authenticated.IP Payload Compression Protocol
(IPComp): this protocol
tries to increase communication performance by compressing
the IP payload in order to reduce the
amount of data sent.These protocols can either be used together or separately,
depending on the environment.VPNvirtual private networkVPNIPsec supports two modes of operation.
The first mode, Transport Mode, protects
communications between two hosts. The second mode,
Tunnel Mode, is used to build virtual
tunnels, commonly known as Virtual Private Networks
(VPNs). Consult &man.ipsec.4; for detailed
information on the IPsec subsystem in
&os;.To add IPsec support to the kernel, add
the following options to the custom kernel configuration file
and rebuild the kernel using the instructions in :kernel optionsIPSECoptions IPSEC #IP security
device cryptokernel optionsIPSEC_DEBUGIf IPsec debugging support is desired,
the following kernel option should also be added:options IPSEC_DEBUG #debug for IP securityThis rest of this chapter demonstrates the process of
setting up an IPsec VPN
between a home network and a corporate network. In the example
scenario:Both sites are connected to the Internet through a
gateway that is running &os;.The gateway on each network has at least one external
IP address. In this example, the
corporate LAN's external
IP address is 172.16.5.4 and the home
LAN's external IP
address is 192.168.1.12.The internal addresses of the two networks can be either
public or private IP addresses. However,
the address space must not collide. For example, both
networks cannot use 192.168.1.x. In this
example, the corporate LAN's internal
IP address is 10.246.38.1 and the home
LAN's internal IP
address is 10.0.0.5.Configuring a VPN on &os;TomRhodestrhodes@FreeBSD.orgWritten by To begin, security/ipsec-tools must be
installed from the Ports Collection. This software provides a
number of applications which support the configuration.The next requirement is to create two &man.gif.4;
pseudo-devices which will be used to tunnel packets and allow
both networks to communicate properly. As root, run the following
commands, replacing internal and
external with the real IP
addresses of the internal and external interfaces of the two
gateways:&prompt.root; ifconfig gif0 create
&prompt.root; ifconfig gif0 internal1 internal2
&prompt.root; ifconfig gif0 tunnel external1 external2Verify the setup on each gateway, using
ifconfig. Here is the output from Gateway
1:gif0: flags=8051 mtu 1280
tunnel inet 172.16.5.4 --> 192.168.1.12
inet6 fe80::2e0:81ff:fe02:5881%gif0 prefixlen 64 scopeid 0x6
inet 10.246.38.1 --> 10.0.0.5 netmask 0xffffff00Here is the output from Gateway 2:gif0: flags=8051 mtu 1280
tunnel inet 192.168.1.12 --> 172.16.5.4
inet 10.0.0.5 --> 10.246.38.1 netmask 0xffffff00
inet6 fe80::250:bfff:fe3a:c1f%gif0 prefixlen 64 scopeid 0x4Once complete, both internal IP
addresses should be reachable using &man.ping.8;:priv-net# ping 10.0.0.5
PING 10.0.0.5 (10.0.0.5): 56 data bytes
64 bytes from 10.0.0.5: icmp_seq=0 ttl=64 time=42.786 ms
64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=19.255 ms
64 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=20.440 ms
64 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=21.036 ms
--- 10.0.0.5 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 19.255/25.879/42.786/9.782 ms
corp-net# ping 10.246.38.1
PING 10.246.38.1 (10.246.38.1): 56 data bytes
64 bytes from 10.246.38.1: icmp_seq=0 ttl=64 time=28.106 ms
64 bytes from 10.246.38.1: icmp_seq=1 ttl=64 time=42.917 ms
64 bytes from 10.246.38.1: icmp_seq=2 ttl=64 time=127.525 ms
64 bytes from 10.246.38.1: icmp_seq=3 ttl=64 time=119.896 ms
64 bytes from 10.246.38.1: icmp_seq=4 ttl=64 time=154.524 ms
--- 10.246.38.1 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 28.106/94.594/154.524/49.814 msAs expected, both sides have the ability to send and
receive ICMP packets from the privately
configured addresses. Next, both gateways must be told how to
route packets in order to correctly send traffic from either
network. The following commands will achieve this
goal:&prompt.root; corp-net# route add 10.0.0.0 10.0.0.5 255.255.255.0
&prompt.root; corp-net# route add net 10.0.0.0: gateway 10.0.0.5
&prompt.root; priv-net# route add 10.246.38.0 10.246.38.1 255.255.255.0
&prompt.root; priv-net# route add host 10.246.38.0: gateway 10.246.38.1At this point, internal machines should be reachable from
each gateway as well as from machines behind the gateways.
Again, use &man.ping.8; to confirm:corp-net# ping 10.0.0.8
PING 10.0.0.8 (10.0.0.8): 56 data bytes
64 bytes from 10.0.0.8: icmp_seq=0 ttl=63 time=92.391 ms
64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=21.870 ms
64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=198.022 ms
64 bytes from 10.0.0.8: icmp_seq=3 ttl=63 time=22.241 ms
64 bytes from 10.0.0.8: icmp_seq=4 ttl=63 time=174.705 ms
--- 10.0.0.8 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 21.870/101.846/198.022/74.001 ms
priv-net# ping 10.246.38.107
PING 10.246.38.1 (10.246.38.107): 56 data bytes
64 bytes from 10.246.38.107: icmp_seq=0 ttl=64 time=53.491 ms
64 bytes from 10.246.38.107: icmp_seq=1 ttl=64 time=23.395 ms
64 bytes from 10.246.38.107: icmp_seq=2 ttl=64 time=23.865 ms
64 bytes from 10.246.38.107: icmp_seq=3 ttl=64 time=21.145 ms
64 bytes from 10.246.38.107: icmp_seq=4 ttl=64 time=36.708 ms
--- 10.246.38.107 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 21.145/31.721/53.491/12.179 msSetting up the tunnels is the easy part. Configuring a
secure link is a more in depth process. The following
configuration uses pre-shared (PSK)
RSA keys. Other than the
IP addresses, the
/usr/local/etc/racoon/racoon.conf on both
gateways will be identical and look similar to:path pre_shared_key "/usr/local/etc/racoon/psk.txt"; #location of pre-shared key file
log debug; #log verbosity setting: set to 'notify' when testing and debugging is complete
padding # options are not to be changed
{
maximum_length 20;
randomize off;
strict_check off;
exclusive_tail off;
}
timer # timing options. change as needed
{
counter 5;
interval 20 sec;
persend 1;
# natt_keepalive 15 sec;
phase1 30 sec;
phase2 15 sec;
}
listen # address [port] that racoon will listen on
{
isakmp 172.16.5.4 [500];
isakmp_natt 172.16.5.4 [4500];
}
remote 192.168.1.12 [500]
{
exchange_mode main,aggressive;
doi ipsec_doi;
situation identity_only;
my_identifier address 172.16.5.4;
peers_identifier address 192.168.1.12;
lifetime time 8 hour;
passive off;
proposal_check obey;
# nat_traversal off;
generate_policy off;
proposal {
encryption_algorithm blowfish;
hash_algorithm md5;
authentication_method pre_shared_key;
lifetime time 30 sec;
dh_group 1;
}
}
sainfo (address 10.246.38.0/24 any address 10.0.0.0/24 any) # address $network/$netmask $type address $network/$netmask $type ( $type being any or esp)
{ # $network must be the two internal networks you are joining.
pfs_group 1;
lifetime time 36000 sec;
encryption_algorithm blowfish,3des,des;
authentication_algorithm hmac_md5,hmac_sha1;
compression_algorithm deflate;
}For descriptions of each available option, refer to the
manual page for racoon.conf.The Security Policy Database (SPD)
needs to be configured so that &os; and
racoon are able to encrypt and
decrypt network traffic between the hosts.This can be achieved with a shell script, similar to the
following, on the corporate gateway. This file will be used
during system initialization and should be saved as
/usr/local/etc/racoon/setkey.conf.flush;
spdflush;
# To the home network
spdadd 10.246.38.0/24 10.0.0.0/24 any -P out ipsec esp/tunnel/172.16.5.4-192.168.1.12/use;
spdadd 10.0.0.0/24 10.246.38.0/24 any -P in ipsec esp/tunnel/192.168.1.12-172.16.5.4/use;Once in place, racoon may be
started on both gateways using the following command:&prompt.root; /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.logThe output should be similar to the following:corp-net# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf
Foreground mode.
2006-01-30 01:35:47: INFO: begin Identity Protection mode.
2006-01-30 01:35:48: INFO: received Vendor ID: KAME/racoon
2006-01-30 01:35:55: INFO: received Vendor ID: KAME/racoon
2006-01-30 01:36:04: INFO: ISAKMP-SA established 172.16.5.4[500]-192.168.1.12[500] spi:623b9b3bd2492452:7deab82d54ff704a
2006-01-30 01:36:05: INFO: initiate new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0]
2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=28496098(0x1b2d0e2)
2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=47784998(0x2d92426)
2006-01-30 01:36:13: INFO: respond new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0]
2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=124397467(0x76a279b)
2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=175852902(0xa7b4d66)To ensure the tunnel is working properly, switch to
another console and use &man.tcpdump.1; to view network
traffic using the following command. Replace
em0 with the network interface card as
required:&prompt.root; tcpdump -i em0 host 172.16.5.4 and dst 192.168.1.12Data similar to the following should appear on the
console. If not, there is an issue and debugging the
returned data will be required.01:47:32.021683 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xa)
01:47:33.022442 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xb)
01:47:34.024218 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xc)At this point, both networks should be available and seem
to be part of the same network. Most likely both networks are
protected by a firewall. To allow traffic to flow between
them, rules need to be added to pass packets. For the
&man.ipfw.8; firewall, add the following lines to the firewall
configuration file:ipfw add 00201 allow log esp from any to any
ipfw add 00202 allow log ah from any to any
ipfw add 00203 allow log ipencap from any to any
ipfw add 00204 allow log udp from any 500 to anyThe rule numbers may need to be altered depending on the
current host configuration.For users of &man.pf.4; or &man.ipf.8;, the following
rules should do the trick:pass in quick proto esp from any to any
pass in quick proto ah from any to any
pass in quick proto ipencap from any to any
pass in quick proto udp from any port = 500 to any port = 500
pass in quick on gif0 from any to any
pass out quick proto esp from any to any
pass out quick proto ah from any to any
pass out quick proto ipencap from any to any
pass out quick proto udp from any port = 500 to any port = 500
pass out quick on gif0 from any to anyFinally, to allow the machine to start support for the
VPN during system initialization, add the
following lines to /etc/rc.conf:ipsec_enable="YES"
ipsec_program="/usr/local/sbin/setkey"
ipsec_file="/usr/local/etc/racoon/setkey.conf" # allows setting up spd policies on boot
racoon_enable="yes"OpenSSHChernLeeContributed
by OpenSSHsecurityOpenSSHOpenSSH is a set of network
connectivity tools used to provide secure access to remote
machines. Additionally, TCP/IP connections
can be tunneled or forwarded securely through
SSH connections.
OpenSSH encrypts all traffic to
effectively eliminate eavesdropping, connection hijacking, and
other network-level attacks.OpenSSH is maintained by the
OpenBSD project and is installed by default in &os;. It is
compatible with both SSH version 1 and 2
protocols.When data is sent over the network in an unencrypted form,
network sniffers anywhere in between the client and server can
steal user/password information or data transferred during the
session. OpenSSH offers a variety of
authentication and encryption methods to prevent this from
happening. More information about
OpenSSH is available from http://www.openssh.com/.This section provides an overview of the built-in client
utilities to securely access other systems and securely transfer
files from a &os; system. It then describes how to configure a
SSH server on a &os; system. More
information is available in the man pages mentioned in this
chapter.Using the SSH Client UtilitiesOpenSSHclientTo log into a SSH server, use
ssh and specify a username that exists on
that server and the IP address or hostname
of the server. If this is the first time a connection has
been made to the specified server, the user will be prompted
to first verify the server's fingerprint:&prompt.root; ssh user@example.com
The authenticity of host 'example.com (10.0.0.1)' can't be established.
ECDSA key fingerprint is 25:cc:73:b5:b3:96:75:3d:56:19:49:d2:5c:1f:91:3b.
Are you sure you want to continue connecting (yes/no)? yes
Permanently added 'example.com' (ECDSA) to the list of known hosts.
Password for user@example.com: user_passwordSSH utilizes a key fingerprint system
to verify the authenticity of the server when the client
connects. When the user accepts the key's fingerprint by
typing yes when connecting for the first
time, a copy of the key is saved to
.ssh/known_hosts in the user's home
directory. Future attempts to login are verified against the
saved key and ssh will display an alert if
the server's key does not match the saved key. If this
occurs, the user should first verify why the key has changed
before continuing with the connection.By default, recent versions of
OpenSSH only accept
SSHv2 connections. By default, the client
will use version 2 if possible and will fall back to version 1
if the server does not support version 2. To force
ssh to only use the specified protocol,
include or .
Additional options are described in &man.ssh.1;.OpenSSHsecure copy&man.scp.1;Use &man.scp.1; to securely copy a file to or from a
remote machine. This example copies
COPYRIGHT on the remote system to a file
of the same name in the current directory of the local
system:&prompt.root; scp user@example.com:/COPYRIGHT COPYRIGHT
Password for user@example.com: *******
COPYRIGHT 100% |*****************************| 4735
00:00
&prompt.root;Since the fingerprint was already verified for this host,
the server's key is automatically checked before prompting for
the user's password.The arguments passed to scp are similar
to cp. The file or files to copy is the
first argument and the destination to copy to is the second.
Since the file is fetched over the network, one or more of the
file arguments takes the form
. Be
aware when copying directories recursively that
scp uses , whereas
cp uses .To open an interactive session for copying files, use
sftp. Refer to &man.sftp.1; for a list of
available commands while in an sftp
session.Key-based AuthenticationInstead of using passwords, a client can be configured
to connect to the remote machine using keys. To generate
DSA or RSA
authentication keys, use ssh-keygen. To
generate a public and private key pair, specify the type of
key and follow the prompts. It is recommended to protect
the keys with a memorable, but hard to guess
passphrase.&prompt.user; ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_dsa):
Created directory '/home/user/.ssh'.
Enter passphrase (empty for no passphrase): type some passphrase here which can contain spaces
Enter same passphrase again: type some passphrase here which can contain spaces
Your identification has been saved in /home/user/.ssh/id_dsa.
Your public key has been saved in /home/user/.ssh/id_dsa.pub.
The key fingerprint is:
bb:48:db:f2:93:57:80:b6:aa:bc:f5:d5:ba:8f:79:17 user@host.example.comDepending upon the specified protocol, the private key
is stored in ~/.ssh/id_dsa (or
~/.ssh/id_rsa), and the public key
is stored in ~/.ssh/id_dsa.pub (or
~/.ssh/id_rsa.pub). The
public key must be first copied to
~/.ssh/authorized_keys on the remote
machine in order for key-based authentication to
work.Many users believe that keys are secure by design and
will use a key without a passphrase. This is
dangerous behavior. An
administrator can verify that a key pair is protected by a
passphrase by viewing the private key manually. If the
private key file contains the word
ENCRYPTED, the key owner is using a
passphrase. In addition, to better secure end users,
from may be placed in the public key
file. For example, adding
from="192.168.10.5" in the front of
ssh-rsa or rsa-dsa
prefix will only allow that specific user to login from
that IP address.The various options and files can be different
according to the OpenSSH version.
To avoid problems, consult &man.ssh-keygen.1;.If a passphrase is used, the user will be prompted for
the passphrase each time a connection is made to the server.
To load SSH keys into memory, without
needing to type the passphrase each time, use
&man.ssh-agent.1; and &man.ssh-add.1;.Authentication is handled by
ssh-agent, using the private key(s) that
are loaded into it. Then, ssh-agent
should be used to launch another application such as a
shell or a window manager.To use ssh-agent in a shell, start it
with a shell as an argument. Next, add the identity by
running ssh-add and providing it the
passphrase for the private key. Once these steps have been
completed, the user will be able to ssh
to any host that has the corresponding public key installed.
For example:&prompt.user; ssh-agent csh
&prompt.user; ssh-add
Enter passphrase for key '/usr/home/user/.ssh/id_dsa': type passphrase here
Identity added: /usr/home/user/.ssh/id_dsa (/usr/home/user/.ssh/id_dsa)
&prompt.user;To use ssh-agent in
&xorg;, add an entry for it in
~/.xinitrc. This provides the
ssh-agent services to all programs
launched in &xorg;. An example
~/.xinitrc might look like this:exec ssh-agent startxfce4This launches ssh-agent, which in
turn launches XFCE, every time
&xorg; starts. Once
&xorg; has been restarted so that
the changes can take effect, run ssh-add
to load all of the SSH keys.SSH TunnelingOpenSSHtunnelingOpenSSH has the ability to
create a tunnel to encapsulate another protocol in an
encrypted session.The following command tells ssh to
create a tunnel for
telnet:&prompt.user; ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com
&prompt.user;This example uses the following options:Forces ssh to use version 2 to
connect to the server.Indicates no command, or tunnel only. If omitted,
ssh initiates a normal
session.Forces ssh to run in the
background.Indicates a local tunnel in
localport:remotehost:remoteport
format.The login name to use on the specified remote
SSH server.An SSH tunnel works by creating a
listen socket on localhost on the
specified localport. It then forwards
any connections received on localport via
the SSH connection to the specified
remotehost:remoteport. In the example,
port 5023 on the client is forwarded to
port 23 on the remote machine. Since
port 23 is used by telnet, this
creates an encrypted telnet
session through an SSH tunnel.This method can be used to wrap any number of insecure
TCP protocols such as
SMTP, POP3, and
FTP, as seen in the following
examples.Create a Secure Tunnel for
SMTP&prompt.user; ssh -2 -N -f -L 5025:localhost:25 user@mailserver.example.com
user@mailserver.example.com's password: *****
&prompt.user; telnet localhost 5025
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mailserver.example.com ESMTPThis can be used in conjunction with
ssh-keygen and additional user accounts
to create a more seamless SSH tunneling
environment. Keys can be used in place of typing a
password, and the tunnels can be run as a separate
user.Secure Access of a POP3
ServerIn this example, there is an SSH
server that accepts connections from the outside. On the
same network resides a mail server running a
POP3 server. To check email in a
secure manner, create an SSH connection
to the SSH server and tunnel through to
the mail server:&prompt.user; ssh -2 -N -f -L 2110:mail.example.com:110 user@ssh-server.example.com
user@ssh-server.example.com's password: ******Once the tunnel is up and running, point the email
client to send POP3 requests to
localhost on port 2110. This
connection will be forwarded securely across the tunnel to
mail.example.com.Bypassing a FirewallSome firewalls
filter both incoming and outgoing connections. For
example, a firewall might limit access from remote
machines to ports 22 and 80 to only allow
SSH and web surfing. This prevents
access to any other service which uses a port other than
22 or 80.The solution is to create an SSH
connection to a machine outside of the network's firewall
and use it to tunnel to the desired service:&prompt.user; ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled-system.example.org
user@unfirewalled-system.example.org's password: *******In this example, a streaming Ogg Vorbis client can now
be pointed to localhost port
8888, which will be forwarded over to
music.example.com on port 8000,
successfully bypassing the firewall.Enabling the SSH ServerOpenSSHenablingIn addition to providing built-in SSH
client utilities, a &os; system can be configured as an
SSH server, accepting connections from
other SSH clients.To see if sshd is enabled,
check /etc/rc.conf for this line and add
it if it is missing:sshd_enable="YES"This will start sshd, the
daemon program for OpenSSH, the
next time the system boots. To start it now:&prompt.root; service sshd startThe first time sshd starts on a
&os; system, the system's host keys will be automatically
created and the fingerprint will be displayed on the console.
Provide users with the fingerprint so that they can verify it
the first time they connect to the server.Refer to &man.sshd.8; for the list of available options
when starting sshd and a more
complete discussion about authentication, the login process,
and the various configuration files.It is a good idea to limit which users can log into the
SSH server and from where using the
AllowUsers keyword in the
OpenSSH server configuration file.
For example, to only allow root to log in from
192.168.1.32, add
this line to /etc/ssh/sshd_config:AllowUsers root@192.168.1.32To allow admin
to log in from anywhere, list that user without specifying an
IP address:AllowUsers adminMultiple users should be listed on the same line, like
so:AllowUsers root@192.168.1.32 adminAfter making changes to
/etc/ssh/sshd_config,
tell sshd to reload its
configuration file by running:&prompt.root; service sshd reloadWhen this keyword is used, it is important to list each
user that needs to log into this machine. Any user that is
not specified in that line will be locked out. Also, the
keywords used in the OpenSSH
server configuration file are case-sensitive. If the
keyword is not spelled correctly, including its case, it
will be ignored. Always test changes to this file to make
sure that the edits are working as expected. Refer to
&man.sshd.config.5; to verify the spelling and use of the
available keywords.Do not confuse /etc/ssh/sshd_config
with /etc/ssh/ssh_config (note the
extra d in the first filename). The
first file configures the server and the second file
configures the client. Refer to &man.ssh.config.5; for a
listing of the available client settings,.Access Control ListsTomRhodesContributed
by ACLAccess Control Lists (ACLs) extend the
standard &unix; permission model in a &posix;.1e compatible way.
This permits an administrator to take advantage of a more
fine-grained permissions model.The &os; GENERIC kernel provides
ACL support for UFS file
systems. Users who prefer to compile a custom kernel must
include the following option in their custom kernel
configuration file:options UFS_ACLIf this option is not compiled in, a warning message will be
displayed when attempting to mount a file system with
ACL support. ACLs rely on
extended attributes which are natively supported in
UFS2.This chapter describes how to enable
ACL support and provides some usage
examples.Enabling ACL SupportACLs are enabled by the mount-time
administrative flag, , which may be added
to /etc/fstab. The mount-time flag can
also be automatically set in a persistent manner using
&man.tunefs.8; to modify a superblock ACLs
flag in the file system header. In general, it is preferred
to use the superblock flag for several reasons:The superblock flag cannot be changed by a remount
using as it requires a complete
umount and fresh
mount. This means that
ACLs cannot be enabled on the root file
system after boot. It also means that
ACL support on a file system cannot be
changed while the system is in use.Setting the superblock flag causes the file system to
always be mounted with ACLs enabled,
even if there is not an fstab entry
or if the devices re-order. This prevents accidental
mounting of the file system without ACL
support.It is desirable to discourage accidental mounting
without ACLs enabled because nasty things
can happen if ACLs are enabled, then
disabled, then re-enabled without flushing the extended
attributes. In general, once ACLs are
enabled on a file system, they should not be disabled, as
the resulting file protections may not be compatible with
those intended by the users of the system, and re-enabling
ACLs may re-attach the previous
ACLs to files that have since had their
permissions changed, resulting in unpredictable
behavior.File systems with ACLs enabled will
show a plus (+) sign in their permission
settings:drwx------ 2 robert robert 512 Dec 27 11:54 private
drwxrwx---+ 2 robert robert 512 Dec 23 10:57 directory1
drwxrwx---+ 2 robert robert 512 Dec 22 10:20 directory2
drwxrwx---+ 2 robert robert 512 Dec 27 11:57 directory3
drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_htmlIn this example, directory1,
directory2, and
directory3 are all taking advantage of
ACLs, whereas
public_html is not.Using ACLsFile system ACLs can be viewed using
getfacl. For instance, to view the
ACL settings on
test:&prompt.user; getfacl test
#file:test
#owner:1001
#group:1001
user::rw-
group::r--
other::r--To change the ACL settings on this
file, use setfacl. To remove all of the
currently defined ACLs from a file or file
system, include . However, the preferred
method is to use as it leaves the basic
fields required for ACLs to work.&prompt.user; setfacl -k testTo modify the default ACL entries, use
:&prompt.user; setfacl -m u:trhodes:rwx,group:web:r--,o::--- testIn this example, there were no pre-defined entries, as
they were removed by the previous command. This command
restores the default options and assigns the options listed.
If a user or group is added which does not exist on the
system, an Invalid argument error will
be displayed.Refer to &man.getfacl.1; and &man.setfacl.1; for more
information about the options available for these
commands.Monitoring Third Party Security IssuesTomRhodesContributed
by pkgIn recent years, the security world has made many
improvements to how vulnerability assessment is handled. The
threat of system intrusion increases as third party utilities
are installed and configured for virtually any operating
system available today.Vulnerability assessment is a key factor in security.
While &os; releases advisories for the base system, doing so
for every third party utility is beyond the &os; Project's
capability. There is a way to mitigate third party
vulnerabilities and warn administrators of known security
issues. A &os; add on utility known as
pkg includes options explicitly for
this purpose.pkg polls a database for security
- issues. The database is updated and maintained by the &os; Security
- Team and ports developers.
+ issues. The database is updated and maintained by the &os;
+ Security Team and ports developers.
Please refer to instructions
for installing
pkg.Installation provides &man.periodic.8; configuration files
for maintaining the pkg audit
database, and provides a programmatic method of keeping it
updated. This functionality is enabled if
daily_status_security_pkgaudit_enable
is set to YES in &man.periodic.conf.5;.
Ensure that daily security run emails, which are sent to
root's email account,
are being read.After installation, and to audit third party utilities as
part of the Ports Collection at any time, an administrator may
choose to update the database and view known vulnerabilities
of installed packages by invoking:&prompt.root; pkg audit -Fpkg displays messages
any published vulnerabilities in installed packages:Affected package: cups-base-1.1.22.0_1
Type of problem: cups-base -- HPGL buffer overflow vulnerability.
Reference: <http://www.FreeBSD.org/ports/portaudit/40a3bca2-6809-11d9-a9e7-0001020eed82.html>
1 problem(s) in your installed packages found.
You are advised to update or deinstall the affected package(s) immediately.By pointing a web browser to the displayed
URL, an administrator may obtain more
information about the vulnerability. This will include the
versions affected, by &os; port version, along with other web
sites which may contain security advisories.pkg is a powerful utility
and is extremely useful when coupled with
ports-mgmt/portmaster.&os; Security AdvisoriesTomRhodesContributed
by &os; Security AdvisoriesLike many producers of quality operating systems, the &os;
Project has a security team which is responsible for
determining the End-of-Life (EoL) date for
each &os; release and to provide security updates for supported
releases which have not yet reached their
EoL. More information about the &os;
security team and the supported releases is available on the
&os; security
page.One task of the security team is to respond to reported
security vulnerabilities in the &os; operating system. Once a
vulnerability is confirmed, the security team verifies the steps
necessary to fix the vulnerability and updates the source code
with the fix. It then publishes the details as a
Security Advisory. Security
advisories are published on the &os;
website and mailed to the
&a.security-notifications.name;, &a.security.name;, and
&a.announce.name; mailing lists.This section describes the format of a &os; security
advisory.Format of a Security AdvisoryHere is an example of a &os; security advisory:=============================================================================
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
=============================================================================
FreeBSD-SA-14:04.bind Security Advisory
The FreeBSD Project
Topic: BIND remote denial of service vulnerability
Category: contrib
Module: bind
Announced: 2014-01-14
Credits: ISC
Affects: FreeBSD 8.x and FreeBSD 9.x
Corrected: 2014-01-14 19:38:37 UTC (stable/9, 9.2-STABLE)
2014-01-14 19:42:28 UTC (releng/9.2, 9.2-RELEASE-p3)
2014-01-14 19:42:28 UTC (releng/9.1, 9.1-RELEASE-p10)
2014-01-14 19:38:37 UTC (stable/8, 8.4-STABLE)
2014-01-14 19:42:28 UTC (releng/8.4, 8.4-RELEASE-p7)
2014-01-14 19:42:28 UTC (releng/8.3, 8.3-RELEASE-p14)
CVE Name: CVE-2014-0591
For general information regarding FreeBSD Security Advisories,
including descriptions of the fields above, security branches, and the
following sections, please visit <URL:http://security.FreeBSD.org/>.
I. Background
BIND 9 is an implementation of the Domain Name System (DNS) protocols.
The named(8) daemon is an Internet Domain Name Server.
II. Problem Description
Because of a defect in handling queries for NSEC3-signed zones, BIND can
crash with an "INSIST" failure in name.c when processing queries possessing
certain properties. This issue only affects authoritative nameservers with
at least one NSEC3-signed zone. Recursive-only servers are not at risk.
III. Impact
An attacker who can send a specially crafted query could cause named(8)
to crash, resulting in a denial of service.
IV. Workaround
No workaround is available, but systems not running authoritative DNS service
with at least one NSEC3-signed zone using named(8) are not vulnerable.
V. Solution
Perform one of the following:
1) Upgrade your vulnerable system to a supported FreeBSD stable or
release / security branch (releng) dated after the correction date.
2) To update your vulnerable system via a source code patch:
The following patches have been verified to apply to the applicable
FreeBSD release branches.
a) Download the relevant patch from the location below, and verify the
detached PGP signature using your PGP utility.
[FreeBSD 8.3, 8.4, 9.1, 9.2-RELEASE and 8.4-STABLE]
# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-release.patch
# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-release.patch.asc
# gpg --verify bind-release.patch.asc
[FreeBSD 9.2-STABLE]
# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-stable-9.patch
# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-stable-9.patch.asc
# gpg --verify bind-stable-9.patch.asc
b) Execute the following commands as root:
# cd /usr/src
# patch < /path/to/patch
Recompile the operating system using buildworld and installworld as
described in <URL:http://www.FreeBSD.org/handbook/makeworld.html>.
Restart the applicable daemons, or reboot the system.
3) To update your vulnerable system via a binary patch:
Systems running a RELEASE version of FreeBSD on the i386 or amd64
platforms can be updated via the freebsd-update(8) utility:
# freebsd-update fetch
# freebsd-update install
VI. Correction details
The following list contains the correction revision numbers for each
affected branch.
Branch/path Revision
- -------------------------------------------------------------------------
stable/8/ r260646
releng/8.3/ r260647
releng/8.4/ r260647
stable/9/ r260646
releng/9.1/ r260647
releng/9.2/ r260647
- -------------------------------------------------------------------------
To see which files were modified by a particular revision, run the
following command, replacing NNNNNN with the revision number, on a
machine with Subversion installed:
# svn diff -cNNNNNN --summarize svn://svn.freebsd.org/base
Or visit the following URL, replacing NNNNNN with the revision number:
<URL:http://svnweb.freebsd.org/base?view=revision&revision=NNNNNN>
VII. References
<URL:https://kb.isc.org/article/AA-01078>
<URL:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0591>
The latest revision of this advisory is available at
<URL:http://security.FreeBSD.org/advisories/FreeBSD-SA-14:04.bind.asc>
-----BEGIN PGP SIGNATURE-----
iQIcBAEBCgAGBQJS1ZTYAAoJEO1n7NZdz2rnOvQP/2/68/s9Cu35PmqNtSZVVxVG
ZSQP5EGWx/lramNf9566iKxOrLRMq/h3XWcC4goVd+gZFrvITJSVOWSa7ntDQ7TO
XcinfRZ/iyiJbs/Rg2wLHc/t5oVSyeouyccqODYFbOwOlk35JjOTMUG1YcX+Zasg
ax8RV+7Zt1QSBkMlOz/myBLXUjlTZ3Xg2FXVsfFQW5/g2CjuHpRSFx1bVNX6ysoG
9DT58EQcYxIS8WfkHRbbXKh9I1nSfZ7/Hky/kTafRdRMrjAgbqFgHkYTYsBZeav5
fYWKGQRJulYfeZQ90yMTvlpF42DjCC3uJYamJnwDIu8OhS1WRBI8fQfr9DRzmRua
OK3BK9hUiScDZOJB6OqeVzUTfe7MAA4/UwrDtTYQ+PqAenv1PK8DZqwXyxA9ThHb
zKO3OwuKOVHJnKvpOcr+eNwo7jbnHlis0oBksj/mrq2P9m2ueF9gzCiq5Ri5Syag
Wssb1HUoMGwqU0roS8+pRpNC8YgsWpsttvUWSZ8u6Vj/FLeHpiV3mYXPVMaKRhVm
067BA2uj4Th1JKtGleox+Em0R7OFbCc/9aWC67wiqI6KRyit9pYiF3npph+7D5Eq
7zPsUdDd+qc+UTiLp3liCRp5w6484wWdhZO6wRtmUgxGjNkxFoNnX8CitzF8AaqO
UWWemqWuz3lAZuORQ9KX
=OQzQ
-----END PGP SIGNATURE-----Every security advisory uses the following format:Each security advisory is signed by the
PGP key of the Security Officer. The
public key for the Security Officer can be verified at
.The name of the security advisory always begins with
FreeBSD-SA- (for FreeBSD Security
Advisory), followed by the year in two digit format
(14:), followed by the advisory number
for that year (04.), followed by the
name of the affected application or subsystem
(bind). The advisory shown here is the
fourth advisory for 2014 and it affects
BIND.The Topic field summarizes the
vulnerability.The Category refers to the
affected part of the system which may be one of
core, contrib, or
ports. The core
category means that the vulnerability affects a core
component of the &os; operating system. The
contrib category means that the
vulnerability affects software included with &os;,
such as BIND. The
ports category indicates that the
vulnerability affects software available through the Ports
Collection.The Module field refers to the
component location. In this example, the
bind module is affected; therefore,
this vulnerability affects an application installed with
the operating system.The Announced field reflects the
date the security advisory was published. This means
that the security team has verified that the problem
exists and that a patch has been committed to the &os;
source code repository.The Credits field gives credit to
the individual or organization who noticed the
vulnerability and reported it.The Affects field explains which
releases of &os; are affected by this
vulnerability.The Corrected field indicates the
date, time, time offset, and releases that were
corrected. The section in parentheses shows each branch
for which the fix has been merged, and the version number
of the corresponding release from that branch. The
release identifier itself includes the version number
and, if appropriate, the patch level. The patch level is
the letter p followed by a number,
indicating the sequence number of the patch, allowing
users to track which patches have already been applied to
the system.The CVE Name field lists the
advisory number, if one exists, in the public cve.mitre.org
security vulnerabilities database.The Background field provides a
description of the affected module.The Problem Description field
explains the vulnerability. This can include
information about the flawed code and how the utility
could be maliciously used.The Impact field describes what
type of impact the problem could have on a system.The Workaround field indicates if
a workaround is available to system administrators who
cannot immediately patch the system .The Solution field provides the
instructions for patching the affected system. This is a
step by step tested and verified method for getting a
system patched and working securely.The Correction Details field
displays each affected Subversion branch with the revision
number that contains the corrected code.The References field offers sources
of additional information regarding the
vulnerability.Process AccountingTomRhodesContributed
by Process AccountingProcess accounting is a security method in which an
administrator may keep track of system resources used and
their allocation among users, provide for system monitoring,
and minimally track a user's commands.Process accounting has both positive and negative points.
One of the positives is that an intrusion may be narrowed down
to the point of entry. A negative is the amount of logs
generated by process accounting, and the disk space they may
require. This section walks an administrator through the basics
of process accounting.If more fine-grained accounting is needed, refer to
.Enabling and Utilizing Process AccountingBefore using process accounting, it must be enabled using
the following commands:&prompt.root; touch /var/account/acct
&prompt.root; chmod 600 /var/account/acct
&prompt.root; accton /var/account/acct
&prompt.root; echo 'accounting_enable="YES"' >> /etc/rc.confOnce enabled, accounting will begin to track information
such as CPU statistics and executed
commands. All accounting logs are in a non-human readable
format which can be viewed using sa. If
issued without any options, sa prints
information relating to the number of per-user calls, the
total elapsed time in minutes, total CPU
and user time in minutes, and the average number of
I/O operations. Refer to &man.sa.8; for
the list of available options which control the output.To display the commands issued by users, use
lastcomm. For example, this command
prints out all usage of ls by trhodes on the
ttyp1 terminal:&prompt.root; lastcomm ls trhodes ttyp1Many other useful options exist and are explained in
&man.lastcomm.1;, &man.acct.5;, and &man.sa.8;.Resource LimitsTomRhodesContributed
by Resource limits&os; provides several methods for an administrator to
limit the amount of system resources an individual may use.
Disk quotas limit the amount of disk space available to users.
Quotas are discussed in .quotaslimiting usersquotasdisk quotasLimits to other resources, such as CPU
and memory, can be set using either a flat file or a command to
configure a resource limits database. The traditional method
defines login classes by editing
/etc/login.conf. While this method is
still supported, any changes require a multi-step process of
editing this file, rebuilding the resource database, making
necessary changes to /etc/master.passwd,
and rebuilding the password database. This can become time
consuming, depending upon the number of users to
configure.Beginning with &os; 9.0-RELEASE,
rctl can be used to provide a more
fine-grained method for controlling resource limits. This
command supports more than user limits as it can also be used to
set resource constraints on processes and jails.This section demonstrates both methods for controlling
resources, beginning with the traditional method.Configuring Login Classeslimiting usersaccountslimiting/etc/login.confIn the traditional method, login classes and the resource
limits to apply to a login class are defined in
/etc/login.conf. Each user account can
be assigned to a login class, where default
is the default login class. Each login class has a set of
login capabilities associated with it. A login capability is
a
name=value
pair, where name is a well-known
identifier and value is an
arbitrary string which is processed accordingly depending on
the name.Whenever /etc/login.conf is edited,
the /etc/login.conf.db must be updated
by executing the following command:&prompt.root; cap_mkdb /etc/login.confResource limits differ from the default login capabilities
in two ways. First, for every limit, there is a
soft and hard
limit. A soft limit may be adjusted by the user or
application, but may not be set higher than the hard limit.
The hard limit may be lowered by the user, but can only be
raised by the superuser. Second, most resource limits apply
per process to a specific user. lists the most commonly
used resource limits. All of the available resource limits
and capabilities are described in detail in
&man.login.conf.5;.limiting userscoredumpsizelimiting userscputimelimiting usersfilesizelimiting usersmaxproclimiting usersmemorylockedlimiting usersmemoryuselimiting usersopenfileslimiting userssbsizelimiting usersstacksize
Login Class Resource LimitsResource LimitDescriptioncoredumpsizeThe limit on the size of a core file generated by
a program is subordinate to other limits on disk
usage, such as filesize or disk
quotas. This limit is often used as a less severe
method of controlling disk space consumption. Since
users do not generate core files and often do not
delete them, this setting may save them from running
out of disk space should a large program
crash.cputimeThe maximum amount of CPU time
a user's process may consume. Offending processes
will be killed by the kernel. This is a limit on
CPU time
consumed, not the percentage of the
CPU as displayed in some of the
fields generated by top and
ps.filesizeThe maximum size of a file the user may own.
Unlike disk quotas (), this
limit is enforced on individual files, not the set of
all files a user owns.maxprocThe maximum number of foreground and background
processes a user can run. This limit may not be
larger than the system limit specified by
kern.maxproc. Setting this limit
too small may hinder a user's productivity as some
tasks, such as compiling a large program, start lots
of processes.memorylockedThe maximum amount of memory a process may
request to be locked into main memory using
&man.mlock.2;. Some system-critical programs, such as
&man.amd.8;, lock into main memory so that if the
system begins to swap, they do not contribute to disk
thrashing.memoryuseThe maximum amount of memory a process may
consume at any given time. It includes both core
memory and swap usage. This is not a catch-all limit
for restricting memory consumption, but is a good
start.openfilesThe maximum number of files a process may have
open. In &os;, files are used to represent sockets
and IPC channels, so be careful not
to set this too low. The system-wide limit for this
is defined by
kern.maxfiles.sbsizeThe limit on the amount of network memory a user
may consume. This can be generally used to limit
network communications.stacksizeThe maximum size of a process stack. This alone
is not sufficient to limit the amount of memory a
program may use, so it should be used in conjunction
with other limits.
There are a few other things to remember when setting
resource limits:Processes started at system startup by
/etc/rc are assigned to the
daemon login class.Although the default
/etc/login.conf is a good source of
reasonable values for most limits, they may not be
appropriate for every system. Setting a limit too high
may open the system up to abuse, while setting it too low
may put a strain on productivity.&xorg; takes a lot of
resources and encourages users to run more programs
simultaneously.Many limits apply to individual processes, not the
user as a whole. For example, setting
openfiles to 50
means that each process the user runs may open up to
50 files. The total amount of files a
user may open is the value of openfiles
multiplied by the value of maxproc.
This also applies to memory consumption.For further information on resource limits and login
classes and capabilities in general, refer to
&man.cap.mkdb.1;, &man.getrlimit.2;, and
&man.login.conf.5;.Enabling and Configuring Resource LimitsBy default, kernel support for rctl is
not built-in, meaning that the kernel will first need to be
recompiled using the instructions in . Add these lines to either
GENERIC or a custom kernel configuration
file, then rebuild the kernel:options RACCT
options RCTLOnce the system has rebooted into the new kernel,
rctl may be used to set rules for the
system.Rule syntax is controlled through the use of a subject,
subject-id, resource, and action, as seen in this example
rule:user:trhodes:maxproc:deny=10/userIn this rule, the subject is user, the
subject-id is trhodes, the resource,
maxproc, is the maximum number of
processes, and the action is deny, which
blocks any new processes from being created. This means that
the user, trhodes, will be constrained to
no greater than 10 processes. Other
possible actions include logging to the console, passing a
notification to &man.devd.8;, or sending a sigterm to the
process.Some care must be taken when adding rules. Since this
user is constrained to 10 processes, this
example will prevent the user from performing other tasks
after logging in and executing a
screen session. Once a resource limit has
been hit, an error will be printed, as in this example:&prompt.user; man test
/usr/bin/man: Cannot fork: Resource temporarily unavailable
eval: Cannot fork: Resource temporarily unavailableAs another example, a jail can be prevented from exceeding
a memory limit. This rule could be written as:&prompt.root; rctl -a jail:httpd:memoryuse:deny=2G/jailRules will persist across reboots if they have been added
to /etc/rctl.conf. The format is a rule,
without the preceding command. For example, the previous rule
could be added as:# Block jail from using more than 2G memory:
jail:httpd:memoryuse:deny=2G/jailTo remove a rule, use rctl to remove it
from the list:&prompt.root; rctl -r user:trhodes:maxproc:deny=10/userA method for removing all rules is documented in
&man.rctl.8;. However, if removing all rules for a single
user is required, this command may be issued:&prompt.root; rctl -r user:trhodesMany other resources exist which can be used to exert
additional control over various subjects.
See &man.rctl.8; to learn about them.
Index: head/en_US.ISO8859-1/books/handbook/serialcomms/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/serialcomms/chapter.xml (revision 46820)
+++ head/en_US.ISO8859-1/books/handbook/serialcomms/chapter.xml (revision 46821)
@@ -1,2198 +1,2199 @@
Serial CommunicationsSynopsisserial communications&unix; has always had support for serial communications as
the very first &unix; machines relied on serial lines for user
input and output. Things have changed a lot from the days
when the average terminal consisted of a 10-character-per-second
serial printer and a keyboard. This chapter covers some of the
ways serial communications can be used on &os;.After reading this chapter, you will know:How to connect terminals to a &os; system.How to use a modem to dial out to remote hosts.How to allow remote users to login to a &os; system
with a modem.How to boot a &os; system from a serial console.Before reading this chapter, you should:Know how to configure and
install a custom kernel.Understand &os; permissions
and processes.Have access to the technical manual for the serial
hardware to be used with &os;.Serial Terminology and HardwareThe following terms are often used in serial
communications:bpsBits per
Secondbits-per-second
(bps) is the rate at which data is
transmitted.DTEData Terminal
EquipmentDTE
(DTE) is one of two endpoints in a
serial communication. An example would be a
computer.DCEData Communications
EquipmentDCE
(DTE) is the other endpoint in a
serial communication. Typically, it is a modem or serial
terminal.RS-232The original standard which defined hardware serial
communications. It has since been renamed to
TIA-232.When referring to communication data rates, this section
does not use the term baud. Baud refers
to the number of electrical state transitions made in a period
of time, while bps is the correct term to
use.To connect a serial terminal to a &os; system, a serial port
on the computer and the proper cable to connect to the serial
device are needed. Users who are already familiar with serial
hardware and cabling can safely skip this section.Serial Cables and PortsThere are several different kinds of serial cables. The
two most common types are null-modem cables and standard
RS-232 cables. The documentation for the
hardware should describe the type of cable required.These two types of cables differ in how the wires are
connected to the connector. Each wire represents a signal,
with the defined signals summarized in . A standard serial
cable passes all of the RS-232C signals
straight through. For example, the Transmitted
Data pin on one end of the cable goes to the
Transmitted Data pin on the other end. This is
the type of cable used to connect a modem to the &os; system,
and is also appropriate for some terminals.A null-modem cable switches the Transmitted
Data pin of the connector on one end with the
Received Data pin on the other end. The
connector can be either a DB-25 or a
DB-9.A null-modem cable can be constructed using the pin
connections summarized in ,
, and . While the standard calls for
a straight-through pin 1 to pin 1 Protective
Ground line, it is often omitted. Some terminals
work using only pins 2, 3, and 7, while others require
different configurations. When in doubt, refer to the
documentation for the hardware.null-modem cable
RS-232C Signal NamesAcronymsNamesRDReceived DataTDTransmitted DataDTRData Terminal ReadyDSRData Set ReadyDCDData Carrier DetectSGSignal GroundRTSRequest to SendCTSClear to Send
When one pin at one end connects to a pair of pins at
the other end, it is usually implemented with one short wire
between the pair of pins in their connector and a long wire
to the other single pin.Serial ports are the devices through which data is
transferred between the &os; host computer and the terminal.
Several kinds of serial ports exist. Before purchasing or
constructing a cable, make sure it will fit the ports on the
terminal and on the &os; system.Most terminals have DB-25 ports.
Personal computers may have DB-25 or
DB-9 ports. A multiport serial card may
have RJ-12 or RJ-45/
ports. See the documentation that accompanied the hardware
for specifications on the kind of port or visually verify the
type of port.In &os;, each serial port is accessed through an entry in
/dev. There are two different kinds of
entries:Call-in ports are named
/dev/ttyuN
where N is the port number,
starting from zero. If a terminal is connected to the
first serial port (COM1), use
/dev/ttyu0 to refer to the terminal.
If the terminal is on the second serial port
(COM2), use
/dev/ttyu1, and so forth. Generally,
the call-in port is used for terminals. Call-in ports
require that the serial line assert the Data
Carrier Detect signal to work correctly.Call-out ports are named
/dev/cuauN
on &os; versions 10.x and higher and
/dev/cuadN
on &os; versions 9.x and lower. Call-out ports are
usually not used for terminals, but are used for modems.
The call-out port can be used if the serial cable or the
terminal does not support the Data Carrier
Detect signal.&os; also provides initialization devices
(/dev/ttyuN.init
and
/dev/cuauN.init
or
/dev/cuadN.init)
and locking devices
(/dev/ttyuN.lock
and
/dev/cuauN.lock
or
/dev/cuadN.lock).
The initialization devices are used to initialize
communications port parameters each time a port is opened,
such as crtscts for modems which use
RTS/CTS signaling for flow control. The
locking devices are used to lock flags on ports to prevent
users or programs changing certain parameters. Refer to
&man.termios.4;, &man.sio.4;, and &man.stty.1; for information
on terminal settings, locking and initializing devices, and
setting terminal options, respectively.Serial Port ConfigurationBy default, &os; supports four serial ports which are
commonly known as COM1,
COM2, COM3, and
COM4. &os; also supports dumb multi-port
serial interface cards, such as the BocaBoard 1008 and 2016,
as well as more intelligent multi-port cards such as those
made by Digiboard. However, the default kernel only looks for
the standard COM ports.To see if the system recognizes the serial ports, look for
system boot messages that start with
uart:&prompt.root; grep uart /var/run/dmesg.bootIf the system does not recognize all of the needed serial
ports, additional entries can be added to
/boot/device.hints. This file already
contains hint.uart.0.* entries for
COM1 and hint.uart.1.*
entries for COM2. When adding a port
entry for COM3 use
0x3E8, and for COM4
use 0x2E8. Common IRQ
addresses are 5 for
COM3 and 9 for
COM4.ttyucuauTo determine the default set of terminal
I/O settings used by the port, specify its
device name. This example determines the settings for the
call-in port on COM2:&prompt.root; stty -a -f /dev/ttyu1System-wide initialization of serial devices is controlled
by /etc/rc.d/serial. This file affects
the default settings of serial devices. To change the
settings for a device, use stty. By
default, the changed settings are in effect until the device
is closed and when the device is reopened, it goes back to the
default set. To permanently change the default set, open and
adjust the settings of the initialization device. For
example, to turn on mode, 8 bit
communication, and flow control for
ttyu5, type:&prompt.root; stty -f /dev/ttyu5.init clocal cs8 ixon ixoffrc filesrc.serialTo prevent certain settings from being changed by an
application, make adjustments to the locking device. For
example, to lock the speed of ttyu5 to
57600 bps, type:&prompt.root; stty -f /dev/ttyu5.lock 57600Now, any application that opens ttyu5
and tries to change the speed of the port will be stuck with
57600 bps.TerminalsSeanKellyContributed by terminalsTerminals provide a convenient and low-cost way to access
a &os; system when not at the computer's console or on a
connected network. This section describes how to use terminals
with &os;.The original &unix; systems did not have consoles. Instead,
users logged in and ran programs through terminals that were
connected to the computer's serial ports.The ability to establish a login session on a serial port
still exists in nearly every &unix;-like operating system
today, including &os;. By using a terminal attached to an
unused serial port, a user can log in and run any text program
that can normally be run on the console or in an
xterm window.Many terminals can be attached to a &os; system. An older
spare computer can be used as a terminal wired into a more
powerful computer running &os;. This can turn what might
otherwise be a single-user computer into a powerful
multiple-user system.&os; supports three types of terminals:Dumb terminalsDumb terminals are specialized hardware that connect
to computers over serial lines. They are called
dumb because they have only enough
computational power to display, send, and receive text.
No programs can be run on these devices. Instead, dumb
terminals connect to a computer that runs the needed
programs.There are hundreds of kinds of dumb terminals made by
many manufacturers, and just about any kind will work with
&os;. Some high-end terminals can even display graphics,
but only certain software packages can take advantage of
these advanced features.Dumb terminals are popular in work environments where
workers do not need access to graphical
applications.Computers Acting as TerminalsSince a dumb terminal has just enough ability to
display, send, and receive text, any spare computer can
be a dumb terminal. All that is needed is the proper
cable and some terminal emulation
software to run on the computer.This configuration can be useful. For example, if one
user is busy working at the &os; system's console, another
user can do some text-only work at the same time from a
less powerful personal computer hooked up as a terminal to
the &os; system.There are at least two utilities in the base-system of
&os; that can be used to work through a serial connection:
&man.cu.1; and &man.tip.1;.For example, to connect from a client system that runs
&os; to the serial connection of another system:&prompt.root; cu -l serial-port-deviceReplace serial-port-device
with the device name of the connected serial port. These
device files are called
/dev/cuauN
on &os; versions 10.x and higher and
/dev/cuadN
on &os; versions 9.x and lower. In either case,
N is the serial port number,
starting from zero. This means that
COM1 is
/dev/cuau0 or
/dev/cuad0 in &os;.Additional programs are available through the Ports
Collection, such as
comms/minicom.X TerminalsX terminals are the most sophisticated kind of
terminal available. Instead of connecting to a serial
port, they usually connect to a network like Ethernet.
Instead of being relegated to text-only applications, they
can display any &xorg;
application.This chapter does not cover the setup, configuration,
or use of X terminals.Terminal ConfigurationThis section describes how to configure a &os; system to
enable a login session on a serial terminal. It assumes that
the system recognizes the serial port to which the terminal is
connected and that the terminal is connected with the correct
cable.In &os;, init reads
/etc/ttys and starts a
getty process on the available terminals.
The getty process is responsible for
reading a login name and starting the login
program. The ports on the &os; system which allow logins are
listed in /etc/ttys. For example, the
first virtual console, ttyv0, has an
entry in this file, allowing logins on the console. This file
also contains entries for the other virtual consoles, serial
ports, and pseudo-ttys. For a hardwired terminal, the serial
port's /dev entry is listed without the
/dev part. For example,
/dev/ttyv0 is listed as
ttyv0.The default /etc/ttys configures
support for the first four serial ports,
ttyu0 through
ttyu3:ttyu0 "/usr/libexec/getty std.9600" dialup off secure
ttyu1 "/usr/libexec/getty std.9600" dialup off secure
ttyu2 "/usr/libexec/getty std.9600" dialup off secure
ttyu3 "/usr/libexec/getty std.9600" dialup off secureWhen attaching a terminal to one of those ports, modify
the default entry to set the required speed and terminal type,
to turn the device on and, if needed, to
change the port's secure setting. If the
terminal is connected to another port, add an entry for the
port. configures two terminals in
/etc/ttys. The first entry configures a
Wyse-50 connected to COM2. The second
entry configures an old computer running
Procomm terminal software emulating
a VT-100 terminal. The computer is connected to the sixth
serial port on a multi-port serial card.Configuring Terminal Entriesttyu1 "/usr/libexec/getty std.38400" wy50 on insecure
ttyu5 "/usr/libexec/getty std.19200" vt100 on insecureThe first field specifies the device name of the
serial terminal.The second field tells getty to
initialize and open the line, set the line speed, prompt
for a user name, and then execute the
login program. The optional
getty type configures
characteristics on the terminal line, like
bps rate and parity. The available
getty types are listed in
/etc/gettytab. In almost all
cases, the getty types that start with
std will work for hardwired terminals
as these entries ignore parity. There is a
std entry for each
bps rate from 110 to 115200. Refer
to &man.gettytab.5; for more information.When setting the getty type, make sure to match the
communications settings used by the terminal. For this
example, the Wyse-50 uses no parity and connects at
38400 bps. The computer uses no parity and
connects at 19200 bps.The third field is the type of terminal. For
dial-up ports, unknown or
dialup is typically used since users
may dial up with practically any type of terminal or
software. Since the terminal type does not change for
hardwired terminals, a real terminal type from
/etc/termcap can be specified. For
this example, the Wyse-50 uses the real terminal type
while the computer running
Procomm is set to emulate a
VT-100.The fourth field specifies if the port should be
enabled. To enable logins on this port, this field must
be set to on.The final field is used to specify whether the port
is secure. Marking a port as secure
means that it is trusted enough to allow root to login from that
port. Insecure ports do not allow root logins. On an
insecure port, users must login from unprivileged
accounts and then use su or a similar
mechanism to gain superuser privileges, as described in
. For security
reasons, it is recommended to change this setting to
insecure.After making any changes to
/etc/ttys, send a SIGHUP (hangup) signal
to the init process to force it to re-read
its configuration file:&prompt.root; kill -HUP 1Since init is always the first process
run on a system, it always has a process ID
of 1.If everything is set up correctly, all cables are in
place, and the terminals are powered up, a
getty process should now be running on each
terminal and login prompts should be available on each
terminal.Troubleshooting the ConnectionEven with the most meticulous attention to detail,
something could still go wrong while setting up a terminal.
Here is a list of common symptoms and some suggested
fixes.If no login prompt appears, make sure the terminal is
plugged in and powered up. If it is a personal computer
acting as a terminal, make sure it is running terminal
emulation software on the correct serial port.Make sure the cable is connected firmly to both the
terminal and the &os; computer. Make sure it is the right
kind of cable.Make sure the terminal and &os; agree on the
bps rate and parity settings. For a video
display terminal, make sure the contrast and brightness
controls are turned up. If it is a printing terminal, make
sure paper and ink are in good supply.Use ps to make sure that a
getty process is running and serving the
terminal. For example, the following listing shows that a
getty is running on the second serial port,
ttyu1, and is using the
std.38400 entry in
/etc/gettytab:&prompt.root; ps -axww|grep ttyu
22189 d1 Is+ 0:00.03 /usr/libexec/getty std.38400 ttyu1If no getty process is running, make
sure the port is enabled in /etc/ttys.
Remember to run kill -HUP 1 after modifying
/etc/ttys.If the getty process is running but the
terminal still does not display a login prompt, or if it
displays a prompt but will not accept typed input, the
terminal or cable may not support hardware handshaking. Try
changing the entry in /etc/ttys from
std.38400 to
3wire.38400, then run kill -HUP
1 after modifying /etc/ttys.
The 3wire entry is similar to
std, but ignores hardware handshaking. The
baud rate may need to be reduced or software flow control
enabled when using 3wire to prevent buffer
overflows.If garbage appears instead of a login prompt, make sure
the terminal and &os; agree on the bps rate
and parity settings. Check the getty
processes to make sure the correct
getty type is in use. If not, edit
/etc/ttys and run kill
-HUP 1.If characters appear doubled and the password appears when
typed, switch the terminal, or the terminal emulation
software, from half duplex or local
echo to full duplex.Dial-in ServiceGuyHelmerContributed by SeanKellyAdditions by dial-in serviceConfiguring a &os; system for dial-in service is similar to
configuring terminals, except that modems are used instead of
terminal devices. &os; supports both external and internal
modems.External modems are more convenient because they often can
be configured via parameters stored in non-volatile
RAM and they usually provide lighted
indicators that display the state of important
RS-232 signals, indicating whether the modem
is operating properly.Internal modems usually lack non-volatile
RAM, so their configuration may be limited to
setting DIP switches. If the internal modem
has any signal indicator lights, they are difficult to view when
the system's cover is in place.modemWhen using an external modem, a proper cable is needed. A
standard RS-232C serial cable should
suffice.&os; needs the RTS and
CTS signals for flow control at speeds above
2400 bps, the CD signal to detect when a
call has been answered or the line has been hung up, and the
DTR signal to reset the modem after a session
is complete. Some cables are wired without all of the needed
signals, so if a login session does not go away when the line
hangs up, there may be a problem with the cable. Refer to for more information about these
signals.Like other &unix;-like operating systems, &os; uses the
hardware signals to find out when a call has been answered or a
line has been hung up and to hangup and reset the modem after a
call. &os; avoids sending commands to the modem or watching for
status reports from the modem.&os; supports the NS8250,
NS16450, NS16550, and
NS16550A-based RS-232C
(CCITT V.24) communications interfaces. The
8250 and 16450 devices have single-character buffers. The 16550
device provides a 16-character buffer, which allows for better
system performance. Bugs in plain 16550 devices prevent the use
of the 16-character buffer, so use 16550A devices if possible.
Because single-character-buffer devices require more work by the
operating system than the 16-character-buffer devices,
16550A-based serial interface cards are preferred. If the
system has many active serial ports or will have a heavy load,
16550A-based cards are better for low-error-rate
communications.The rest of this section demonstrates how to configure a
modem to receive incoming connections, how to communicate with
the modem, and offers some troubleshooting tips.Modem ConfigurationgettyAs with terminals, init spawns a
getty process for each configured serial
port used for dial-in connections. When a user dials the
modem's line and the modems connect, the Carrier
Detect signal is reported by the modem. The kernel
notices that the carrier has been detected and instructs
getty to open the port and display a
login: prompt at the specified initial line
speed. In a typical configuration, if garbage characters are
received, usually due to the modem's connection speed being
different than the configured speed, getty
tries adjusting the line speeds until it receives reasonable
characters. After the user enters their login name,
getty executes login,
which completes the login process by asking for the user's
password and then starting the user's shell./usr/bin/loginThere are two schools of thought regarding dial-up modems.
One confiuration method is to set the modems and systems so
that no matter at what speed a remote user dials in, the
dial-in RS-232 interface runs at a locked
speed. The benefit of this configuration is that the remote
user always sees a system login prompt immediately. The
downside is that the system does not know what a user's true
data rate is, so full-screen programs like
Emacs will not adjust their
screen-painting methods to make their response better for
slower connections.The second method is to configure the
RS-232 interface to vary its speed based on
the remote user's connection speed. Because
getty does not understand any particular
modem's connection speed reporting, it gives a
login: message at an initial speed and
watches the characters that come back in response. If the
user sees junk, they should press Enter until
they see a recognizable prompt. If the data rates do not
match, getty sees anything the user types
as junk, tries the next speed, and gives the
login: prompt again. This procedure normally
only takes a keystroke or two before the user sees a good
prompt. This login sequence does not look as clean as the
locked-speed method, but a user on a low-speed connection
should receive better interactive response from full-screen
programs.When locking a modem's data communications rate at a
particular speed, no changes to
/etc/gettytab should be needed. However,
for a matching-speed configuration, additional entries may be
required in order to define the speeds to use for the modem.
This example configures a 14.4 Kbps modem with a top
interface speed of 19.2 Kbps using 8-bit, no parity
connections. It configures getty to start
the communications rate for a V.32bis connection at
19.2 Kbps, then cycles through 9600 bps,
2400 bps, 1200 bps, 300 bps, and back to
19.2 Kbps. Communications rate cycling is implemented
with the nx= (next table) capability. Each
line uses a tc= (table continuation) entry
to pick up the rest of the settings for a particular data
rate.#
# Additions for a V.32bis Modem
#
um|V300|High Speed Modem at 300,8-bit:\
:nx=V19200:tc=std.300:
un|V1200|High Speed Modem at 1200,8-bit:\
:nx=V300:tc=std.1200:
uo|V2400|High Speed Modem at 2400,8-bit:\
:nx=V1200:tc=std.2400:
up|V9600|High Speed Modem at 9600,8-bit:\
:nx=V2400:tc=std.9600:
uq|V19200|High Speed Modem at 19200,8-bit:\
:nx=V9600:tc=std.19200:For a 28.8 Kbps modem, or to take advantage of
compression on a 14.4 Kbps modem, use a higher
communications rate, as seen in this example:#
# Additions for a V.32bis or V.34 Modem
# Starting at 57.6 Kbps
#
vm|VH300|Very High Speed Modem at 300,8-bit:\
:nx=VH57600:tc=std.300:
vn|VH1200|Very High Speed Modem at 1200,8-bit:\
:nx=VH300:tc=std.1200:
vo|VH2400|Very High Speed Modem at 2400,8-bit:\
:nx=VH1200:tc=std.2400:
vp|VH9600|Very High Speed Modem at 9600,8-bit:\
:nx=VH2400:tc=std.9600:
vq|VH57600|Very High Speed Modem at 57600,8-bit:\
:nx=VH9600:tc=std.57600:For a slow CPU or a heavily loaded
system without 16550A-based serial ports, this configuration
may produce siosilo errors at 57.6 Kbps./etc/ttysThe configuration of /etc/ttys is
similar to , but a different
argument is passed to getty and
dialup is used for the terminal type.
Replace xxx with the process
init will run on the device:ttyu0 "/usr/libexec/getty xxx" dialup onThe dialup terminal type can be
changed. For example, setting vt102 as the
default terminal type allows users to use
VT102 emulation on their remote
systems.For a locked-speed configuration, specify the speed with
a valid type listed in /etc/gettytab.
This example is for a modem whose port speed is locked at
19.2 Kbps:ttyu0 "/usr/libexec/getty std.19200" dialup onIn a matching-speed configuration, the entry needs to
reference the appropriate beginning auto-baud
entry in /etc/gettytab. To continue the
example for a matching-speed modem that starts at
19.2 Kbps, use this entry:ttyu0 "/usr/libexec/getty V19200" dialup onAfter editing /etc/ttys, wait until
the modem is properly configured and connected before
signaling init:&prompt.root; kill -HUP 1rc filesrc.serialHigh-speed modems, like V.32,
V.32bis, and V.34
modems, use hardware (RTS/CTS) flow
control. Use stty to set the hardware flow
control flag for the modem port. This example sets the
crtscts flag on COM2's
dial-in and dial-out initialization devices:&prompt.root; stty -f /dev/ttyu1.init crtscts
&prompt.root; stty -f /dev/cuau1.init crtsctsTroubleshootingThis section provides a few tips for troubleshooting a
dial-up modem that will not connect to a &os; system.Hook up the modem to the &os; system and boot the system.
If the modem has status indication lights, watch to see
whether the modem's DTR indicator lights
when the login: prompt appears on the
system's console. If it lights up, that should mean that &os;
has started a getty process on the
appropriate communications port and is waiting for the modem
to accept a call.If the DTR indicator does not light,
login to the &os; system through the console and type
ps ax to see if &os; is running a
getty process on the correct port: 114 ?? I 0:00.10 /usr/libexec/getty V19200 ttyu0If the second column contains a d0
instead of a ?? and the modem has not
accepted a call yet, this means that getty
has completed its open on the communications port. This could
indicate a problem with the cabling or a misconfigured modem
because getty should not be able to open
the communications port until the carrier detect signal has
been asserted by the modem.If no getty processes are waiting to
open the port, double-check that the entry for the port is
correct in /etc/ttys. Also, check
/var/log/messages to see if there are
any log messages from init or
getty.Next, try dialing into the system. Be sure to use 8 bits,
no parity, and 1 stop bit on the remote system. If a prompt
does not appear right away, or the prompt shows garbage, try
pressing Enter about once per second. If
there is still no login: prompt,
try sending a BREAK. When using a
high-speed modem, try dialing again after locking the
dialing modem's interface speed.If there is still no login: prompt, check
/etc/gettytab again and double-check
that:The initial capability name specified in the entry in
/etc/ttys matches the name of a
capability in /etc/gettytab.Each nx= entry matches another
gettytab capability name.Each tc= entry matches another
gettytab capability name.If the modem on the &os; system will not answer, make
sure that the modem is configured to answer the phone when
DTR is asserted. If the modem seems to be
configured correctly, verify that the
DTR line is asserted by checking the
modem's indicator lights.If it still does not work, try sending an email
to the &a.questions; describing the modem and the
problem.Dial-out Servicedial-out serviceThe following are tips for getting the host to connect over
the modem to another computer. This is appropriate for
establishing a terminal session with a remote host.This kind of connection can be helpful to get a file on the
Internet if there are problems using PPP. If PPP is not
working, use the terminal session to FTP the needed file. Then
use zmodem to transfer it to the machine.Using a Stock Hayes ModemA generic Hayes dialer is built into
tip. Use at=hayes in
/etc/remote.The Hayes driver is not smart enough to recognize some of
the advanced features of newer modems messages like
BUSY, NO DIALTONE, or
CONNECT 115200. Turn those messages off
when using tip with
ATX0&W.The dial timeout for tip is 60
seconds. The modem should use something less, or else
tip will think there is a communication
problem. Try ATS7=45&W.Using AT Commands/etc/remoteCreate a direct entry in
/etc/remote. For example, if the modem
is hooked up to the first serial port,
/dev/cuau0, use the following
line:cuau0:dv=/dev/cuau0:br#19200:pa=noneUse the highest bps rate the modem
supports in the br capability. Then, type
tip cuau0 to connect to the modem.Or, use cu as root with the following
command:&prompt.root; cu -lline -sspeedline is the serial port, such
as /dev/cuau0, and
speed is the speed, such as
57600. When finished entering the AT
commands, type ~. to exit.The @ Sign Does Not WorkThe @ sign in the phone number
capability tells tip to look in
/etc/phones for a phone number. But, the
@ sign is also a special character in
capability files like /etc/remote, so it
needs to be escaped with a backslash:pn=\@Dialing from the Command LinePut a generic entry in
/etc/remote. For example:tip115200|Dial any phone number at 115200 bps:\
:dv=/dev/cuau0:br#115200:at=hayes:pa=none:du:
tip57600|Dial any phone number at 57600 bps:\
:dv=/dev/cuau0:br#57600:at=hayes:pa=none:du:This should now work:&prompt.root; tip -115200 5551234Users who prefer cu over
tip, can use a generic
cu entry:cu115200|Use cu to dial any number at 115200bps:\
:dv=/dev/cuau1:br#57600:at=hayes:pa=none:du:and type:&prompt.root; cu 5551234 -s 115200Setting the bps RatePut in an entry for tip1200 or
cu1200, but go ahead and use whatever
bps rate is appropriate with the
br capability.
tip thinks a good default is 1200 bps
which is why it looks for a tip1200 entry.
1200 bps does not have to be used, though.Accessing a Number of Hosts Through a Terminal
ServerRather than waiting until connected and typing
CONNECT host
each time, use tip's cm
capability. For example, these entries in
/etc/remote will let you type
tip pain or tip muffin
to connect to the hosts pain or
muffin, and tip
deep13 to connect to the terminal server.pain|pain.deep13.com|Forrester's machine:\
:cm=CONNECT pain\n:tc=deep13:
muffin|muffin.deep13.com|Frank's machine:\
:cm=CONNECT muffin\n:tc=deep13:
deep13:Gizmonics Institute terminal server:\
:dv=/dev/cuau2:br#38400:at=hayes:du:pa=none:pn=5551234:Using More Than One Line with
tipThis is often a problem where a university has several
modem lines and several thousand students trying to use
them.Make an entry in /etc/remote and use
@ for the pn
capability:big-university:\
:pn=\@:tc=dialout
dialout:\
:dv=/dev/cuau3:br#9600:at=courier:du:pa=none:Then, list the phone numbers in
/etc/phones:big-university 5551111
big-university 5551112
big-university 5551113
big-university 5551114tip will try each number in the listed
order, then give up. To keep retrying, run
tip in a while
loop.Using the Force CharacterCtrlP is the default force character,
used to tell tip that the next character is
literal data. The force character can be set to any other
character with the ~s escape, which means
set a variable.Type
~sforce=single-char
followed by a newline. single-char
is any single character. If
single-char is left out, then the
force character is the null character, which is accessed by
typing
Ctrl2
or CtrlSpace. A pretty good value for
single-char is
ShiftCtrl6, which is only used on some terminal
servers.To change the force character, specify the following in
~/.tiprc:force=single-charUpper Case CharactersThis happens when
CtrlA is pressed, which is tip's
raise character, specially designed for people
with broken caps-lock keys. Use ~s to set
raisechar to something reasonable. It can
be set to be the same as the force character, if neither
feature is used.Here is a sample ~/.tiprc for
Emacs users who need to type
Ctrl2 and CtrlA:force=^^
raisechar=^^The ^^ is
ShiftCtrl6.File Transfers with tipWhen talking to another &unix;-like operating system,
files can be sent and received using ~p
(put) and ~t (take). These commands run
cat and echo on the
remote system to accept and send files. The syntax is:~plocal-fileremote-file~tremote-filelocal-fileThere is no error checking, so another protocol, like
zmodem, should probably be used.Using zmodem with
tip?To receive files, start the sending program on the remote
end. Then, type ~C rz to begin receiving
them locally.To send files, start the receiving program on the remote
end. Then, type ~C sz
files to send them to the
remote system.Setting Up the Serial ConsoleKazutakaYOKOTAContributed by BillPaulBased on a document by serial console&os; has the ability to boot a system with a dumb
terminal on a serial port as a console. This configuration is
useful for system administrators who wish to install &os; on
machines that have no keyboard or monitor attached, and
developers who want to debug the kernel or device
drivers.As described in , &os; employs a three
stage bootstrap. The first two stages are in the boot block
code which is stored at the beginning of the &os; slice on the
boot disk. The boot block then loads and runs the boot loader
as the third stage code.In order to set up booting from a serial console, the boot
block code, the boot loader code, and the kernel need to be
configured.Quick Serial Console ConfigurationThis section provides a fast overview of setting up the
serial console. This procedure can be used when the dumb
terminal is connected to COM1.Configuring a Serial Console on
COM1Connect the serial cable to
COM1 and the controlling
terminal.To configure boot messages to display on the serial
console, issue the following command as the
superuser:&prompt.root; echo 'console="comconsole"' >> /boot/loader.confEdit /etc/ttys and change
off to on and
dialup to vt100 for
the ttyu0 entry. Otherwise, a
password will not be required to connect via the serial
console, resulting in a potential security hole.Reboot the system to see if the changes took
effect.If a different configuration is required, see the next
section for a more in-depth configuration explanation.In-Depth Serial Console ConfigurationThis section provides a more detailed explanation of the
steps needed to setup a serial console in &os;.Configuring a Serial ConsolePrepare a serial cable.null-modem cableUse either a null-modem cable or a standard serial
cable and a null-modem adapter. See for a discussion on serial
cables.Unplug the keyboard.Many systems probe for the keyboard during the
Power-On Self-Test (POST) and will
generate an error if the keyboard is not detected. Some
machines will refuse to boot until the keyboard is plugged
in.If the computer complains about the error, but boots
anyway, no further configuration is needed.If the computer refuses to boot without a keyboard
attached, configure the BIOS so that it
ignores this error. Consult the motherboard's manual for
details on how to do this.Try setting the keyboard to Not
installed in the BIOS.
This setting tells the BIOS not to
probe for a keyboard at power-on so it should not
complain if the keyboard is absent. If that option is
not present in the BIOS, look for an
Halt on Error option instead. Setting
this to All but Keyboard or to No
Errors will have the same effect.If the system has a &ps2; mouse, unplug it as well.
&ps2; mice share some hardware with the keyboard and
leaving the mouse plugged in can fool the keyboard probe
into thinking the keyboard is still there.While most systems will boot without a keyboard,
quite a few will not boot without a graphics adapter.
Some systems can be configured to boot with no graphics
adapter by changing the graphics adapter
setting in the BIOS configuration to
Not installed. Other systems do not
support this option and will refuse to boot if there is
no display hardware in the system. With these machines,
leave some kind of graphics card plugged in, even if it
is just a junky mono board. A monitor does not need to
be attached.Plug a dumb terminal, an old computer with a modem
program, or the serial port on another &unix; box into the
serial port.Add the appropriate hint.sio.*
entries to /boot/device.hints for the
serial port. Some multi-port cards also require kernel
configuration options. Refer to &man.sio.4; for the
required options and device hints for each supported
serial port.Create boot.config in the root
directory of the a partition on the
boot drive.This file instructs the boot block code how to boot
the system. In order to activate the serial console, one
or more of the following options are needed. When using
multiple options, include them all on the same
line:Toggles between the internal and serial
consoles. Use this to switch console devices. For
instance, to boot from the internal (video) console,
use to direct the boot loader
and the kernel to use the serial port as its console
device. Alternatively, to boot from the serial
port, use to tell the boot
loader and the kernel to use the video display as
the console instead.Toggles between the single and dual console
configurations. In the single configuration, the
console will be either the internal console (video
display) or the serial port, depending on the state
of . In the dual console
configuration, both the video display and the
serial port will become the console at the same
time, regardless of the state of
. However, the dual console
configuration takes effect only while the boot
block is running. Once the boot loader gets
control, the console specified by
becomes the only
console.Makes the boot block probe the keyboard. If no
keyboard is found, the and
options are automatically
set.Due to space constraints in the current
version of the boot blocks, is
capable of detecting extended keyboards only.
Keyboards with less than 101 keys and without F11
and F12 keys may not be detected. Keyboards on
some laptops may not be properly found because of
this limitation. If this is the case, do not use
.Use either to select the console
automatically or to activate the
serial console. Refer to &man.boot.8; and
&man.boot.config.5; for more details.The options, except for , are
passed to the boot loader. The boot loader will
determine whether the internal video or the serial port
should become the console by examining the state of
. This means that if
is specified but
is not specified in /boot.config, the
serial port can be used as the console only during the
boot block as the boot loader will use the internal video
display as the console.Boot the machine.When &os; starts, the boot blocks echo the contents of
/boot.config to the console. For
example:/boot.config: -P
Keyboard: noThe second line appears only if is
in /boot.config and indicates the
presence or absence of the keyboard. These messages go
to either the serial or internal console, or both,
depending on the option in
/boot.config:OptionsMessage goes tononeinternal consoleserial consoleserial and internal consolesserial and internal consoles, keyboard presentinternal console, keyboard absentserial consoleAfter the message, there will be a small pause before
the boot blocks continue loading the boot loader and
before any further messages are printed to the console.
Under normal circumstances, there is no need to interrupt
the boot blocks, but one can do so in order to make sure
things are set up correctly.Press any key, other than Enter, at
the console to interrupt the boot process. The boot
blocks will then prompt for further action:>> FreeBSD/i386 BOOT
Default: 0:ad(0,a)/boot/loader
boot:Verify that the above message appears on either the
serial or internal console, or both, according to the
options in /boot.config. If the
message appears in the correct console, press
Enter to continue the boot
process.If there is no prompt on the serial terminal,
something is wrong with the settings. Enter
then Enter or
Return to tell the boot block (and then
the boot loader and the kernel) to choose the serial port
for the console. Once the system is up, go back and check
what went wrong.During the third stage of the boot process, one can still
switch between the internal console and the serial console by
setting appropriate environment variables in the boot loader.
See &man.loader.8; for more
information.This line in /boot/loader.conf or
/boot/loader.conf.local configures the
boot loader and the kernel to send their boot messages to
the serial console, regardless of the options in
/boot.config:console="comconsole"That line should be the first line of
/boot/loader.conf so that boot messages
are displayed on the serial console as early as
possible.If that line does not exist, or if it is set to
console="vidconsole", the boot loader and
the kernel will use whichever console is indicated by
in the boot block. See
&man.loader.conf.5; for more information.At the moment, the boot loader has no option
equivalent to in the boot block, and
there is no provision to automatically select the internal
console and the serial console based on the presence of the
keyboard.While it is not required, it is possible to provide a
login prompt over the serial line. To
configure this, edit the entry for the serial port in
/etc/ttys using the instructions in
. If the speed of the serial
port has been changed, change std.9600 to
match the new setting.Setting a Faster Serial Port SpeedBy default, the serial port settings are 9600 baud, 8
bits, no parity, and 1 stop bit. To change the default
console speed, use one of the following options:Edit /etc/make.conf and set
BOOT_COMCONSOLE_SPEED to the new
console speed. Then, recompile and install the boot
blocks and the boot loader:&prompt.root; cd /sys/boot
&prompt.root; make clean
&prompt.root; make
&prompt.root; make installIf the serial console is configured in some other way
than by booting with , or if the serial
console used by the kernel is different from the one used
by the boot blocks, add the following option, with the
desired speed, to a custom kernel configuration file and
compile a new kernel:options CONSPEED=19200
- Add the boot option to
- /boot.config, replacing
+ Add the
+ boot
+ option to /boot.config, replacing
19200 with the speed to
use.Add the following options to
/boot/loader.conf. Replace
115200 with the speed to
use.boot_multicons="YES"
boot_serial="YES"
comconsole_speed="115200"
console="comconsole,vidconsole"Entering the DDB Debugger from the Serial LineTo configure the ability to drop into the kernel debugger
from the serial console, add the following options to a custom
kernel configuration file and compile the kernel using the
instructions in . Note that
while this is useful for remote diagnostics, it is also
dangerous if a spurious BREAK is generated on the serial port.
Refer to &man.ddb.4; and &man.ddb.8; for more information
about the kernel debugger.options BREAK_TO_DEBUGGER
options DDB