Please Note: 1) My intent in this was to limit my audience enough so that this document would not become too large and cumbersome. Please note the intended audience. 2) This document is sure to undergo revision, and I hesitate to ever call any revision a final draft. 3) Please forgive any typo's and gramatical errors. It's late and I wanted to get this out on a day other than Friday. Send me notes of typos and spelling directly don't bother the rest of the net with such. Many thanks to all those who provided feedback. ---------------------------------------------------------------------- How to improve security on a newly installed SunOS 4.1.3 system. Version 1.0 Thomas M. Kroeger - July 94 tmk@hawaii.edu Copyright -- Thomas M. Kroeger - July 94 Please feel free to redistribute or include this list or parts of it wherever you desire, but, please include appropriate citation. Goal - Attempt to provide a list of some of the more basic steps that can be done to improve security on a newly installed SunOS 4.1.3 system. This is by no means an all inclusive list of actions, just a list of some simple and more common measures. Intended Audience - Anyone responsible for the system administration duties of a machine running SunOS 4.1.3. These recommendations applicable to a stand-alone * workstation. It is assumed that the reader has some familiarity with basic system administration (you should be able to do a basic system installation by yourself, install patches, and use an editor). [* which may be connected to a larger network?] NOTE: This list limits it's coverage to measures that can be done for a stand-alone workstation addition to the steps listed here there are many measures that can be taken to improve the security of an enviornment, measures such as; filtering traffic to port 2049/udp at the routers will prevent NFS calls from outside your domain. Disclaimer --- These recommendations come with no guarantees of anything! Support is only offered within the University of Hawai'i community. The truly paranoid may wish to these implement these recommendations while in single user mode as an extra measure of security to avoid possible subversive shenannigans by a wily cracker. To Do on a system Just installed ------------------------------ Patches -- + install the following patches 4.1.3 Security listing 100103 SunOS 4.1;4.1.1;4.1.2;4.1.3: script to change file permissions 100173 SunOS 4.1.1/4.1.2/4.1.3 : NFS Jumbo Patch * 100224 SunOS 4.1.1,4.1.2,4.1.3: /bin/mail jumbo patch 100257 SunOS 4.1.1;4.1.2;4.1.3: jumbo patch for ld.so, ldd, and ldconf 100272 SunOS 4.1.3: Security update for in.comsat. 100296 SunOS 4.1.1, 4.1.2, 4.1.3: netgroup exports to world 100305 SunOS 4.1.1, 4.1.2, 4.1.3: lpr Jumbo Patch 100372 SunOS 4.1.1;4.1.2;4.1.3: tfs and c2 do not work together * 100377 SunOS 4.1.1, 4.1.2, 4.1.3: sendmail jumbo patch * 100383 SunOS 4.0.3;4.1;4.1.1;4.1.2;4.1.3: rdist security and hard link 100448 OpenWindows 3.0: loadmodule is a security hole. 100452 OpenWindows 3.0: XView 3.0 Jumbo Patch 100478 OpenWindows 3.0: xlock crashes leaving system open * 100482 SunOS 4.1;4.1.1;4.1.2;4.1.3: ypserv and ypxfrd fix, plus DNS fi 100507 SunOS 4.1.1, 4.1.2, 4.1.3: tmpfs jumbo patch 100513 SunOS 4.1.1;4.1.2;4.1.3: Jumbo tty patch 100564 SunOS 4.1.2, 4.1.3: C2 Jumbo patch * 100593 SunOS 4.1.3: Security update for dump. 100623 SunOS 4.1.2;4.1.3: UFS jumbo patch 100630 SunOS 4.1.1, 4.1.2, 4.1.3: SECURITY: methods to exploit login/su 100631 SunOS 4.1.x: env variables can be used to exploit login(US only) * 100632 SunSHIELD 1.0: ARM jumbo patch release 100890 SunOS 4.1.3: domestic libc jumbo patch 100891 SunOS 4.1.3: international libc jumbo patch 100909 SunOS 4.1.1;4.1.2;4.1.3: Security update for syslogd. 101072 SunOS 4.1.1;4.1.2;4.1.3: Non-related data filled the last block 101080 SunOS 4.1.1 4.1.2 4.1.3: security problem with expreserve 101200 SunOS 4.1.1, 4.1.2, 4.1.3: Breach of security using modload 101206 ODS 1.0; NFS/fsirand security fix. * 101480 SunOS 4.1.1;4.1.2;4.1.3: Security update for in.talkd. * 101482 SunOS 4.1.3, 4.1.2, 4.1.1: Security update for write. 101640 SunOS 4.1.3: in.ftpd logs password info when -d option is used. 101710 ONLINE DISKSUITE (ODS) 1.0: Security update for dump. 4.1.3 U1 security listing 101434 SunOS 4.1.3_U1: lpr Jumbo Patch * 101435 SunOS 4.1.3_U1: ypserv fix * 101436 SunOS 4.1.3_U1: bin/mail jumbo patch 101440 SunOS 4.1.3_U1: security problem: methods to exploit login/su 101558 SunOS 4.1.3_U1: international libc jumbo patch * 101579 SunOS 4.1.3_U1: Security problem with expreserve for Solaris 1. 101587 SunOS 4.1.3_U1: security patch for mfree and icmp redirect 101590 ONLINE DISKSUITE (ODS) 1.0, NFS/fsirand security fix 101621 SunOS 4.1.3_U1: Jumbo tty patch * 101665 SunOS 4.1.3_U1: sendmail jumbo patch 101679 SunOS 4.1.3_U1: Breach of security using modload 101759 SunOS 4.1.3_U1: domestic libc jumbo patch * - Note: some patches may not be required if you are disabling this feature. If this is the case, ensure that all relevant files have had their mode changed to remove the SUID bit -- chmod u-s. Note 2: Some patches may not necessarily apply based on packages installed (US Encryption...) or your configuration. Please carefully check the README for each patch. Patches are available via anonymous ftp from ftp.uu.net:/system/sun/sun-dist Network level changes ------- + Disable source routing Why: Source routing enables the originating host to dictate the route the packet will take. This can be used to spoof a system into believing that the packets are coming from a trusted source. How: Install patch found in Ref. 19 More info: Ref. 2 [Cheswick 94] Chap 2, Ref. 19 + Comment out all unnecessary services in /etc/inetd.conf Why: RPC services can be used to gain access as well as information about a system. These are very site specific adjustments and will have to be tailored to your needs. Additionally, TCP wrappers [Ref. 4] can be used to improve loging, prevent IP spoofing (one host pretending to be another to gain access) and limit access to a service as well as totally removing it. How: Edit file /etc/inetd.conf and put a # in front of services that are not needed. Services possibly needed, but probably desired: ftp - possible needed for file transfer, however if all you want is outgoing ftp then this is can be commented out. telnet - obvious (recommend restricting with TCP wrappers Ref. 4) finger - Possibly but better to get a modified version that doesn't give up that much information (To be honest I have no experience with any of these I'd recommend checking into some of the ones on ftp.uu.net). talk - nice to have but how much will you miss it? Services which are probably unnecessary - see man pages for details name - for name services (man tnamed) comsat - for mail - not necessary. login - for rlogin - please see discussion under ruserok(). uucp - if you aren't sure if your using this then you are not. exec - services for rexecd - do without. Services recommended against - FIND A WAY TO LIVE WITHOUT. shell - for rsh -- major source for security problems tftp - only needed for support of an X terminal or diskless clients, doubtfully needed on a desktop machine. More info: Ref. 4 [Venema 92]., Ref. 15 + Enable NFS port monitoring (This is of value only if you are exporting filesystems over NFS) Why: Port monitoring ensures that calls to NFS to mount a file system come from a port < 1024 (in other words, a port that requires root access to use). How: The default /etc/rc.local sets up port monitoring only if the file /etc/security/passwd.adjunct exists. If you will be implementing shadowing then you can skip over this step. If you will not be implementing shadowing and you will be exporting files then you should modify /etc/rc.local to do the following 2 lines: (regardless of whether the passwd.adjunct file exists): echo "nfs_portmon/W1" | adb -w /vmunix /dev/kmem > /dev/null 2>&1 rpc.mountd Shadowing is covered under the section Changes to ID Management. Note: one possible side effect: non-sun nfs client might not be able to mount exported files. More info: Ref. 3 [Stern 92] pg 177 & mountd(8C) + Ensure that ypbind is started with the -s option. Why: Users could easily start thier own ypbind services and activate a phony NIS database giving them access as any user. How: As with port monitoring the default /etc/rc.local sets up ypbind in the secure mode (-s option) only if the file /etc/security/passwd.adjunct exists. If you will be implementing shadowing then you can skip over this step, overwise you should modify /etc/rc.local to start ypbind with the -s option regardless of whether the passwd.adjunct file exists. More info: ypbind(8) + Disable IP forwarding - Why: I'm not sure if this can be abused on a machine with only one interface but I'd rather err of the side of safety. It could be used to spoof an IP address. How: Install the following line in the kernel configuration file: options "IPFORWARDING=-1" For info on how to custom configure a kernel, see the file /usr/sys/`arch`/conf/README. Kernel changes ------- + modify ruserok() in /usr/lib/libc.so.1.8 (9 on 4.1.3 U1) to disable: - root .rhosts authentication, wildcards in .rhosts, or .rhosts entirely depending on the level of security you want. Why: ruserok() is a library routine that does the checking of both the .rhosts and /etc/hosts.equiv files for all the r commands. a) ruserok() uses the source IP address in the rpc request for authentication. There are no guarantees that this address is correct. This address can easily be spoofed, yielding illegitimate access to a system. b) Crackers will often insert +'s into users' .rhosts file to allow them to gain access at a latter date. Most users don't look at their .rhosts file too often. Note: While using .rhosts prevents crackers from sniffing your users' passwords, it also make them vulnerable to IP spoofing (claiming to be a host that you're not) it becomes a matter of preference what level of protection you'd choose here. How: To modify the source code requires a source code license. At Univ of Hawaii, modified version of libc.so.1.8 should be available though the systems group. For those who wish to create thier own modified version of ruserok() please see the section at the end that describes some of the details for creating a custom libc.so. Additionally the logdaemon package Ref. 15 has a modified version of libc.so that helps with this. This site also has BSD sources for the ruserok() routine. Finally TCP wrappers can also be used to restrict access to each individual r command. Ref. 4 More info: ruserok(3), hosts.equiv(5), source code file /lib/libc/net/rcmd.c, Ref. 4, Ref. 15 Filesystem change---------- + create the file /etc/ftpusers Why: This file is a list of users that will not be allowed to access the system via ftp. This prevents Joe Cracker from using ftp to modify a file (such as /etc/passwd) if he is able to determine your root password. How: create the file /etc/ftpuser with the following entries (one per line): root, nobody, daemon, sys, bin, uucp, news, ingres, AUpwdauthd, AUyppasswdd, sysdiag, sundiag, and any other ID's that exist that you don't want to allow ftp access. More info: man ftpusers(5) + Remove the + in /etc/hosts.equiv Why: Well..... Everyone gains access with this. Note: This file should not have any comment lines. More info: hosts.equiv(5) + edit /etc/exports remove all entries you don't want exported. - ensure whatever entries remain have restricted access Why: NFS leaves the normal file system protection up to the client instead of the server. Acracker with root access on a client can work around many of these protections. As a result filesystems exported to the world are particularly vulnerable. How: Edit the file /etc/exports 1) Only export what you need to export. If you aren't certain that it needs to be exported, then it probably doesn't. 2) Never export to the world. Use a -access=host.foo.bar.edu option. 3) When ever possible export the file systems read-only. option ro You can use showmount -e to see what you currently have exported. More info: exports(5), exportfs(8), showmount(8) + Install random number inode generator on filesystems fsirand Why: Predicable root handles assists crackers in abusing NFS. After installing the patch for fsirand you'll need to run fsirand for all your filesystems. How: Ensure the filesystem is unmounted and run fsirand. More info: fsirand(8), SunOS patch 100173 (NFS Jumbo) + nosuid in mounts Why: Use the nosuid option when adding entries to /etc/fstab to mount a filesystem exported by another host. Anyone gaining access to the other host can create or modify an existing program which could compromise your system. Note: this doesn't work on tmpfs filesystems. How: Include the nosuid when you add an entry to /etc/fstab to import a filesystem. More info: Ref. 3 [Stern 92] pg. 175 fstab(5) + Edit /etc/ttytab to remove the secure option from all entries. Why: The secure entry in /etc/ttytab allows logins directly to root on that tty. If you feel that your machine is not in a physically secure location, you may choose to remove the secure option from the console as well. More info: ttytab(5) + Set eeprom secure field to command or full - Why: If you feel that your machine is not in a secure location, then the eeprom field secure can be used to prevent unauthorized root access by crashing your machine. Note: with the full option the system will not auto-reboot and will wait for the root password to be entered. More info: eeprom(8) + chmod 600 /dev/eeprom - Why: Prevents users from reading the eeprom passwd. More info: eeprom(8) + Remove openprom support if you do not intend to use the eeprom secure field. Why: A cracker who gains root access could install an eeprom password and make your life a bit harder. How: Remove the device driver from the kernel by commenting out the following: # The "open EEPROM" pseudo-device is required to support the # eeprom command. # pseudo-device openeepr # onboard configuration NVRAM More info: eeprom(8) + Uncomment security options in frame buffer table file /etc/fbtab Why: Without these entries ownership of console devices will not be properly set. More info: fbtab(5) + add umask 022 to /etc/rc & /.login Why: Prevent key files created during startup and root operation from being created world writeable. Note you may want to set umask in /.login to 077 instead of 022 More info: umask(1), rc(8) + chmod go-w /etc/* ; chmod g+w /etc/dumpdates Why: None of these file in /etc should require write access by world except for dumpdate, which requires group write access. More info: chmod(1), aliases(5), state(5), utmp(5V), remote(5), rmtab(5) + edit /etc/rc.local to comment change part that chmod's 666 motd Why: /etc/motd is the normal system's message of the day; it won't allow people to gain root access, but it could be a nuisance if they can change this anonymously. Additionally it is important to ensure that the line "rm -f /tmp/t1" is at the begining of this part. + Chmod u-s the following files unless you specifically use them: Why: Changing the modes for those file which you will not be using helps prevent would be crackers from exploiting unknown security flaws in these files which could be used to compromise your system. /usr/bin/cu /usr/bin/tip /usr/bin/fusage /usr/bin/nsquery /usr/bin/uucp /usr/bin/uuname /usr/bin/uustat /usr/bin/uux /usr/ucb/rcp /usr/ucb/rdist /usr/ucb/rlogin /usr/lib/uucp/uusched /usr/lib/uucp/uuxqt /usr/ucb/rsh /usr/lib/uucp/uucico /usr/games/hack /usr/games/chesstool /usr/games/fortune /usr/lib/exrecover /usr/games/robots /usr/lib/uucp/remote.unknown /usr/games/hack /usr/games/snake /usr/bin/sunview1/sv_release /usr/etc/rfsetup /usr/bin/allocate - used with C2 security. /usr/ucb/quota - used with disk quotas /usr/lib/expreserve - used to recover edit session that died. Following may only be needed to be run by user root; as such, they would not need to be SUID root: /usr/etc/shutdown /usr/lib/acct/accton More info: lots of man pages ;-) + chmod g-s the following file unless you specifically use them: Why: Changing the modes for those file which you will not be using helps prevent would be crackers from exploiting unknown security flaws in these files which could be used to compromise your system. /usr/bin/wall /usr/etc/trpt /usr/bin/sunview1/toolplaces /usr/bin/iostat /usr/bin/ipcs /usr/ucb/vmstat /usr/ucb/netstat /usr/etc/arp /usr/etc/dmesg /usr/etc/dkinfo /usr/etc/chill /usr/etc/dumpfs /usr/etc/devinfo /usr/etc/nfsstat /usr/old/perfmon /openwin/bin/xload /usr/kvm/pstat /usr/kvm/crash /usr/kvm/getcons /usr/etc/kgmon /usr/etc/trpt More info: lots of man pages ;-) + edit syslog.conf -- uncomment auth & mail lines Why: The enables improved loging of logins and su's be prepared for lots of data. More info: syslog.conf(5) + chmod 640 /vmunix; chgrp kmem /vmunix ; Why: Prevent crackers from finding out more about your kernel configuration. Changes to ID management ------ + Disable SUID passwd (if using NIS) or -F option in /bin/passwd Why: Here two options exist: 1) you are using NIS for your user database; so you don't need /bin/passwd (and the two hard links to it /bin/chfn & /bin/chsh) to be SUID root. 2) You will have local entries in your /etc/passwd that you would like to be able to change thier own passwd. Then please note that /bin/passwd has a race condition that can be exploited to write to files as root, allowing a cracker to gain root access. In either case yppasswd (and ypchfn & ypchsh) does not need to be SUID root. How: In all cases - cd /bin; chmod u-s yppasswd ypchfn ypchsh Option 1 - cd /bin; chmod u-s passwd chfn chsh Option 2a - Replace passwd with a proactive (check for bad passwds) passwd program. Ref 7. Option 2b - Do a binary edit of passwd (sun's code) as shown below: # cd /bin # cp passwd passwd.old; chmod 700 passwd.old # adb -w - passwd not core file = passwd /l 'F:' 0x68de This address is required in the following step: 0x68de/w 0 0x68de: 0x463a = 0x0 # chmod 4711 /bin/passwd Note: The following files should all contain the same code, and be SUID root (unless chmod u-s was done above). If you intend to use any of these, ensure they are a link to the modified file /bin/passwd: yppasswd, ypchfn, ypchsh, chfn, chsh. More info: Ref. 6 [8lgm]-Advisory-7.UNIX.passwd.11-May-1994.NEWFIX + remove ID sync::: Why: This ID is created to enable the admin to sync the file system before a system crash. It defaults without and password, and can be abused to gain access to the system. The simplest solution is to live without this feature and remove this ID. More info: passwd(5) + Implement shadowing Why: To restrict access to all users' encrypted passwords. Even though passwords are encrypted, Crack (a publicly available program) can be used to effectively guess users' passwords. How: This can be done two different ways: 1. by implementing Sun's C2 security package, which provides additional auditing. I've found that this auditing can be troublesome to maintain and I didn't have need for the extensive data. 2. the second option is to implement shadowing but not C2, this procedure is fully explained in detail in Ref. 5. In short: - ensure patch 100564 is installed, (note this also implements securenets for NIS) - split /etc/passwd into /etc/passwd & /etc/security/passwd.adjunct - split /etc/group into /etc/group & /etc/security/group.adjunct - add required Audit users (even if not implementing auditing) - comment out the part of rc.local that starts audit - reboot. The existence of the file /etc/security/passwd.adjunct has several other effects in rc.local that improve system security; (ypbind -s and rpc.mountd without -n). More info: Ref 5 + ensure all ID's have passwd Why: Any ID without a password provides open access to your system, Root comes without a password. More info: passwd(5) Modify mail system ----- Why: The sendmail program itself has been notorious for numerous bugs that gave crackers root access illegitimately. This is a huge topic and should be a paper or book in itself. I claim no expertise here, and to my great fortune my sendmail experience is limited. ;-) There are several different possible configurations and options I'll outline them and point you to further References. Host configuration: 1. If you intend to send and receive mail directly on your machine. Options are: a. Live with sendmail - install the newest version 8.6.9 (currently) - ensure a mail file is always in existence for all users Ref.10 &11. - "chmod u-s /bin/mail" and change sendmail to use "procmail" or mail.local Ref. 17 Ref.where to get??? - change sendmail default UID in sendmail.cf to 65534 "Ou65534" - turn on security features of sendmail: "Opauthwarnings needmailhelo noexpn novrfy restrictmailq" Refs. 2 [Cheswick & Bellovin 94] & 9 [Costales 93] b. Install zmailer -- Ref 8 [URL to zmailer package] - zmailer does not use /bin/mail so chmod u-s /bin/mail 2. If mail for your host is received on a different host (ie. local mail delivery is handled by another host). Here your system should only need to support outgoing mail. To prevent the sendmail daemon from being started comment out the part or /etc/rc.local that starts sendmail. For outgoing mail: a. install latest version of sendmail. - see config 1 for thing to change in sendmail config. - since mail delivery is being handled by main mail host there is no need for /bin/mail so - chmod u-s /bin/mail b. Install zmailer -- Ref 8 [URL to zmailer package] - zmailer does not use /bin/mail so chmod u-s /bin/mail 3. No need for mail whatsoever on this machine (incoming, outgoing, or internal). This is certainly most secure mode because e-mail will not be able to be sent from or to this machine. This basic restriction of outside access will prevent abuse of that access. How: To disable mail totally: - chmod u-s /usr/lib/sendmail & /usr/lib/sendmail.mx & /bin/mail - comment out the part of rc.local that starts sendmail Packages to enable better monitoring and security: ------------------------ + tripwire - Ref.13. - Include all suid & sgid file in config. - I've modified COPS script to check this with every run, awaiting response from Dan Farmer if he minds my releasing script. + tcp wrappers - Ref.4. + Cops - Ref. 14 - Set up to run each night - be careful to check the bitbucket output to ensure that it is working properly. + Modified portmapper, login, rshd, rlogind, pidentd from W. Venema Ref. 15 + TAMU tiger scripts - Ref. 16. Note: the Australian group SERT has put together a package called MegaPatch that includes several of these packages as well as many of the patches to SunOS previously mentioned. Ref. 18 References ---------- [1] Dan Farmer & Wietse Venema, "Improving the security of your Site by Breaking Into it", 1993. URL:ftp.win.tue.nl:/pub/security/admin-guide-to-cracking.Z [2] W. Cheswick & S. Bellovin, "Firewalls and Internet Security," Addison- Wesley, April 94. [3] H. Stern, "Managing NFS & NIS", O'Reilly & Associates, April 92 [4] Wietse Venema, "TCP WRAPPER: Network monitoring, access control and booby traps," Proceedings of the Third Usenix Unix Security Symposium, pg 85-92. URL:ftp.win.tue.nl:/pub/security/tcp_wrapper.ps.Z (paper - .txt.Z avail) URL:ftp.win.tue.nl:/pub/security/tcp_wrappers_6.3.shar.Z (package) [5] Eric Oliver, "How to shadow without C2 Auditing", June 94 URL:ftp.Hawaii.Edu:/???????? [6] [8lgm]-Advisory-7.UNIX.passwd.11-May-1994.NEWFIX [7] Proactive password changing programs (There are several this is the only one who's URL I had available) URL:info.mcs.anl.gov:/pub/systems/anlpasswd-2.2.tar.Z passwd+ URL:ftp.cc.utexas.edu:/pub/npasswd - NIS compatable [8] Zmailer package - URL: cs.toronto.edu:/pub/zmailer.tar.Z /pub/zmailer.README [9] Bryan Costales, Eric Allman & Neil Rickert, "Sendmail," O'Reilly & Associates, June 93 8lgm advisories are avaiable though the 8lgm file server - 8lgm-fileserver@bagpuss.demon.co.uk [10] [8lgm]-Advisory-5.UNIX.mail.24-Jan-1992 [11] [8lgm]-Advisory-5.UNIX.mail.24-Jan-1992.PATCH [12] [8lgm]-Advisory-6.UNIX.mail2.2-May-1994 [13] Tripwire - Gene Kim & Gene Spafford 1994 URL:ftp.cs.purdue.edu:/pub/spaf/COAST/Tripwire [14] Cops - Dan Farmer & Gene Spafford 1990 URL:ftp.cert.org:/pub/tools/cops [15] portmapper, login, rshd, rlogind - Wietse Venema URL:ftp.win.tue.nl:/pub/security/portmap.shar.Z URL:ftp.win.tue.nl:/pub/security/logdaemon-XX.tar.Z [16] TAMU tiger script. - Safford et al 93 URL:net.tamu.edu/pub/security/TAMU [17] Local mail delivery agents: URL:ftp.informatik.rwth-aachen.de:/pub/packages/procmail URL:ftp ---- ????? mail.local Joerg Czeranski [18] MegaPatch - SERT URL:ftp.sert.edu.au:/security/sert/tools/MegaPatch.1.7.tar.Z [19] Source Routinng Patch - URL:ftp.greatcircle.com:/pub/firewalls/digest/v03.n153.Z Acknowledgements: Thanks to all the people in comp.security.unix who offered their suggestions, and thanks to the following people for their kind review: casper@fwi.uva.nl (Casper Dik) baron@uhunix.uhcc.Hawaii.Edu (Baron K Fujimoto) rgoodman@uhunix.uhcc.Hawaii.Edu (Becky Goodman) newsham@uhunix.uhcc.Hawaii.Edu (Tim Newsham) andys@unipalm.co.uk (Andy Smith) ------ Other Thoughts for future development & other --- Didn't have enough time to do these as well as I'd like. + disable routed (standard routing table) Prevents receiving a false routing table. + Customizing ruserok() - a bit beyond the basics but here's some info: If you have source license to 4.1.3 modify the routine ruserok() to return -1 for the cases you wish to disallow. To disable .rhosts authentication entirely, simply have this routine return -1. Look at the file /usr/lib/shlib.etc/README for how to modify libc.so, note: also make the following changes: in the file /usr/lib/shlib.etc/README below the line % mv rpc_commondata. rpc_commondata.o insert % mv xccs.multibyte. xccs.multibyte.o in the Makefile: change the lines below to read as they do here: OBJSORT=/usr/lib/shlib.etc/objsort AWKFILE=/usr/lib/shlib.etc/awkfile and add the -ldl option at the end of both ld command lines. More info: ruserok(3), hosts.equiv(5) source code file /lib/libc/net/rcmd.c Ref. 4, Ref. 15