Section 4. (System Additions)
If you have written some addition to the kernel or some other
part of the system, or know of one that feel should be mentioned,
send mail to Dave Burgess (bur...@cynjut.neonramp.com) with all
the relevant information, and it will be added for the next
4.1 Common (sort of) Kernel-related problems
4.1.1 Sometimes I have trouble with my system resetting the terminal
to seven bit mode. Isn't BSD eight bit clean?
The answer is "sort of". The problem seems to come from the
fact that the <sgtty.h> interface is not guaranteed to be eight
bit clean. The <termios.h> interface is better, and should be
eight bit clean in all cases. If you find an application that
uses the <sgtty.h> interface, you should either contact the
author and try and get them to use the termios interface or port
the code yourself.
See section 5 for more Terminfo/Termlib information, as well as
a discussion of the new curses library that is available.
4.1.2 How do you implement quotas on Net/2 derived BSD systems?
From: ting...@plains.NoDak.edu (Mark Tinguely)
maybe you did not complete the setup, here is a step-by-step
instructions to get them to work:
1) make a kernel with "options QUOTA" installed
2) edit /etc/fstab and include the kinds of quotas you want,
below I used "userquota", you could also add "groupquota".
/dev/wd0h /usr ufs rw,userquota 1 2
3) for each filesystem that is in /etc/fstab that uses quota,
create the file "quota.user" (and "quota.group if appropriate).
Above I have user quotas in the /usr filesystem, so I would:
# touch /usr/quota.user
4) scan filesystem for files ownership (and/or group ownership).
# quotacheck -a
5) now you can add individual quota limits, if you want to add
the same quotas to the many people, then make a template and
replicate the template. If they change for each user, then
# edquota tinguely
(an editor is kicked up and says something like:
Quotas for user tinguely:
/usr: blocks in use: 11876, limits (soft = 0, hard = 0)
inodes in use: 891, limits (soft = 0, hard = 0)
a limit of 0 means "unlimited". Change these to the appropriate
number of blocks. A soft limit generates a warning, and can be
exceed for period of time (7 days?), after which time a soft limit
is treated like a hard limit. A hard limit denies new writes.
to replicate a template (for this example let us assume "tinguely"
is the template):
# edquota -p tinguely user1 user2 user3 ... userN
6) turn quotas on (usually done in the /etc/rc file, but turn it
on manually so you do not have to reboot right now:
that should take care of setting up quotas. You can look at the
status of use of files with repquota, the -a option lists all
filesystems with quotas.
4.1.3 What are the correct permissions for the /tmp, /usr/tmp, and
All of these directories should be owned by bin, group bin, mode
1777. This turns on the sticky bit, so that the only people who
can remove a file from these directories are the owner and root.
4.2 Available kernel add-ons
4.2.1 Loadable Kernel Modules
Several strides have been made in the past to reduce the amount
of 'cruft' that gets into the default kernel. One way is to
make the kernel so hard to use that practically no one but a
person with precisely the 'right' hardware would be able to use
Another way is to implement something called 'LKM's or "Loadable
Kernel Modules". These are run-time extensions to the system
that allow the distribution kernel to not include things that
people might want, but not nxbeed until they get the system up
and running. While the security concerns of LKMs are valid,
their implementation is such a win that the research to
implement them is well worth it.
It was really _very_ simple to make these, so this is nothing
spectacular. Just something to keep from having to recompile just to
add msdosfs support to a machine. ;)
To try this:
2) untar it somewhere. It will create a subdirectory
called lkm and all extracted files will go in it.
(I use /usr/src, but that may be a bad place)
3) follow the directions in lkm/README
Please mail suggestions, and (especially) fixes and more
modules to Michael Graff <expl...@flame.org>. Once it is
clean enough, I'll send it in as a send-pr and see what
One question which still needs to be resolved is where should
these *.o LKM's be installed? The directory '/usr/lkm' would
be a good idea, with the output (modload's -o option) in
/var/run/lkm or something like that.
4.3 Other program building type problems.
4.3.1 I am building a program that requires access to the crypt library.
Either I have it and it isn't getting copied into the executable,
or I don't have it; why?
This is actually two separate questions, but they are close enough
to the same that I can answer them here. The first problem that
anyone building a 'crypt' aware program needs to remember is that
the crypt library is a separate library and requires a '-lcrypt'
to be added at the end of the link line. The other half of the
problem is the 'US Non Export' policy for DES encryption. There
are several good sources (about one per country) for non-US
crypt libraries. IF you are outside the US and need one, look
around on some of the NetBSD/FreeBSD/OpenBSD FTP sites in the
'local area'. By the way. I don't have any good URLs for Mars,
so you might be out of luck.
OpenBSD doesn't appear to have this problem, since it is a
"Canadian" product rather than an American one. Thanks to this,
there is no restriction on exporting (or importing) the crypt
library, so it is no longer needed. With version 2.1 of
OpenBSD, the crypt library doesn't even exist; it is included in
the standard library for the system.
4.3.2 I am having trouble with long file names in my libraries. It
seems like there is a 16 character limit in the library
There is a 16 character limit, sort of. The most likely symptom
for this is that the header for the file _after_ the long file
name will be mangled. It turns out that there is a "T" option
that may not be documented very well that provides the correct
functionality for long filename support in ar.
4.3.3 I'm getting annoyed with having this "conflicting types for
`sys_errlist'" problem show up nearly every time I build a
program. What do I need to do?
Remove the sys_errlist reference in the source you're compiling.
You can either delete it (there are advantages to just deleting
it) or you can wrap a "#ifdef __NetBSD__/#endif" (obviously only
if you are running NetBSD, FreeBSD and OpenBSD have a similar
mechanism) pair around it. There are religious issues
regarding the use of sys_errlist that involve either system
security (most declaration allow the error list to be written
to) or system internals (there's already a well-defined
library call that performs the sys_errlist lookup). An
anonymous example is included below:
Most stupid packages such as GCC expects extern
(char*)sys_errlist whereas 4.4Lite based systems have more
secure extern const (char*) const sys_errlist declaration.
Just kick that "cccp.c" in the butt and modify the suspicious
line. Hard to believe GCC still doesn't do that. You're going
to have to do lots of this modification as you encounter more of
4.4 System Administration Questions
4.4.1 Where can I get good books about NetBSD or FreeBSD?
There is a set of books produced by O'Reilly and associates that
describe in some detail the 4.4 BSD system. The six volume set
includes a book on system administration which directly pertains
to the operation and management of NetBSD and FreeBSD. Also see
the Section 1 for a good list of the books that folks use for
the system. There is also a good list of books (specifically
about writing device drivers) in the 'pcvt' distributions in
NetBSD, FreeBSD, and OpenBSD. It is in a file called
'Bibliography' and contains the pcvt author's list of device
4.4.2 I am concerned about system security. What should I do to
protect my system from net attacks?
With the release of the System Administrators Tool for Analyzing
Networks (SATAN), network security has suddenly become a serious
issue. There are a few things you can do.
-- Get, read, and understand the CERT advisories
-- Get SATAN and run it against your own system or network.
Fix whatever it finds as holes
-- Get courtney, a program that was written to recognize a
SATAN attack pattern and notify you whenever someone tries to
probe your system
-- Log all failed login attempts (see below)
4.4.3 How can I log failed login attempts?
Failed logins are logged (without the attempted login name) at
LOG_NOTICE priority. Failed logins are logged _with_ the
attempted login name at LOG_NOTICE priority, and with the
If you set up some lines in syslog.conf like:
# The authpriv log file should be restricted access;
# these messages shouldn't go to terminals or publically-readable files.
Make absolutely sure, though, that it's really what you want:
logging actual supplied logins is often a great way to offer
cleartext passwords to an adversary...
Which is why you have
So none of the authpriv messages (those that actually display
the failed login) goto /var/log/messages, but they do go to
/var/log/secure (which you have with 600 perms.) Bear in mind
that this still does not prevent someone that has hacked into
your system with root privs from reading them. See 4.4.2 for
4.4.4 Can I use a Concatenated Filesystem with NetBSD?
The "ccd" device (in -current) provides the capability to span a
file system across multiple hard drive partitions. Jason Thorpe
<tho...@nas.nasa.gov> has been working on it; if you try it and
have problems, here are the debug instructions:
18.104.22.168 Why, when I type "ccdconfig ccd0 16 none /dev/wd0a > /dev/wd1a", do
I get back "ccdconfig: ioctl (CCDIOCSET): /dev/ccd0d: Device not
Considering that the error comes froom the ioctl (rather than the
open) I'm tempted to say it comes from either the vn_open() or
subsequent VOP_*() operations on the components. If you compile
your kernel with `options CCDDEBUG' and set the ccddebug variable
(near the top of ccd.c or with the ddb) to 0x03, you should be able
to see where it fails. If you could send me that information,
that would be most helpful.
Might be the same problem I had; it turns out that the partitions
that you build your concatenated disk device from must not be
marked "unused" in their native disks' labels. This "device not
configured" is the way ccdconfig informs you of this condition... :-)
Actually, I guess this indicates a need for a special "ccd
component" type entry for disklabel? Or should the partition
simply be marked as a "raw" partition, sharing this type with
database log partitions etc?
'Der Mouse' (mo...@collatz.mcrcim.mcgill.edu) adds:
Personally, I think ccd has no business looking at those
partition types. But I definitely think a special ccd-component
partition type is _not_ the way to go; if nothing else, it makes
life hard for people running ports using non-NetBSD disk
partitions. For example, under NetBSD/sparc on a disk with
a SunOS label, there are no partition types in the label, so
it would be impossible to use a ccd that insisted on a special
partition type on such a disk.
4.4.5 I am really new to Unix System Administration. I need some real
22.214.171.124 What is the System Administrator's user name?
126.96.36.199 I can't log in as 'su'. What does that message mean when I log
in as root.
Both of these indicate a newness to Unix System Administration
that many of the core team members don't even remember. The
sysadmin user-id is "root", although you typically don't want to
log in directly as root. A better solution is to log in as root
once, create a user-id and password for yourself. Once you are
done with that, you need to modify the /etc/groups file. This
identifies the users that are allowed to be part of particular
groups. Add your UID to the "wheel" group and log off. With a
real UID and password and your UID identified as a "wheel"
member. you will be able to use the 'su' command to log in as
yourself and then "switch users" to root. That, by the way, is
also what that cryptic message "Don't log in as 'root', use 'su'
188.8.131.52 Are there any books I can 'bootstrap' myself with?
Yes. Here are a couple:
(1) Nemeth, Snyder, and Seebass, "Unix System Administration i
(2) Horspool, "The Berkeley Unix Environment"
184.108.40.206 How about some code examples?
4.5.6 How do I change the default shell for a user?
There are three ways, listed here from most difficult to least
1) Use 'vi' to edit the /etc/master.passwd. Once you have
changed the entry you want modified, run the program
"pwd_mkdb -p /etc/master.passwd". This will rebuild the
password database and update your /etc/passwd file. Cd to the
/var/yp directory and run a "make" to update your 'NIS' database
(important only if you are using NIS).
2) Use the 'vipw' program and make your change. This
automatically rebuilds the password database and the /etc/passwd
file. You still need to update the 'NIS' database on your own.
3) Use 'chpass', 'chfn', or 'chsh' programs to update the
appropriate entry in the password database. These have the
advantage of update the NIS stuff automatically.
4.5 Daemon questions
4.5.1 I'd like to use amd to mount a file system (/dev/sd0f aka
/usr/local) on another machine as "/usr/local". What's the
There are several ways to achieve 'amd nirvana'. Each of these
elements below is an important consideration for getting amd to
The "-" means use these as defaults, so you need an entry without
a "-". Also, I think one "-..." overrides the previous one
As a start, you can use the following in your amd.project file:
Then run "amd /usr/local /your/map/name -type:=direct".
One word of warning, however. In NetBSD 1.0, I couldn't get direct
mount points to work for some reason. I don't know if this has been
fixed or not.
If you are using a NetBSD 1.0 (or earlier) system, make /usr/local
a real symbolic link into an automount filesystem.
Another instance of the amd.project file might look like this:
You amd.master file might look like this:
Here's another example which auto-mounts /usr/src from another
grizu% ls -lad /usr/src
lrwxr-xr-x 1 root wheel 29 Dec 30 15:33 \ (split by ed.)
/usr/src -> /tmp_mnt/mounts/src10/usr/src
grizu% cat /etc/amd/master
grizu% cat /etc/amd/net
grizu% cat /etc/amd/src
grizu% grep ^amd /etc/netstart
amd_dir=/tmp_mnt # AMD's mount directory
amd_master=/etc/amd/master # AMD 'master' map
grizu% ls -la /tmp_mnt
drwxr-xr-x 5 root wheel 512 Jan 3 12:09 .
drwxr-xr-x 26 root wheel 1024 Jan 3 12:09 ..
dr-xr-xr-x 3 root wheel 512 Nov 20 19:29 ftp.uni-regensburg.de
dr-xr-xr-x 2 root wheel 512 Jan 4 10:43 mounts
dr-xr-xr-x 4 root wheel 512 Dec 11 08:18 rfhu1001
grizu% ls -la /tmp_mnt/mounts
dr-xr-xr-x 2 root wheel 512 Jan 4 10:43 .
drwxr-xr-x 5 root wheel 512 Jan 3 12:09 ..
I guess that's all. rfhu1001 is the NFS server, grizu the client.
4.5.2 I am having trouble with my nameserver refusing to accept
'nslookup's from my SunOS machine after I installed the resolver
fix. The exact error message is "*** Can't find server name for
address 220.127.116.11: Query refused". Can you help?
From the README file in the BIND distribution:
Versions of NSLOOKUP up through BIND 4.8.3's used IQUERY to
ask the local server for information about the server's own
name. I assume that this was done in a "what the heck,
nothing uses these, how can we contrive a need?" sort of
spirit. I removed this code as of BIND 4.9's NSLOOKUP and
had it use the standard gethostbyaddr() mechanisms (which
depend on normal queries of PTR data). Disabling INVQ and
putting "options fake-iquery" in the boot file will cause
IQUERY to be answered bogusly but in a way that old nslookup
programs won't trip on. INVQ is disabled by default in
So, your options are:
- Add "options fake-iquery" to named.boot and restart the
- Replace your old, broken nslookup with the one in the
4.9.3 BIND distribution.
-- Enable INVQ in conf/options.h, then rebuild and re-install
named. This latter option isn't guaranteed to work. If
you point an old version of nslookup at a server, and the
server either is not authoritative for a zone containing
the A RR matching the address you are sending the query to,
or if this A RR is not in it's cache, then nslookup will
still fail even if the server has the INVQ option turned on.
4.5.3 Are there any alternatives to 'NIS' available for NetBSD, et al.?
Yes, there is 'hesiod' which provides (according to Ted Lemon
<mel...@fugue.com>i)another way of distributing databases like
/etc/passwd, /etc/services, /etc/groups, and so on. It uses
DNS, which is (IMHO) slightly more robust and less easily
subverted than NIS, and doesn't claim to provide authentication
(authentication is Kerberos's job), so as part of a complete
system, I think it's a much better solution. It certainly has
a smaller installed base than NIS, though.
There is also Kerberos IV, which provides similar functionality.
It is now fully integrated into the all of the *BSD systems and
works well for network wide authentication.
4.6 Adding new and removing old users.
4.6.1 Where can I FTP the 'adduser' program?
There is one you can FTP (see the URL below). You will need to
be able to use 'vipw' to make it work, but that shouldn't be a
big problem for most people.
The man page is there too..
4.6.2 Where can I get a 'rmuser' script?
There is a Perl script called 'removeuser' which should be
available from one of the 'CPAN' sites. As soon as someone has
a URL, let me know.
There is also a FreeBSD 2.2 'rmuser' program which does
everything the remove program does, plus removes crontab and at
Dave Burgess Network Engineer - Nebraska On-Ramp, Inc.
*bsd FAQ Maintainer / SysAdmin for the NetBSD system in my spare bedroom
"Just because something is stupid doesn't mean there isn't someone that
doesn't want to do it...."