Search the FAQ Archives

3 - A - B - C - D - E - F - G - H - I - J - K - L - M
N - O - P - Q - R - S - T - U - V - W - X - Y - Z - Internet FAQ Archives

[comp.unix.bsd] NetBSD, FreeBSD, and OpenBSD FAQ (Part 5 of 10)

( Part1 - Part2 - Part3 - Part4 - Part5 - Part6 - Part7 - Part8 - Part9 - Part10 )
[ Usenet FAQs | Web FAQs | Documents | RFC Index | Cities ]
Posted-By: auto-faq
Archive-name: 386bsd-faq/part5

See reader questions & answers on this topic! - Help others by sharing your knowledge
Section 4.	(System Additions)

4.0	Introduction

	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 ( 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: (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 " 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 
	    edit seperately.

	    # 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:

	    # quotaon

	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
	/var/tmp directories?

	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
	the system

	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:

		1)  get

		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 <>.  Once it is 
	clean enough, I'll send it in as a send-pr and see what 
	happens.  :)

	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 
	such programs.

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
	driver books.

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 
	LOG_AUTHPRIV facility.

	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.
	authpriv.*                                      /var/log/secure

	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 
	    authpriv.*			/var/log/secure
	...,authpriv.none,...		/var/log/messages

	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
	more information.

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
	<> has been working on it; if you try it and 
	have problems, here are the debug instructions:	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' ( 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
	basic help.	What is the System Administrator's user name?	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'
	instead." means.	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"	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
	work correctly.

	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:

	usr/local	opts:=rw;type:=nfs;rhost:=hostname;rfs:=/usr/local

	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:
	/defaults type:=nfs;opts:=rw,soft,intr,grpid
	local	\
		host==hostname;type:=link;fs=/usr/local ||\
	You amd.master file might look like this:
	/project amd.project

	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
	/net            /etc/amd/net
	/tmp_mnt/mounts /etc/amd/src
	grizu% cat /etc/amd/net
	/defaults       type:=host;fs:=${autodir}/${rhost};rhost:=${key}
	*               opts:=ro,soft,intr

	grizu% cat /etc/amd/src
	/defaults       type:=host;fs:=${autodir}/${rhost};
	src10           opts:=rw,soft,intr;rhost:=rfhu1001

	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
	total 9
	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
	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
	total 3
	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 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 
	<>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
	command entries.

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...."

User Contributions:

Apr 12, 2022 @ 11:11 am
FreeBSD 1.0 -
Let's keep it forever!

Comment about this article, ask questions, or add new information about this topic:

Part1 - Part2 - Part3 - Part4 - Part5 - Part6 - Part7 - Part8 - Part9 - Part10

[ Usenet FAQs | Web FAQs | Documents | RFC Index ]

Send corrections/additions to the FAQ Maintainer: (BSD FAQ Maintainer)

Last Update March 27 2014 @ 02:11 PM