.TL Setting up the Net .AU Tom Truscott .AI Duke University (now at the Research Triangle Institute, NC) January 1980 (revised 1983 to better reflect reality) .SH Installing files and Programs. .PP This paper describes how to get the system named "xyz" on the uucp net. If you are on the net, stop reading! In chosing your system name, keep it short (no more than 7 characters long) and make it specific. That is, 'physics' is a poor uucp name! The University of California at Berkeley names their machines ucbvax, ucbcad, ucbmone, etc. A standard Seventh Edition .UX system is assumed. [Yup, this is ancient! I have deleted useless paragraphs -- trt] The v7 C compiler MUST be used to recompile uucp; the Phototypesetter version fails. It is necessary to compile and install the mail, uucp, and news programs. In what follows, "/bin/..." can be replaced by "/usr/bin/...". .SH MAIL .PP Ignore this section if you machine already has a network mail program in place. First, you must tell your machine its name. Modern versions of UNIX use gethostname(II) or uname(II). Ancient versions use include files. If you are in the dark ages, edit /usr/include/whoami.h and change the system name to xyz. Do the same to /usr/include/ident.h (not currently used, by the way). Then recompile mail: .DS cd /usr/src/cmd cmake mail .DE and copy it to /bin. It should be setuid to root. The network uses a restricted version of mail, which is actually mail but invoked with a different name: .DS ln /bin/mail /bin/rmail .DE Mail should now be ready for the net. A newer version of mail, called Mail, should be used if you have it. It invokes a mail delivery program called delivermail or the newer one called sendmail. .SH UUCP .PP Read the documents on uucp and uucp implementation in the .I .UX Programmer's Manual. .R Also read the manual pages for uucp and uux. .NH 1 Getting ready to install uucp .PP Edit /etc/passwd to add the user "uucp" to your system. Uucp should have unique user and group ids (for security). Duke's uucp and daemon have the same group id, so they can both access /dev/dn? which is not accessible by "others." Uucp will own the directories and other files of the uucp system. Actually, it is nice to also add the user "UUCP" as a synonym for "uucp", and put "UUCP" earlier in /etc/passwd. That way uucp will identified as UUCP in mail messages, etc., which highlights the fact that the messages are machine generated. Here are typical lines: .DS L UUCP:iPkI/ZUX3YX2Y:4:19::/usr/spool/uucppublic:/usr/sbin/uucico uucp:iPkI/ZUX3YX2Y:4:19::/usr/spool/uucppublic:/usr/sbin/uucico .DE .NH 1 Installing uucp programs .PP To install uucp, read the INSTALL file in the uucp directory and follow the instructions. It references other documentation, which should also be read. .NH 1 Files in /etc/uucp .PP All of these files should have the uid and gid of uucp, and should not be readable (or writable) by others. The files "L-devices" and "L-dialcodes" are needed only if xyz calls other systems. The file formats are described in the documentation and are straightforward. The USERFILE file should have one line for each system which calls xyz: .DS Uduke,duke /usr/spool/uucppublic ,xyz / .DE The first line of the sample USERFILE indicates that the duke system uses login name Uduke and can access the public directory. Here is a typical "Uduke" line in /etc/passwd: .DS L Uduke:PSB8EZ5w2tQ4I:4:19::/usr/spool/uucppublic:/usr/sbin/uucico .DE This line differs from that for uucp only in having a different login name and password. The last line of USERFILE should be ",xyz /", which permits local users but not remote systems to access anything on xyz. [Actually, USERFILE is a real botch. If you want security, never given anyone permission from '/'.] .PP The file L.sys has a line for each system with which xyz communicates. If xyz DOES NOT place calls to Duke then the L.sys line for Duke might be: .DS duke None ACU 300 123-4567 ogin Uxyz ssword fooha .DE This line indicates that xyz should never ("None") call Duke. If xyz DOES place calls to Duke then the line must be altered to so indicate. The documentation explains that case fairly well. .NH 1 Getting it running .PP Uucp is now ready for execution. If Duke is to call xyz, the xyz system can request that Duke send mail to test its operation. /usr/spool/uucp/LOGFILE, SYSLOG, and ERRLOG are useful logs of uucp activity. If uucp does not work, and the problems cannot be resolved, xyz could give Duke another login on xyz so someone here can poke around and see what the problem might be. The login should have the same uid and gid as uucp but without a uucico "shell". .PP If xyz can place calls to another system, a good test is to try to place the call. Suppose xyz has both a call-out and a call-in line. Then an entry for the mythical system "foo" can be put in the L.sys and USERFILE files, and xyz can call itself as follows: .DS echo "test 1" | mail foo!root echo "test 2" | mail foo!xyz!root echo "test 3" | mail foo!foo!root .DE Mail sent from system xyz to itself causes a local invocation of mail. Mail sent to the mythical system "foo" will, however, place a call to send the mail. Uucp will complain about locking, and shell metacharacters may not work, but the communication should still succeed. Even if xyz has only a call-in or call-out unit it may be possible to fake the other one by putting a null modem between the two lines. [Unfortunately, the newest version of uucp botches loop testing fairly badly. But you can observe it successful connect.] .PP Also helpful is use of the "-x" debugging option. The debugging information produced by this blatant security hole is truly a wonder to behold. When it is in effect, the /usr/spool/uucp/AUDIT file at the remote end will also collect debugging information. .NH 1 Cleaning up after uucp .PP Uucp will run okay without any cleanup; however, the uucp files can become immense. Duke runs several shell files via cron(8). These are in uuaids/uu.*. Systems which call Duke should run the following script occasionally: .DS /usr/sbin/uucico -r1 -sduke .DE Systems which call-out can request uucp to transmit waiting files: .DS /usr/sbin/uucico -r1 .DE The standard version of cron runs with uid "daemon" which may not be able to run the cleanup or uucico scripts. The scripts could be run via at(1), or you could remove the "setuid(1);" at the start of cron. Then cron gives superuser privileges to its children. As a precaution, we run a program which does a setuid to uucp before invoking the scripts. .NH 1 Obscure problems that can happen .PP When uucp logs in, it is greeted (in standard V7 systems) with the message of the day, "you have mail.", and so forth. Sometimes these messages cause uucp to fail. One cure is for login to suppress the messages when the user has a non-standard shell (e.g. uucico). .PP If you have implemented your own tty handler, be sure it supports 8 bit RAW input and output. You should compare your own handler with that of the standard tty.c, and make sure the RAW mode execution is the same. [This version does not yet support 7 bit datapath.] .SH USING THE NET .PP The simplest and least error-prone use of the net is that of sending mail from one system to another. A user on xyz can send a letter to Duke as follows: .DS echo "xyz lives" | mail duke!root .DE A letter can be sent to unc as follows: .DS echo "xyz lives on" | mail duke!unc!root .DE Here are some local network enthusiasts: [I only kept this around for historical interest.] .TS l l l. duke!swd Steve Daniel C version of news duke!jte duke system administrator duke!trt Tom Truscott network enthusiast duke!unc!smb Steve Bellovin network news architecture duke!phs!dennis Dennis Rockwell V6/PWB UNIX enthusiast .TE .PP Uucp provides a convenient way to transfer files between systems. Files may be transferred by mailing them, but that can get annoying. Here are some hints for using uucp. .IP 1. By convention, the name "~uucp" may be used to access the public directory on any system. Thus, .ti +5 uucp -m -d x.c duke!~uucp/xyz/ .br copies the file x.c to the subdirectory xyz of Duke's public directory (/usr/spool/uucppublic). The "-m" option requests that mail be sent when x.c is transmitted. The "-d" option requests that the remote system create any directories that are needed (in this case, the subdirectory xyz). The final "/" in ".../xyz/" informs uucp that xyz is a directory and not an ordinary file. .IP 2. uucp -d -m x.c duke!unc!~uucp/xyz/ .br will not work since uucp cannot handle "duke!unc!". Uucp and uux work only between two systems; they do not handle a system-pathname sequence as does mail. [See uusend for a uucp-like multi-hop copy program.] .SH NEWS .PP You are not running the distributed bulletin board?! Poor innocent. Don't start. You can never go back.