Differences between current version and predecessor to the previous major change of HowToShadowPasswordHOWTO.
Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History
Newer page: | version 3 | Last edited on Tuesday, October 26, 2004 11:08:35 am | by AristotlePagaltzis | |
Older page: | version 2 | Last edited on Friday, June 7, 2002 1:07:34 am | by perry | Revert |
@@ -1,2832 +1 @@
-
-
-
-Linux Shadow Password HOWTO
-
-
-
-----
-
-!!!Linux Shadow Password HOWTO
-
-!!Michael H. Jackson, mhjack@tscnet.comv1.3, 3 April 1996
-
-
-----
-''This document aims to describe how to obtain, install, and configure the Linux
-password ''Shadow Suite''. It also discusses obtaining, and re]installing other software and network daemons that require access to user
-passwords. This other software is not actually part of the Shadow Suite, but
-these programs will need to be recompiled to support the ''Shadow
-Suite''. This document also contains a programming example for adding
-shadow support to a program. Answers to some of the more frequently asked
-questions are included near the end of this document.''
-----
-
-
-
-
-!!1. Introduction.
-
-
-*1.1 Changes from the previous release.
-
-*1.2 New versions of this document.
-
-*1.3 Feedback.
-
-
-
-
-
-!!2. Why shadow your passwd file?
-
-
-*2.1 Why you might NOT want to shadow your passwd file.
-
-*2.2 Format of the /etc/passwd file
-
-*2.3 Format of the shadow file
-
-*2.4 Review of crypt(3).
-
-
-
-
-
-!!3. Getting the Shadow Suite.
-
-
-*3.1 History of the Shadow Suite for Linux
-
-*3.2 Where to get the Shadow Suite.
-
-*3.3 What is included with the Shadow Suite.
-
-
-
-
-
-!!4. Compiling the programs.
-
-
-*4.1 Unpacking the archive.
-
-*4.2 Configuring with the config.h file
-
-*4.3 Making backup copies of your original programs.
-
-*4.4 Running make
-
-
-
-
-
-!!5. Installing
-
-
-*5.1 Have a boot disk handy in case you break anything.
-
-*5.2 Removing duplicate man pages
-
-*5.3 Running make install
-
-*5.4 Running pwconv
-
-*5.5 Renaming npasswd and nshadow
-
-
-
-
-
-!!6. Other programs you may need to upgrade or patch
-
-
-*6.1 Slackware adduser program
-
-*6.2 The wu_ftpd Server
-
-*6.3 Standard ftpd
-
-*6.4 pop3d (Post Office Protocol 3)
-
-*6.5 xlock
-
-*6.6 xdm
-
-*6.7 sudo
-
-*6.8 imapd (E-Mail pine package])
-
-*6.9 pppd (Point-to-Point Protocol Server)
-
-
-
-
-!!7. Putting the Shadow Suite to use.
-
-
-**7.1 Adding, Modifying, and deleting users
-
-**7.2 The passwd command and passwd aging.
-
-**7.3 The login.defs file.
-
-**7.4 Group passwords.
-
-**7.5 Consistency checking programs
-
-**7.6 Dial-up passwords.
-
-
-
-
-!!8. Adding shadow support to a C program
-
-
-***8.1 Header files
-
-***8.2 libshadow.a library
-
-***8.3 Shadow Structure
-
-***8.4 Shadow Functions
-
-***8.5 Example
-
-
-
-
-!!9. Frequently Asked Questions.
-
-
-
-
-!!10. Copyright Message.
-
-
-
-
-!!11. Miscellaneous and Acknowledgments.
-
-
-!
-----
-
-!!1. Introduction.
-
-
-This is the Linux Shadow-Password-HOWTO. This document describes why and how
-to add shadow password support on a Linux system. Some examples of how to
-use some of the ''Shadow Suite's'' features is also included.
-
-
-When installing the ''Shadow Suite'' and when using many of the utility
-programs, you must be logged in as ''root''. When installing the
-''Shadow Suite'' you will be making changes to system software, and it
-is highly recommended that you make backup copies of programs as indicated.
-I also recommend that you read and understand all the instructions before
-you begin.
-
-
-
-
-!!1.1 Changes from the previous release.
-
-
-
-
-
-Additions:
-Added a sub-section on why you might not want to install shadow
-Added a sub-section on updating the xdm program
-Added a section on how to put Shadow Suite features to work
-Added a section containing frequently asked questions
-Corrections/Updates:
-Corrected html references on Sunsite
-Corrected section on wu-ftp to reflect adding -lshadow to the Makefile
-Corrected minor spelling and verbiage errors
-Changed section on wu-ftpd to support ELF
-Updated to reflect security problems in various login programs
-Updated to recommend the Linux Shadow Suite by Marek Michalkiewicz
-
-
-
-
-
-!!1.2 New versions of this document.
-
-
-
-The latest released version of this document can always be retrieved by
-anonymous FTP from:
-
-
-__sunsite.unc.edu__
-
-/pub/Linux/docs/HOWTO/Shadow-Password-HOWTO
-
-or:
-
-/pub/Linux/docs/HOWTO/other-formats/Shadow-Password-HOWTO{-html.tar,ps,dvi}.gz
-
-
-
-or via the World Wide Web from the
-Linux Documentation Project Web Server, at page:
-Shadow-Password-HOWTO
-or directly from me, <mhjack@tscnet.com>. It will
-also be posted to the newsgroup: comp.os.linux.answers
-
-
-This document is now packaged with the Shadow-YYDDMM packages.
-
-
-
-
-
-
-
-!!1.3 Feedback.
-
-
-
-Please send any comments, updates, or suggestions to me:
-Michael H. Jackson <mhjack@tscnet.com> The sooner I get feedback,
-the sooner I can update and correct this document. If you find any problems
-with it, please mail me directly as I very rarely stay up-to-date on the
-newsgroups.
-
-
-
-----
-
-!!2. Why shadow your passwd file?
-
-
-By default, most current Linux distributions do not contain the
-''Shadow Suite'' installed. This includes Slackware 2.3, Slackware 3.,
-and other popular distributions. One of the reasons for this is that
-the copyright notices in the original ''Shadow Suite'' were not clear
-on redistribution if a fee was charged. Linux uses a GNU Copyright
-(sometimes refereed to as a Copyleft) that allows people to package it into a
-convenient package (like a CD-ROM distribution) and charge a fee for it.
-
-
-The current maintainer of the ''Shadow Suite'',
-Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl>
-received the source code from the original author under a BSD style
-copyright that allowed redistribution. Now that the copyright issues
-are resolved, it is expected that future distributions will contain
-password shadowing by default. Until then, you will need to install it
-yourself.
-
-
-If you installed your distribution from a CD-ROM, you may find that, even
-though the distribution did not have the ''Shadow Suite'' installed,
-some of the files you need to install the ''Shadow Suite'' may be on
-the CD-ROM.
-
-
-''However, Shadow Suite versions 3.3.1, 3.3.1-2, and shadow-mk all have
-security problems with their login program and several other ''suid
-root'' programs that came with them, and should no longer be used.''
-
-
-All of the necessary files may be obtained via anonymous FTP or through the
-World Wide Web.
-
-
-On a Linux system without the ''Shadow Suite'' installed, user
-information including passwords is stored in the /etc/passwd file.
-The password is stored in an ''encrypted'' format. If you ask a
-cryptography expert, however, he or she will tell you that the password
-is actually in an ''encoded'' rather than ''encrypted'' format
-because when using crypt(3), the text is set to null and the password is the
-key. Therefore, from here on, I will use the term ''encoded'' in this
-document.
-
-
-The algorithm used to encode the password field is technically
-referred to as a ''one way hash function''. This is an algorithm that
-is easy to compute in one direction, but very difficult to calculate in the
-reverse direction. More about the actual algorithm used can be found
-in section 2.4 or your crypt(3) manual page.
-
-
-When a user picks or is assigned a password, it is encoded with a randomly
-generated value called the ''salt''. This means that any particular
-password could be stored in 4096 different ways. The ''salt'' value
-is then stored with the encoded password.
-
-
-When a user logs in and supplies a password, the ''salt'' is first
-retrieved from the stored encoded password. Then the supplied password is
-''encoded'' with the ''salt'' value, and then compared with the
-''encoded'' password. If there is a match, then the user is
-authenticated.
-
-
-It is computationally difficult (but not impossible) to take a randomly
-''encoded'' password and recover the original password. However, on
-any system with more than just a few users, at least some of the passwords
-will be common words (or simple variations of common words).
-
-
-System crackers know all this, and will simply encrypt a dictionary of
-words and common passwords using all possible 4096 ''salt'' values.
-Then they will compare the encoded passwords in your /etc/passwd
-file with their database. Once they have found a match, they have the
-password for another account. This is referred to as a ''dictionary
-attack'', and is one of the most common methods for gaining or expanding
-unauthorized access to a system.
-
-
-If you think about it, an 8 character password encodes to 4096 * 13 character
-strings. So a dictionary of say 400,000 common words, names, passwords, and
-simple variations would easily fit on a 4GB hard drive. The attacker need
-only sort them, and then check for matches. Since a 4GB hard drive can be
-had for under $1000.00, this is well within the means of most system
-crackers.
-
-
-Also, if a cracker obtains your /etc/passwd file first, they only
-need to encode the dictionary with the salt values actually
-contained in your /etc/passwd file. This method is usable by your
-average teenager with a couple of hundred spare Megabytes and a 486 class
-computer.
-
-
-Even without lots of drive space, utilities like crack(1) can usually break
-at least a couple of passwords on a system with enough users (assuming the
-users of the system are allowed to pick their own passwords).
-
-
-The /etc/passwd file also contains information like user ID's and
-group ID's that are used by many system programs. Therefore, the
-/etc/passwd file ''must'' remain world readable. If you were
-to change the /etc/passwd file so that nobody can read it, the
-first thing that you would notice is that the ls -l command now
-displays user ID's instead of names!
-
-
-The ''Shadow Suite'' solves the problem by relocating the passwords to
-another file (usually /etc/shadow). The /etc/shadow file is set so
-that it cannot be read by just anyone. Only ''root'' will be able to
-read and write to the /etc/shadow file. Some programs (like xlock)
-don't need to be able to change passwords, they only need to be able to
-verify them. These programs can either be run ''suid root'' or you can
-set up a group ''shadow'' that is allowed read only access to the
-/etc/shadow file. Then the program can be run ''sgid
-shadow''.
-
-
-By moving the passwords to the /etc/shadow file, we are effectively
-keeping the attacker from having access to the encoded passwords with which
-to perform a ''dictionary attack''.
-
-
-Additionally, the ''Shadow Suite'' adds lots of other nice features:
-
-
-****A configuration file to set login defaults (/etc/login.defs)
-****
-
-****Utilities for adding, modifying, and deleting user accounts and groups
-****
-
-****Password aging and expiration
-****
-
-****Account expiration and locking
-****
-
-****Shadowed group passwords (optional)
-****
-
-****Double length passwords (16 character passwords) NOT RECOMMENDED]
-
-****Better control over user's password selection
-
-****Dial-up passwords
-
-****Secondary authentication programs
[[NOT RECOMMENDED
]
-****
-
-****
-
-****
-
-****
-
-
-
-Installing the ''Shadow Suite'' contributes toward a more
-secure system, but there are many other things that can also be done to
-improve the security of a Linux system, and there will eventually be a
-series of Linux Security HOWTO's that will discuss other security measures
-and related issues.
-
-
-For current information on other Linux security issues, including warnings on
-known vulnerabilities see the
-Linux Security home page.
-
-
-
-
-
-
-!!2.1 Why you might NOT want to shadow your passwd file.
-
-
-
-There are a few circumstances and configurations in which installing the
-''Shadow Suite'' would ''NOT'' be a good idea:
-
-
-****The machine does not contain user accounts.
-****
-
-****Your machine is running on a LAN and is using NIS (Network Information
-Services) to get or supply user names and passwords to other machines on
-the network. (This can actually be done, but is beyond the scope of this
-document, and really won't increase security much anyway)
-****
-
-****Your machine is being used by terminal servers to verify users via NFS
-(Network File System), NIS, or some other method.
-****
-
-****Your machine runs other software that validates users, and there is no
-shadow version available, and you don't have the source code.
-****
-
-
-
-
-
-
-
-
-!!2.2 Format of the /etc/passwd file
-
-
-
-A non-shadowed /etc/passwd file has the following format:
-
-
-username:passwd:UID:GID:full_name:directory:shell
-
-
-Where:
-
-; __username__:
-
-The user (login) name
-; __passwd__:
-
-The encoded password
-; __UID__:
-
-Numerical user ID
-; __GID__:
-
-Numerical default group ID
-; __full_name__:
-
-The user's full name - Actually this field is
-called the GECOS (General Electric Comprehensive Operating System) field
-and can store information other than just the full name. The Shadow
-commands and manual pages refer to this field as the comment field.
-; __directory__:
-
-User's home directory (Full pathname)
-; __shell__:
-
-User's login shell (Full Pathname)
-
-For example:
-
-
-username:Npge08pfz4wuk:503:100:Full Name:/home/username:/bin/sh
-
-
-Where Np is the salt and ge08pfz4wuk is the ''encoded''
-password. The encoded salt/password could just as easily have been
-kbeMVnZM0oL7I and the two are exactly the same password. There are
-4096 possible encodings for the same password. (The example password in
-this case is 'password', a really ''bad'' password).
-
-
-Once the shadow suite is installed, the /etc/passwd file would
-instead contain:
-
-
-username:x:503:100:Full Name:/home/username:/bin/sh
-
-
-The x in the second field in this case is now just a place holder.
-The format of the /etc/passwd file really didn't change, it just no
-longer contains the ''encoded'' password. This means that any program
-that reads the /etc/passwd file but does not actually need to verify
-passwords will still operate correctly.
-
-
-The passwords are now relocated to the shadow file (usually
-/etc/shadow file).
-
-
-
-
-!!2.3 Format of the shadow file
-
-
-
-The /etc/shadow file contains the following information:
-
-
-username:passwd:last:may:must:warn:expire:disable:reserved
-
-
-Where:
-
-; __username__:
-
-The User Name
-; __passwd__:
-
-The Encoded password
-; __last__:
-
-Days since Jan 1, 1970 that password was last changed
-; __may__:
-
-Days before password may be changed
-; __must__:
-
-Days after which password must be changed
-; __warn__:
-
-Days before password is to expire that user is warned
-; __expire__:
-
-Days after password expires that account is disabled
-; __disable__:
-
-Days since Jan 1, 1970 that account is disabled
-; __reserved__:
-
-A reserved field
-
-The previous example might then be:
-
-
-username:Npge08pfz4wuk:9479::10000::::
-
-
-
-
-
-
-!!2.4 Review of crypt(3).
-
-
-
-From the crypt(3) manual page:
-
-
-"''crypt'' is the password encryption function. It is based on
-the ''Data Encryption Standard'' algorithm with variations intended (among
-other things) to discourage use of hardware implementations of a key search.
-
-
-[[The] key is a user's typed password. [[The encoded string is all NULLs]
-
-
-[[The] ''salt'' is a two-character string chosen from the set
-[[a-zA-Z0-9./]. This string is used to perturb the algorithm in one of 4096
-different ways.
-
-
-By taking the lowest 7 bit[[s] of each character of the key, a 56-bit key is
-obtained. This 56-bit key is used to encrypt repeatedly a constant string
-(usually a string consisting of all zeros). The returned value points to
-the encrypted password, a series of 13 printable ASCII characters (the first
-two characters represent the salt itself). The return value points to static
-data whose content is overwritten by each call.
-
-
-
-__Warning:__ The key space consists of 2**56 equal 7.2e16 possible values.
-Exhaustive searches of this key space __are possible__ using massively
-parallel computers. Software, such as crack(1), is available which
-will search the portion of this key space that is generally used by humans
-for passwords. Hence, password selection should, at minimum, avoid common
-words and names. The use of a passwd(1) program that checks for
-crackable passwords during the selection process is recommended.
-
-
-The DES algorithm itself has a few quirks which make the use of the
-crypt(3) interface a very poor choice for anything other than
-password authentication. If you are planning on using the crypt(3)
-interface for a cryptography project, don't do it: get a good book on
-encryption and one of the widely available DES libraries."
-
-
-Most ''Shadow Suites'' contain code for doubling the length of the
-password to 16 characters. Experts in des recommend against this,
-as the encoding is simply applied first to the left half and then to the
-right half of the longer password. Because of the way crypt works,
-this may make for a ''less'' secure encoded password then if double
-length passwords were not used in the first place. Additionally, it is less
-likely that a user will be able to remember a 16 character password.
-
-
-There is development work under way that would allow the authentication
-algorithm to be replaced with something more secure and with support for
-longer passwords (specifically the MD5 algorithm) and retain compatibility
-with the crypt method.
-
-
-If you are looking for a good book on encryption, I recommend:
-
-"Applied Cryptography: Protocols, Algorithms, and Source Code in C"
-by Bruce Schneier <schneier@chinet.com>
-ISBN: -471-59756-2
-
-
-
-
-
-
-
-----
-
-!!3. Getting the Shadow Suite.
-
-!!3.1 History of the Shadow Suite for Linux
-
-
-
-''DO NOT USE THE PACKAGES IN THIS SECTION, THEY HAVE SECURITY PROBLEMS''
-
-
-The original ''Shadow Suite'' was written by John F. Haugh II.
-
-
-There are several versions that have been used on Linux systems:
-
-
-****shadow-3.3.1 is the original.
-****
-
-****shadow-3.3.1-2 is Linux specific patch made by
-Florian La Roche <flla@stud.uni-sb.de> and contains some further
-enhancements.
-****
-
-****shadow-mk was specifically packaged for Linux.
-****
-
-
-
-The shadow-mk package contains the shadow-3.3.1 package
-distributed by John F. Haugh II with the shadow-3.3.1-2 patch
-installed, a few fixes made by
-Mohan Kokal <magnus@texas.net>
-that make installation a lot easier, a patch by Joseph R.M. Zbiciak
-for login1.c (login.secure) that eliminates the -f, -h security
-holes in /bin/login, and some other miscellaneous patches.
-
-
-The shadow.mk package was the ''previously'' recommended
-package, but should be replaced due to a ''security problem'' with the
-login program.
-
-
-There are ''security problems'' with Shadow versions 3.3.1, 3.3.1-2,
-and shadow-mk involving the login program. This login bug
-involves not checking the length of a login name. This causes the buffer to
-overflow causing crashes or worse. It has been rumored that this buffer
-overflow can allow someone with an account on the system to use this bug and
-the shared libraries to gain ''root'' access. I won't discuss exactly
-how this is possible because there are a lot of Linux systems that are
-affected, but systems with these ''Shadow Suites'' installed, and
-most pre-ELF distributions ''without'' the ''Shadow Suite''
-are vulnerable!
-
-
-For more information on this and other Linux security issues, see the
-Linux Security home page (Shared Libraries and login Program Vulnerability)
-
-
-
-
-
-
-!!3.2 Where to get the Shadow Suite.
-
-
-
-The only recommended ''Shadow Suite'' is still in BETA testing, however
-the latest versions are safe in a production environment and don't contain a
-vulnerable login program.
-
-
-The package uses the following naming convention:
-
-
-shadow-YYMMDD.tar.gz
-
-
-where YYMMDD is the issue date of the Suite.
-
-
-This version will eventually be ''Version 3.3.3'' when it is released
-from Beta testing, and is maintained by
-Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl>.
-It's available as:
-shadow-current.tar.gz.
-
-
-The following mirror sites have also been established:
-
-
-****
-ftp://ftp.icm.edu.pl/pub/Linux/shadow/shadow-current.tar.gz
-****
-
-****
-ftp://iguana.hut.fi/pub/linux/shadow/shadow-current.tar.gz
-****
-
-****
-ftp://ftp.cin.net/usr/ggallag/shadow/shadow-current.tar.gz
-****
-
-****
-ftp://ftp.netural.com/pub/linux/shadow/shadow-current.tar.gz
-****
-
-
-
-You should use the currently available version.
-
-
-You should NOT use a version ''older'' than shadow-960129 as
-they also have the login security problem discussed above.
-
-
-When this document refers to the ''Shadow Suite'' I am referring to the
-this package. It is assumed that this is the package that you are using.
-
-
-For reference, I used shadow-960129 to make these installation
-instructions.
-
-
-If you were previously using shadow-mk, you should upgrade to this
-version and rebuild everything that you originally compiled.
-
-
-
-
-!!3.3 What is included with the Shadow Suite.
-
-
-
-The ''Shadow Suite'' contains replacement programs for:
-
-
-su, login, passwd, newgrp, chfn, chsh, and id
-
-
-The package also contains the new programs:
-
-
-chage, newusers, dpasswd, gpasswd, useradd, userdel, usermod, groupadd,
-groupdel, groupmod, groups, pwck, grpck, lastlog, pwconv, and pwunconv
-
-
-Additionally, the library: libshadow.a is included for writing and/or
-compiling programs that need to access user passwords.
-
-
-Also, manual pages for the programs are also included.
-
-
-There is also a configuration file for the login program which will be
-installed as /etc/login.defs.
-
-
-
-----
-
-!!4. Compiling the programs.
-
-!!4.1 Unpacking the archive.
-
-
-
-The first step after retrieving the package is unpacking it. The package
-is in the tar (tape archive) format and compressed using gzip, so first move
-it to /usr/src, then type:
-
-
-tar -xzvf shadow-current.tar.gz
-
-
-
-
-This will unpack it into the directory: /usr/src/shadow-YYMMDD
-
-
-
-
-!!4.2 Configuring with the config.h file
-
-
-
-The first thing that you need to do is to copy over the Makefile
-and the config.h file:
-
-
-cd /usr/src/shadow-YYMMDD
-cp Makefile.linux Makefile
-cp config.h.linux config.h
-
-
-
-
-You should then take a look at the config.h file. This file
-contains definitions for some of the configuration options. If you are
-using the ''recommended'' package, I recommend that you disable group
-shadow support for your first time around.
-
-
-By default shadowed group passwords are enabled. To disable these edit the
-config.h file, and change the #define SHADOWGRP to
-#undef SHADOWGRP. I recommend that you disable them to start
-with, and then if you really want group passwords and group administrators
-that you enable it later and recompile. If you leave it enabled, you
-''must'' create the file /etc/gshadow.
-
-
-Enabling the long passwords option is NOT recommended as discussed above.
-
-
-''Do NOT'' change the setting: #undef AUTOSHADOW
-
-
-The AUTOSHADOW option was originally designed so that programs
-that were shadow ignorant would still function. This sounds good in theory,
-but does not work correctly. If you enable this option, and the program runs
-as root, it may call getpwnam() as root, and later write the modified
-entry back to the /etc/passwd file (with the ''no-longer-shadowed
-password''). Such programs include chfn and chsh. (You can't get around
-this by swapping real and effective uid before calling getpwnam()
-because root may use chfn and chsh too.)
-
-
-The same warning is also valid if you are building libc, it has a
-SHADOW_COMPAT option which does the same thing. It ''should
-NOT'' be used! If you start getting encoded passwords back in your
-/etc/passwd file, this is the problem.
-
-
-If you are using a libc version prior to 4.6.27, you will need to
-make a couple more changes to config.h and the Makefile.
-To config.h edit and change:
-
-
-#define HAVE_BASENAME
-
-
-to:
-
-
-#undef HAVE_BASENAME
-
-
-And then in the Makefile, change:
-
-
-
-
-
-SOBJS = smain.o env.o entry.o susetup.o shell.o \
-sub.o mail.o motd.o sulog.o age.o tz.o hushed.o
-SSRCS = smain.c env.c entry.c setup.c shell.c \
-pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \
-tz.c hushed.c
-
-
-
-
-SOBJS = smain.o env.o entry.o susetup.o shell.o \
-sub.o mail.o motd.o sulog.o age.o tz.o hushed.o basename.o
-SSRCS = smain.c env.c entry.c setup.c shell.c \
-pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \
-tz.c hushed.c basename.c
-
-
-These changes add the code contained in basename.c which is
-contained in libc 4.6.27 and later.
-
-
-
-
-!!4.3 Making backup copies of your original programs.
-
-
-
-It would also be a good idea to track down and make backup copies of the
-programs that the shadow suite will replace. On a Slackware 3.0 system
-these are:
-
-
-****/bin/su
-****
-
-****/bin/login
-****
-
-****/usr/bin/passwd
-****
-
-****/usr/bin/newgrp
-****
-
-****/usr/bin/chfn
-****
-
-****/usr/bin/chsh
-****
-
-****/usr/bin/id
-****
-
-
-
-The BETA package has a ''save'' target in the Makefile, but it's
-commented out because different distributions place the programs in
-different places.
-
-
-You should also make a backup copy of your /etc/passwd file, but be
-careful to name it something else if you place it in the same directory
-so you don't overwrite the passwd command.
-
-
-
-
-!!4.4 Running make
-
-
-
-''You need to be logged as root to do most of the installation''.
-
-
-Run make to compile the executables in the package:
-
-
-make all
-
-
-
-
-You may see the warning: rcsid defined but not used. This is fine,
-it just happens because the author is using a version control package.
-
-
-
-----
-
-!!5. Installing
-
-!!5.1 Have a boot disk handy in case you break anything.
-
-
-
-If something goes terribly wrong, it would be handy to have a boot disk.
-If you have a boot/root combination from your installation, that will work,
-otherwise see the
-Bootdisk-HOWTO, which describes how to make a bootable disk.
-
-
-
-
-!!5.2 Removing duplicate man pages
-
-
-
-You should also move the manual pages that are about to be replaced. Even
-if you are brave enough install the Shadow Suite without making backups, you
-will still want to remove the old manual pages. The new manual pages won't
-normally overwrite the old ones because the old ones are probably compressed.
-
-
-You can use a combination of: man -aW command and locate
-command to locate the manual pages that need to be (re)moved. It's
-generally easier to figure out which are the older pages before you run
-make install.
-
-
-If you are using the Slackware 3.0 distribution, then the manual pages you
-want to remove are:
-
-
-****/usr/man/man1/chfn.1.gz
-****
-
-****/usr/man/man1/chsh.1.gz
-****
-
-****/usr/man/man1/id.1.gz
-****
-
-****/usr/man/man1/login.1.gz
-****
-
-****/usr/man/man1/passwd.1.gz
-****
-
-****/usr/man/man1/su.1.gz
-****
-
-****/usr/man/man5/passwd.5.gz
-****
-
-
-
-There may also be man pages of the same name in the /var/man/cat[[1-9]
-subdirectories that should also be deleted.
-
-
-
-
-!!5.3 Running make install
-
-
-
-You are now ready to type: (do this as root)
-
-
-make install
-
-
-
-
-This will install the new and replacement programs and fix-up the file
-permissions. It will also install the man pages.
-
-
-This also takes care of installing the Shadow Suite include files in the
-correct places in /usr/include/shadow.
-
-
-Using the BETA package you must manually copy the file login.defs
-to the /etc subdirectory and make sure that only ''root'' can
-make changes to it.
-
-
-cp login.defs /etc
-chmod 700 /etc/login.defs
-
-
-
-
-This file is the configuration file for the ''login'' program.
-You should review and make changes to this file for your particular system.
-This is where you decide which tty's root can login from, and set other
-security policy settings (like password expiration defaults).
-
-
-
-
-!!5.4 Running pwconv
-
-
-
-The next step is to run pwconv. This must also be done as
-''root'', and is best done from the /etc subdirectory:
-
-
-cd /etc
-/usr/sbin/pwconv
-
-
-
-
-pwconv takes your /etc/passwd file and strips out the
-fields to create two files: /etc/npasswd and /etc/nshadow.
-
-
-A pwunconv program is also provided if you need to make a normal
-/etc/passwd file out of an /etc/passwd and
-/etc/shadow combination.
-
-
-
-
-!!5.5 Renaming npasswd and nshadow
-
-
-
-Now that you have run pwconv you have created the files
-/etc/npasswd and /etc/nshadow. These need to be copied
-over to /etc/passwd and /etc/shadow. We also want to make
-a backup copy of the original /etc/passwd file, and make sure only
-root can read it. We'll put the backup in root's home directory:
-
-
-cd /etc
-cp passwd ~passwd
-chmod 600 ~passwd
-mv npasswd passwd
-mv nshadow shadow
-
-
-
-
-You should also ensure that the file ownerships and permissions are
-correct. If you are going to be using ''X-Windows'', the
-xlock and xdm programs need to be able to read the
-shadow file (but not write it).
-
-
-There are two ways that this can be done. You can set xlock to
-suid root (xdm is usually run as root anyway). Or you can make
-the shadow file owned by root with a group of
-shadow, but before you do this, make sure that you have a shadow
-group (look in /etc/group). None of the users on the system
-should actually be in the shadow group.
-
-
-chown root.root passwd
-chown root.shadow shadow
-chmod 0644 passwd
-chmod 0640 shadow
-
-
-
-
-Your system now has the password file shadowed. You ''should'' now pop
-over to another virtual terminal and verify that you can login.
-
-
-''Really, do this now!''
-
-
-If you can't, then something is wrong! To get back to a non-shadowed state,
-do the following the following:
-
-
-cd /etc
-cp ~passwd passwd
-chmod 644 passwd
-
-
-
-
-You would then restore the files that you saved earlier to their proper
-locations.
-
-
-
-
-
-
-----
-
-!!6. Other programs you may need to upgrade or patch
-
-
-Even though the shadow suite contains replacement programs for most
-programs that need to access passwords, there are a few additional programs
-on most systems that require access to passwords.
-
-
-If you are running a ''Debian Distribution'' (or even if you are not),
-you can obtain Debian sources for the programs that need to be rebuild from:
-ftp://ftp.debian.org/debian/stable/source/
-
-
-The remainder of this section discusses how to upgrade adduser,
-wu_ftpd, ftpd, pop3d, xlock,
-xdm and sudo so that they support the shadow suite.
-
-
-See the section
-Adding Shadow Support to a C program
-for a discussion on how to put shadow support into any other program
-that needs it (although the program must then be run SUID root or SGID shadow
-to be able to actually access the shadow file).
-
-
-
-
-!!6.1 Slackware adduser program
-
-
-
-Slackware distributions (and possibly some others) contain a interactive
-program for adding users called /sbin/adduser. A shadow version
-of this program can be obtained from
-ftp://sunsite.unc.edu/pub/Linux/ system/Admin/accounts/adduser.shadow-1.4.tar.gz.
-
-
-I would encourage you to use the programs that are supplied with the
-''Shadow Suite'' (useradd, usermod, and
-userdel) instead of the slackware adduser program. They
-take a little time to learn how to use, but it's well worth the effort
-because you have much more control and they perform proper file locking on
-the /etc/passwd and /etc/shadow file (adduser
-doesn't).
-
-
-See the section on
-Putting the Shadow Suite to use
-for more information.
-
-
-But if you gotta have it,
here is what you do:
-
-
-tar -xzvf adduser.shadow-1.4.tar.gz
-cd adduser
-make clean
-make adduser
-chmod 700 adduser
-cp adduser /sbin
-
-
-
-
-
-
-!!6.2 The wu_ftpd Server
-
-
-
-Most Linux systems some with the wu_ftpd server. If your
-distribution does not come with shadow installed, then your wu_ftpd
-will not be compiled for shadow. wu_ftpd is launched from
-inetd/tcpd as a ''root'' process. If you are running an old
-wu_ftpd daemon, you will want to upgrade it anyway because older
-ones had a bug that would allow the ''root'' account to be compromised
-(For more info see the
-Linux security home page).
-
-
-Fortunately, you only need to get the source code and recompile it
-with shadow enabled.
-
-
-If you are not running an ELF system, The wu_ftp server can be
-found on Sunsite as
-wu-ftp-2.4-fixed.tar.gz
-
-Once you retrieve the server, put it in /usr/src, then type:
-
-
-cd /usr/src
-tar -xzvf wu-ftpd-2.4-fixed.tar.gz
-cd wu-ftpd-2.4-fixed
-cp ./src/config/config.lnx.shadow ./src/config/config.lnx
-
-
-
-
-Then edit ./src/makefiles/Makefile.lnx, and change the line:
-
-
-LIBES = -lbsd -support
-
-
-to:
-
-
-LIBES = -lbsd -support -lshadow
-
-
-
-
-Now you are ready to run the build script and install:
-
-
-cd /usr/src/wu-ftpd-2.4-fixed
-/usr/src/wu-ftp-2.4.fixed/build lnx
-cp /usr/sbin/wu.ftpd /usr/sbin/wu.ftpd.old
-cp ./bin/ftpd /usr/sbin/wu.ftpd
-
-
-
-
-This uses the Linux shadow configuration file, compiles and installs
-the server.
-
-
-On my Slackware 2.3 system I also had to do the following before running
-build:
-
-
-cd /usr/include/netinet
-ln -s in_systm.h in_system.h
-cd -
-
-
-
-
-Problems have been reported compiling this package under ELF systems, but
-the Beta version of the next release works fine.
-It can be found as
-wu-ftp-2.4.2-beta-10.tar.gz
-
-Once you retrieve the server, put it in /usr/src, then type:
-
-
-cd /usr/src
-tar -xzvf wu-ftpd-2.4.2-beta-9.tar.gz
-cd wu-ftpd-beta-9
-cd ./src/config
-
-
-
-
-Then edit config.lnx, and change:
-
-
-#undef SHADOW.PASSWORD
-
-
-to:
-
-
-#define SHADOW.PASSWORD
-
-
-Then,
-
-
-cd ../Makefiles
-
-
-and edit the file Makefile.lnx
-and change:
-
-
-LIBES = -lsupport -lbsd # -lshadow
-
-
-to:
-
-
-LIBES = -lsupport -lbsd -lshadow
-
-
-Then build and install:
-
-
-cd ..
-build lnx
-cp /usr/sbin/wu.ftpd /usr/sbin/wu.ftpd.old
-cp ./bin/ftpd /usr/sbin/wu.ftpd
-
-
-
-
-Note that you should check your /etc/inetd.conf file to make sure
-that this is where your wu.ftpd server really lives. It has been reported
-that some distributions place the server daemons in different places, and
-then wu.ftpd in particular may be named something else.
-
-
-
-
-!!6.3 Standard ftpd
-
-
-
-If you are running the standard ftpd server, I would recommend that
-you upgrade to the wu_ftpd server. Aside from the known bug
-discussed above, it's generally thought to be more secure.
-
-
-If you insist on the standard one, or you need ''NIS'' support, Sunsite
-has
-ftpd-shadow-nis.tgz
-
-
-
-!!6.4 pop3d (Post Office Protocol 3)
-
-
-
-If you need to support the third ''Post Office Protocol (POP3)'', you
-will need to recompile a pop3d program. pop3d is normally
-run by inetd/tcpd as root.
-
-
-There are two versions available from Sunsite:
-pop3d-1.00.4.linux.shadow.tar.gz
-and
-pop3d+shadow+elf.tar.gz
-
-Both of these are fairly straight forward to install.
-
-
-
-
-!!6.5 xlock
-
-
-
-If you install the shadow suite, and then run ''X Windows System'' and
-lock the screen without upgrading your xlock, you will have to use
-CNTL-ALT-Fx to switch to another ''tty'', login, and kill the
-xlock process (or use CNTL-ALT-BS to kill the X server).
-Fortunately it's fairly easy to upgrade your xlock program.
-
-
-If you are running XFree86 Versions 3.x.x, you are probably using
-xlockmore (which is a great screen-saver in addition to a lock).
-This package supports ''shadow'' with a recompile. If you have an
-older xlock, I recommend that you upgrade to this one.
-
-
-xlockmore-3.5.tgz is available at:
-ftp://sunsite.unc.edu/pub/Linux/X11/xutils/screensavers/xlockmore-3.7.tgz
-
-Basically, this is what you need to do:
-
-
-Get the xlockmore-3.7.tgz file and put it in /usr/src unpack it:
-
-
-tar -xzvf xlockmore-3.7.tgz
-
-
-
-
-Edit the file: /usr/X11R6/lib/X11/config/linux.cf, and change the line:
-
-
-#define !HasShadowPasswd NO
-to
-#define !HasShadowPasswd YES
-
-
-
-
-Then build the executables:
-
-
-cd /usr/src/xlockmore
-xmkmf
-make depend
-make
-
-
-
-
-Then move everything into place and update file ownerships and permissions:
-
-
-cp xlock /usr/X11R6/bin/
-cp XLock /var/X11R6/lib/app-defaults/
-chown root.shadow /usr/X11R6/bin/xlock
-chmod 2755 /usr/X11R6/bin/xlock
-chown root.shadow /etc/shadow
-chmod 640 /etc/shadow
-
-
-
-
-Your xlock will now work correctly.
-
-
-
-
-!!6.6 xdm
-
-
-
-xdm is a program that presents a login screen for X-Windows. Some
-systems start xdm when the system is told to goto a specified run
-level (see /etc/inittab.
-
-
-With the ''Shadow Suite'' install, xdm will need to be
-updated. Fortunately it's fairly easy to upgrade your xdm program.
-
-
-
-
-
-xdm.tar.gz is available at:
-ftp://sunsite.unc.edu/pub/Linux/X11/xutils/xdm.tar.gz
-
-Get the xdm.tar.gz file and put it in /usr/src, then to
-unpack it:
-
-
-tar -xzvf xdm.tar.gz
-
-
-
-
-Edit the file: /usr/X11R6/lib/X11/config/linux.cf, and change the line:
-
-
-#define !HasShadowPasswd NO
-to
-#define !HasShadowPasswd YES
-
-
-
-
-Then build the executables:
-
-
-cd /usr/src/xdm
-xmkmf
-make depend
-make
-
-
-
-
-Then move everything into place:
-
-
-cp xdm /usr/X11R6/bin/
-
-
-
-
-xdm is run as ''root'' so you don't need to change it file
-permissions.
-
-
-
-
-
-
-
-!!6.7 sudo
-
-
-
-The program sudo allows a system administrator to let users run
-programs that would normally require root access. This is handy because it
-lets the administrator limit access to the root account itself while still
-allowing users to do things like mounting drives.
-
-
-sudo needs to read passwords because it verifies the users password
-when it's invoked. sudo already runs SUID root, so accessing the
-/etc/shadow file is not a problem.
-
-
-sudo for the shadow suite, is available as at:
-ftp://sunsite.unc.edu/pub/Linux/system/Admin/sudo-1.2-shadow.tgz
-
-''Warning'': When you install sudo your /etc/sudoers
-file will be replaced with a default one, so you need to make a backup of it
-if you have added anything to the default one. (you could also edit the
-Makefile and remove the line that copies the default file to /etc).
-
-
-The package is already setup for shadow, so all that's required is to
-recompile the package (put it in /usr/src):
-
-
-cd /usr/src
-tar -xzvf sudo-1.2-shadow.tgz
-cd sudo-1.2-shadow
-make all
-make install
-
-
-
-
-
-
-!!6.9 pppd (Point-to-Point Protocol Server)
-
-
-
-The pppd server can be setup to use several types of authentication:
-''Password Authentication Protocol'' (PAP) and ''Cryptographic
-Handshake Authentication Protocol'' (CHAP). The pppd server usually
-reads the password strings that it uses from /etc/ppp/chap-secrets
-and/or /etc/ppp/pap-secrets. If you are using this default behavior
-of pppd, it is not necessary to reinstall pppd.
-
-
-pppd also allows you to use the ''login'' parameter (either on the
-command line, or in the configuration or options file). If the
-''login'' option is given, then pppd will use the /etc/passwd
-file for the username and passwords for the ''PAP''. This, of course,
-will no longer work now that our password file is shadowed. For pppd-1.2.1d
-this requires adding code for shadow support.
-
-
-The example given in the next section is adding shadow support to
-pppd-1.2.1d (an older version of pppd).
-
-
-pppd-2.2.0 already contains shadow support.
-
-
-
-----
-
-!! 7. Putting the Shadow Suite to use.
-
-
-This section discusses some of the things that you will want to know now
-that you have the ''Shadow Suite'' installed on your system. More
-information is contained in the manual pages for each command.
-
-
-
-
-!!7.1 Adding, Modifying, and deleting users
-
-
-
-The ''Shadow Suite'' added the following command line oriented commands
-for adding, modifying, and deleting users. You may also have installed the
-adduser program.
-
-
-
-
-!useradd
-
-
-The useradd command can be used to add users to the system. You
-also invoke this command to change the default settings.
-
-
-The first thing that you should do is to examine the default settings and
-make changes specific to your system:
-
-
-useradd -D
-
-
-----
-
-GROUP=1
-HOME=/home
-INACTIVE=
-EXPIRE=
-SHELL=
-SKEL=/etc/skel
-
-----
-
-
-The defaults are probably not what you want, so if you started adding users
-now you would have to specify all the information for each user. However, we
-can and should change the default values.
-
-
-On my system:
-
-
-****I want the default group to be 100
-****
-
-****I want passwords to expire every 60 days
-****
-
-****I don't want to lock an account because the password is expired
-****
-
-****I want to default shell to be /bin/bash
-****
-
-To make these changes I would use:
-
-
-useradd -D -g100 -e60 -f0 -s/bin/bash
-
-
-
-
-Now running useradd -D will give:
-----
-
-GROUP=100
-HOME=/home
-INACTIVE=
-EXPIRE=60
-SHELL=/bin/bash
-SKEL=/etc/skel
-
-----
-
-
-Just in case you wanted to know, these defaults are stored in the file
-/etc/default/useradd.
-
-
-Now you can use useradd to add users to the system. For example,
-to add the user fred, using the defaults, you would use the
-following:
-
-
-useradd -m -c "Fred Flintstone" fred
-
-
-This will create the following entry in the /etc/passwd file:
-
-
-fred:*:505:100:Fred Flintstone:/home/fred:/bin/bash
-
-
-And the following entry in the /etc/shadow file:
-
-
-fred:!:::60::::
-
-
-fred's home directory will be created and the contents of
-/etc/skel will be copied there because of the -m switch.
-
-
-Also, since we did not specify a UID, the next available one was used.
-
-
-fred's account is created, but fred still won't be able to
-login until we unlock the account. We do this by changing the password.
-
-
-passwd fred
-
-
-----
-
-Changing password for fred
-Enter the new password (minimum of 5 characters)
-Please use a combination of upper and lower case letters and numbers.
-New Password: *******
-Re-enter new password: *******
-
-----
-Now the /etc/shadow will contain:
-
-
-fred:J0C.WDR1amIt6:9559::60::::
-
-
-And fred will now be able to login and use the system. The nice
-thing about useradd and the other programs that come with the
-''Shadow Suite'' is that they make changes to the /etc/passwd
-and /etc/shadow files atomically. So if you are adding a user, and
-another user is changing their password at the same time, both operations
-will be performed correctly.
-
-
-You should use the supplied commands rather than directly editing
-/etc/passwd and /etc/shadow. If you were editing the
-/etc/shadow file, and a user were to change his password while you
-are editing, and then you were to save the file you were editing, the user's
-password change would be lost.
-
-
-Here is a small interactive script that adds users using useradd
-and passwd:
-----
-
-#!/bin/bash
-#
-# /sbin/newuser - A script to add users to the system using the Shadow
-# Suite's useradd and passwd commands.
-#
-# Written my Mike Jackson <mhjack@tscnet.com> as an example for the Linux
-# Shadow Password Howto. Permission to use and modify is expressly granted.
-#
-# This could be modified to show the defaults and allow modification similar
-# to the Slackware Adduser program. It could also be modified to disallow
-# stupid entries. (i.e. better error checking).
-#
-##
-# Defaults for the useradd command
-##
-GROUP=100 # Default Group
-HOME=/home # Home directory location (/home/username)
-SKEL=/etc/skel # Skeleton Directory
-INACTIVE=0 # Days after password expires to disable account (=never)
-EXPIRE=60 # Days that a passwords lasts
-SHELL=/bin/bash # Default Shell (full path)
-##
-# Defaults for the passwd command
-##
-PASSMIN=0 # Days between password changes
-PASSWARN=14 # Days before password expires that a warning is given
-##
-# Ensure that root is running the script.
-##
-WHOAMI=`/usr/bin/whoami`
-if [[ $WHOAMI != "root" ]; then
-echo "You must be root to add news users!"
-exit 1
-fi
-##
-# Ask for username and fullname.
-##
-echo ""
-echo -n "Username: "
-read USERNAME
-echo -n "Full name: "
-read FULLNAME
-#
-echo "Adding user: $USERNAME."
-#
-# Note that the "" around $FULLNAME is required because this field is
-# almost always going to contain at least on space, and without the "'s
-# the useradd command would think that you we moving on to the next
-# parameter when it reached the SPACE character.
-#
-/usr/sbin/useradd -c"$FULLNAME" -d$HOME/$USERNAME -e$EXPIRE \
--f$INACTIVE -g$GROUP -m -k$SKEL -s$SHELL $USERNAME
-##
-# Set password defaults
-##
-/bin/passwd -n $PASSMIN -w $PASSWARN $USERNAME >/dev/null 2>&1
-##
-# Let the passwd command actually ask for password (twice)
-##
-/bin/passwd $USERNAME
-##
-# Show what was done.
-##
-echo ""
-echo "Entry from /etc/passwd:"
-echo -n " "
-grep "$USERNAME:" /etc/passwd
-echo "Entry from /etc/shadow:"
-echo -n " "
-grep "$USERNAME:" /etc/shadow
-echo "Summary output of the passwd command:"
-echo -n " "
-passwd -S $USERNAME
-echo ""
-
-----
-
-
-Using a script to add new users is really much more preferable than editing
-the /etc/passwd or /etc/shadow files directly or using a
-program like the Slackware adduser program. Feel free to use and
-modify this script for your particular system.
-
-
-For more information on the useradd see the online manual page.
-
-
-
-
-!usermod
-
-
-The usermod program is used to modify the information on a user.
-The switches are similar to the useradd program.
-
-
-Let's say that you want to change fred's shell, you would do the
-following:
-
-
-usermod -s /bin/tcsh fred
-
-
-Now fred's /etc/passwd file entry would be change to this:
-
-
-fred:*:505:100:Fred Flintstone:/home/fred:/bin/tcsh
-
-
-Let's make fred's account expire on 09/15/97:
-
-
-usermod -e 09/15/97 fred
-
-
-Now fred's entry in /etc/shadow becomes:
-
-
-fred:J0C.WDR1amIt6:9559::60:::10119:
-
-
-
-
-For more information on the usermod command see the online manual
-page.
-
-
-
-
-!userdel
-
-
-userdel does just what you would expect, it deletes the user's
-account. You simply use:
-
-
-userdel -r username
-
-
-The -r causes all files in the user's home directory to be removed
-along with the home directory itself. Files located in other file system
-will have to be searched for and deleted manually.
-
-
-If you want to simply lock the account rather than delete it, use the
-passwd command instead.
-
-
-
-
-!!7.2 The passwd command and passwd aging.
-
-
-
-The passwd command has the obvious use of changing passwords.
-Additionally, it is used by the ''root'' user to:
-
-
-****Lock and unlock accounts (-l and -u)
-****
-
-****Set the maximum number of days that a password remains valid
-(-x)
-****
-
-****Set the minimum days between password changes (-n)
-****
-
-****Sets the number of days of warning that a password is about to expire
-(-w)
-****
-
-****Sets the number of days after the password expires before the account
-is locked (-i)
-****
-
-****Allow viewing of account information in a clearer format (-S)
-****
-
-
-
-For example, let look again at fred
-
-
-passwd -S fred
-fred P 03/04/96 0 60 0
-
-
-This means that fred's password is valid, it was last changed on
-03/04/96, it can be changed at any time, it expires after 60 days, fred will
-not be warned, and and the account won't be disabled when the password
-expires.
-
-
-This simply means that if fred logs in after the password expires,
-he will be prompted for a new password at login.
-
-
-If we decide that we want to warn fred 14 days before his password
-expires and make his account inactive 14 days after he lets it expire, we
-would need to do the following:
-
-
-passwd -w14 -i14 fred
-
-
-Now fred is changed to:
-
-
-fred P 03/04/96 0 60 14 14
-
-
-For more information on the passwd command see the online manual
-page.
-
-
-
-
-!!7.3 The login.defs file.
-
-
-
-The file /etc/login is the configuration file for the
-login program and also for the ''Shadow Suite'' as a whole.
-
-
-/etc/login contains settings from what the prompts will look like
-to what the default expiration will be when a user changes his password.
-
-
-The /etc/login.defs file is quite well documented just by the
-comments that are contained within it. However, there are a few things to
-note:
-
-
-****It contains flags that can be turned on or off that determine the
-amount of logging that takes place.
-****
-
-****It contains pointers to other configuration files.
-****
-
-****It contains defaults assignments for things like password aging.
-****
-
-
-
-From the above list you can see that this is a rather important file, and
-you should make sure that it is present, and that the settings are what you
-desire for your system.
-
-
-
-
-!!7.4 Group passwords.
-
-
-
-The /etc/groups file may contain passwords that permit a user to
-become a member of a particular group. This function is enabled if you
-define the constant SHADOWGRP in the
-/usr/src/shadow-YYMMDD/config.h file.
-
-
-If you define this constant and then compile, you must create an
-/etc/gshadow file to hold the group passwords and the group
-administrator information.
-
-
-When you created the /etc/shadow, you used a program called
-pwconv, there no equivalent program to create the
-/etc/gshadow file, but it really doesn't matter, it takes care of
-itself.
-
-
-To create the initial /etc/gshadow file do the following:
-
-
-touch /etc/gshadow
-chown root.root /etc/gshadow
-chmod 700 /etc/gshadow
-
-
-
-
-Once you create new groups, they will be added to the /etc/group
-and the /etc/gshadow files. If you modify a group by adding or
-removing users or changing the group password, the /etc/gshadow
-file will be changed.
-
-
-The programs groups, groupadd, groupmod, and
-groupdel are provided as part of the ''Shadow Suite'' to
-modify groups.
-
-
-The format of the /etc/group file is as follows:
-
-
-groupname:!:GID:member,member,...
-
-
-Where:
-
-; __groupname__:
-
-The name of the group
-; __!__:
-
-The field that normally holds the password, but that
-is now relocated to the /etc/gshadow file.
-; __GID__:
-
-The numerical group ID number
-; __member__:
-
-List of group members
-
-
-
-The format of the /etc/gshadow file is as follows:
-
-
-groupname:password:admin,admin,...:member,member,...
-
-
-Where:
-
-; __groupname__:
-
-The name of the group
-; __password__:
-
-The encoded group password.
-; __admin__:
-
-List of group administrators
-; __member__:
-
-List of group members
-
-
-
-The command gpasswd is used only for adding or removing
-administrators and members to or from a group. root or someone in
-the list of administrators may add or remove group members.
-
-
-The groups password can be changed using the passwd command by
-''root'' or anyone listed as an administrator for the group.
-
-
-Despite the fact that there is not currently a manual page for
-gpasswd, typing gpasswd without any parameters gives a
-listing of options. It's fairly easy to grasp how it all works once you
-understand the file formats and the concepts.
-
-
-
-
-
-
-
-!!7.5 Consistency checking programs
-
-
-
-
-
-
-
-
-!pwck
-
-
-The program pwck is provided to provide a consistency check on the
-/etc/passwd and /etc/shadow files. It will check each
-username and verify that it has the following:
-
-
-****the correct number of fields
-****
-
-****unique user name
-****
-
-****valid user and group identifier
-****
-
-****valid primary group
-****
-
-****valid home directory
-****
-
-****valid login shell
-****
-
-
-
-It will also warn of any account that has no password.
-
-
-It's a good idea to run pwck after installing the ''Shadow
-Suite''. It's also a good idea to run it periodically, perhaps weekly or
-monthly. If you use the -r option, you can use cron to run
-it on a regular basis and have the report mailed to you.
-
-
-
-
-!grpck
-
-
-grpck is the consistency checking program for the
-/etc/group and /etc/gshadow files. It performs the
-following checks:
-
-
-****the correct number of fields
-****
-
-****unique group name
-****
-
-****valid list of members and administrators
-****
-
-
-
-It also has the -r option for automated reports.
-
-
-
-
-!!7.6 Dial-up passwords.
-
-
-
-Dial-up passwords are another optional line of defense for systems that allow
-dial-in access. If you have a system that allows many people to connect
-locally or via a network, but you want to limit who can dial in and connect,
-then dial-up passwords are for you. To enable dial-up passwords, you must
-edit the file /etc/login.defs and ensure that
-DIALUPS_CHECK_ENAB is set to yes.
-
-
-Two files contain the dial-up information, /etc/dialups which
-contains the ttys (one per line, with the leading "/dev/" removed). If a
-tty is listed then dial-up checks are performed.
-
-
-The second file is the /etc/d_passwd file. This file contains the
-fully qualified path name of a shell, followed by an optional password.
-
-
-If a user logs into a line that is listed in /etc/dialups, and his
-shell is listed in the file /etc/d_passwd he will be allowed access
-only by suppling the correct password.
-
-
-Another useful purpose for using dial-up passwords might be to setup a line
-that only allows a certain type of connect (perhaps a PPP or UUCP connection).
-If a user tries to get another type of connection (i.e. a list of shells),
-he must know a password to use the line.
-
-
-Before you can use the dial-up feature, you must create the files.
-
-
-The command dpasswd is provided to assign passwords to the shells
-in the /etc/d_passwd file. See the manual page for more
-information.
-
-
-
-
-
-
-----
-
-!! 8. Adding shadow support to a C program
-
-
-Adding shadow support to a program is actually fairly straightforward. The
-only problem is that the program must be run by root (or SUID root) in order
-for the the program to be able to access the /etc/shadow file.
-
-
-This presents one big problem: very careful programming practices must be
-followed when creating SUID programs. For instance, if a program has a shell
-escape, this must not occur as root if the program is SUID root.
-
-
-For adding shadow support to a program so that it can check passwords, but
-otherwise does need to run as root, it's a lot safer to run the program SUID
-shadow instead. The xlock program is an example of this.
-
-
-In the example given below, pppd-1.2.1d already runs SUID as root,
-so adding shadow support should not make the program any more vulnerable.
-
-
-
-
-!!8.1 Header files
-
-
-
-The header files should reside in /usr/include/shadow. There
-should also be a /usr/include/shadow.h, but it will be a symbolic
-link to /usr/include/shadow/shadow.h.
-
-
-To add shadow support to a program, you need to include the header files:
-
-#include <shadow/shadow.h>
-#include <shadow/pwauth.h>
-
-
-
-It might be a good idea to use compiler directives to conditionally compile
-the shadow code (I do in the example below).
-
-
-
-
-!!8.2 libshadow.a library
-
-
-
-When you installed the ''Shadow Suite'' the libshadow.a file
-was created and installed in /usr/lib.
-
-
-When compiling shadow support into a program, the linker needs to be told to
-include the libshadow.a library into the link.
-
-
-This is done by:
-
-
-gcc program.c -o program -lshadow
-
-
-
-
-However, as we will see in the example below, most large programs use a
-Makefile, and usually have a variable called LIBS=... that
-we will modify.
-
-
-
-
-!!8.3 Shadow Structure
-
-
-
-The libshadow.a library uses a structure called spwd
-for the information it retrieves from the /etc/shadow file. This is
-the definition of the spwd structure from the
-/usr/include/shadow/shadow.h header file:
-----
-
-struct spwd
-{
-char *sp_namp; /* login name */
-char *sp_pwdp; /* encrypted password */
-sptime sp_lstchg; /* date of last change */
-sptime sp_min; /* minimum number of days between changes */
-sptime sp_max; /* maximum number of days between changes */
-sptime sp_warn; /* number of days of warning before password
-expires */
-sptime sp_inact; /* number of days after password expires
-until the account becomes unusable. */
-sptime sp_expire; /* days since 1/1/70 until account expires
-*/
-unsigned long sp_flag; /* reserved for future use */
-};
-
-----
-
-
-The ''Shadow Suite'' can put things into the sp_pwdp field
-besides just the encoded passwd. The password field could contain:
-
-
-username:Npge08pfz4wuk;@/sbin/extra:9479::10000::::
-
-
-
-
-This means that in addition to the password, the program
-/sbin/extra should be called for further authentication. The
-program called will get passed the username and a switch that indicates
-why it's being called. See the file /usr/include/shadow/pwauth.h
-and the source code for pwauth.c for more information.
-
-
-What this means is that we should use the function pwauth to
-perform the actual authentication, as it will take care of the secondary
-authentication as well. The example below does this.
-
-
-The author of the ''Shadow Suite'' indicates that since most
-programs in existence don't do this, and that it may be removed or changed
-in future versions of the ''Shadow Suite''.
-
-
-
-
-!!8.4 Shadow Functions
-
-
-
-The shadow.h file also contains the function prototypes for the
-functions contained in the libshadow.a library:
-----
-
-extern void setspent __P ((void));
-extern void endspent __P ((void));
-extern struct spwd *sgetspent __P ((__const char *__string));
-extern struct spwd *fgetspent __P ((FILE *__fp));
-extern struct spwd *getspent __P ((void));
-extern struct spwd *getspnam __P ((__const char *__name));
-extern int putspent __P ((__const struct spwd *__sp, FILE *__fp));
-
-----
-
-
-The function that we are going to use in the example is: getspnam
-which will retrieve for us a spwd structure for the supplied name.
-
-
-
-
-
-
-
-!!8.5 Example
-
-
-
-This is an example of adding shadow support to a program that needs it, but
-does not have it by default.
-
-
-This example uses the ''Point-to-Point Protocol Server'' (pppd-1.2.1d),
-which has a mode in which it performs ''PAP'' authentication using
-user names and passwords from the /etc/passwd file instead of the
-''PAP'' or ''CHAP'' files. You would not need to add this code
-to pppd-2.2.0 because it's already there.
-
-
-This feature of pppd probably isn't used very much, but if you installed the
-''Shadow Suite'', it won't work anymore because the passwords are no
-longer stored in /etc/passwd.
-
-
-The code for authenticating users under pppd-1.2.1d is located in
-the /usr/src/pppd-1.2.1d/pppd/auth.c file.
-
-
-The following code needs to be added to the top of the file where all the
-other #include directives are. We have surrounded the
-#includes with conditional directives (i.e. only include if we
-are compiling for shadow support).
-
-
-
-----
-
-#ifdef HAS_SHADOW
-#include <shadow.h>
-#include <shadow/pwauth.h>
-#endif
-
-----
-
-
-The next thing to do is to modify the actual code. We are still making
-changes to the auth.c file.
-
-
-Function auth.c before modifications:
-----
-
-/*
-* login - Check the user name and password against the system
-* password database, and login the user if OK.
-*
-* returns:
-* UPAP_AUTHNAK: Login failed.
-* UPAP_AUTHACK: Login succeeded.
-* In either case, msg points to an appropriate message.
-*/
-static int
-login(user, passwd, msg, msglen)
-char *user;
-char *passwd;
-char **msg;
-int *msglen;
-{
-struct passwd *pw;
-char *epasswd;
-char *tty;
-if ((pw = getpwnam(user)) == NULL) {
-return (UPAP_AUTHNAK);
-}
-/*
-* XXX If no passwd, let them login without one.
-*/
-if (pw->pw_passwd == '\') {
-return (UPAP_AUTHACK);
-}
-epasswd = crypt(passwd, pw->pw_passwd);
-if (strcmp(epasswd, pw->pw_passwd)) {
-return (UPAP_AUTHNAK);
-}
-syslog(LOG_INFO, "user %s logged in", user);
-/*
-* Write a wtmp entry for this user.
-*/
-tty = strrchr(devname, '/');
-if (tty == NULL)
-tty = devname;
-else
-tty++;
-logwtmp(tty, user, ""); /* Add wtmp login entry */
-logged_in = TRUE;
-return (UPAP_AUTHACK);
-}
-
-----
-
-
-The user's password is placed into pw->pw_passwd, so all we really
-need to do is add the function getspnam. This will put the
-password into spwd->sp_pwdp.
-
-
-We will add the function pwauth to perform the actual authentication.
-This will automatically perform secondary authentication if the shadow file
-is setup for it.
-
-
-Function auth.c after modifications to support shadow:
-
-
-
-----
-
-/*
-* login - Check the user name and password against the system
-* password database, and login the user if OK.
-*
-* This function has been modified to support the Linux Shadow Password
-* Suite if USE_SHADOW is defined.
-*
-* returns:
-* UPAP_AUTHNAK: Login failed.
-* UPAP_AUTHACK: Login succeeded.
-* In either case, msg points to an appropriate message.
-*/
-static int
-login(user, passwd, msg, msglen)
-char *user;
-char *passwd;
-char **msg;
-int *msglen;
-{
-struct passwd *pw;
-char *epasswd;
-char *tty;
-#ifdef USE_SHADOW
-struct spwd *spwd;
-struct spwd *getspnam();
-#endif
-if ((pw = getpwnam(user)) == NULL) {
-return (UPAP_AUTHNAK);
-}
-#ifdef USE_SHADOW
-spwd = getspnam(user);
-if (spwd)
-pw->pw_passwd = spwd->sp-pwdp;
-#endif
-/*
-* XXX If no passwd, let NOT them login without one.
-*/
-if (pw->pw_passwd == '\') {
-return (UPAP_AUTHNAK);
-}
-#ifdef HAS_SHADOW
-if ((pw->pw_passwd && pw->pw_passwd[[] == '@'
-&& pw_auth (pw->pw_passwd+1, pw->pw_name, PW_LOGIN, NULL))
-|| !valid (passwd, pw)) {
-return (UPAP_AUTHNAK);
-}
-#else
-epasswd = crypt(passwd, pw->pw_passwd);
-if (strcmp(epasswd, pw->pw_passwd)) {
-return (UPAP_AUTHNAK);
-}
-#endif
-syslog(LOG_INFO, "user %s logged in", user);
-/*
-* Write a wtmp entry for this user.
-*/
-tty = strrchr(devname, '/');
-if (tty == NULL)
-tty = devname;
-else
-tty++;
-logwtmp(tty, user, ""); /* Add wtmp login entry */
-logged_in = TRUE;
-return (UPAP_AUTHACK);
-}
-
-----
-
-
-Careful examination will reveal that we made another change as well. The
-original version allowed access (returned UPAP_AUTHACK if there
-was NO password in the /etc/passwd file. This is ''not''
-good, because a common use of this login feature is to use one account
-to allow access to the PPP process and then check the username and password
-supplied by PAP with the username in the /etc/passwd file and
-the password in the /etc/shadow file.
-
-
-So if we had set the original version up to run as the shell for a user i.e.
-ppp, then anyone could get a ppp connection by setting their PAP to user
-ppp and a password of null.
-
-
-We fixed this also by returning UPAP_AUTHNAK instead of
-UPAP_AUTHACK if the password field was empty.
-
-
-Interestingly enough, pppd-2.2.0 has the same problem.
-
-
-Next we need to modify the Makefile so that two things occur:
-USE_SHADOW must be defined, and libshadow.a needs to be
-added to the linking process.
-
-
-Edit the Makefile, and add:
-
-
-LIBS = -lshadow
-
-
-
-
-Then we find the line:
-
-
-COMPILE_FLAGS = -I.. -D_linux_=1 -DGIDSET_TYPE=gid_t
-
-
-
-
-And change it to:
-
-
-COMPILE_FLAGS = -I.. -D_linux_=1 -DGIDSET_TYPE=gid_t -DUSE_SHADOW
-
-
-
-
-Now make and install.
-
-
-
-----
-
-!!9. Frequently Asked Questions.
-
-
-''Q:'' I used to control which tty's ''root'' could log into using
-the file /etc/securettys, but it doesn't seem to work anymore,
-what's going on?
-
-
-''A:'' The file /etc/securettys does absolutely nothing now
-that the ''Shadow Suite'' is installed. The tty's that ''root''
-can use are now located in the login configuration file
-/etc/login.defs. The entry in this file may point to another file.
-
-
-
-
-
-''Q:'' I installed the ''Shadow Suite'', but now I can't login,
-what did I miss?
-
-
-''A:'' You probably installed the Shadow programs, but didn't run
-pwconv or you forgot to copy /etc/npasswd to
-/etc/passwd and /etc/nshadow to /etc/shadow.
-Also, you may need to copy login.defs to /etc.
-
-
-
-
-
-''Q:'' In the section on xlock, it said to change the group ownership
-of the /etc/shadow file to shadow. I don't have a
-shadow group, what do I do?
-
-
-''A:'' You can add one. Simply edit the /etc/group file, and
-insert a line for the shadow group. You need to ensure that the group
-number is not used by another group, and you need to insert it before the
-nogroup entry. Or you can simply suid xlock to root.
-
-
-
-
-
-''Q:'' Is there a mailing list for the Linux Shadow Password Suite?
-
-
-''A:'' Yes, but it's for the development and beta testing of the
-next Shadow Suite for Linux. You can get added to the list by mailing to:
-shadow-list-request@neptune.cin.net with a subject of:
-subscribe. The list is actually for discussions of the Linux
-shadow-YYMMSS series of releases. You should join if you want to
-get involved in further development or if you install the Suite on your
-system and want to get information on newer releases.
-
-
-
-
-
-''Q:'' I installed the ''Shadow Suite'', but when I use the
-userdel command, I get "userdel: cannot open shadow group file",
-what did I do wrong?
-
-
-''A:'' You compiled the ''Shadow Suite'' with the
-SHADOWGRP option enabled, but you don't have an
-/etc/gshadow file. You need to either edit the config.h
-file and recompile, or create an /etc/group file. See the section
-on shadow groups.
-
-
-
-
-
-''Q:'' I installed the ''Shadow Suite'' but now I'm getting
-encoded passwords back in my /etc/passwd file, what's wrong?
-
-
-''A:'' You either enabled the AUTOSHADOW option in the Shadow
-config.h file, or your libc was compiled with the
-SAHDOW_COMPAT option. You need to determine which is the problem,
-and recompile.
-
-
-
-----
-
-!!10. Copyright Message.
-
-
-The Linux Shadow Password HOWTO is Copyright (c) 1996 Michael H. Jackson.
-
-
-Permission is granted to make and distribute verbatim copies of
-this document provided the copyright notice and this permission notice
-are preserved on all copies.
-
-
-Permission is granted to copy and distribute modified versions of this
-document under the conditions for verbatim copies above, provided a notice
-clearly stating that the document is a modified version is also included in
-the modified document.
-
-
-Permission is granted to copy and distribute translations of this document
-into another language, under the conditions specified above for modified
-versions.
-
-
-Permission is granted to convert this document into another media under
-the conditions specified above for modified versions provided the requirement
-to acknowledge the source document is fulfilled by inclusion of an obvious
-reference to the source document in the new media. Where there is any
-doubt as to what defines 'obvious' the copyright owner reserves the right
-to decide.
-
-
-
-----
-
-!!11. Miscellaneous and Acknowledgments.
-
-
-The code examples for auth.c are taken from pppd-1.2.1d and
-ppp-2.1.0e, Copyright (c) 1993 and The Australian National University and
-Copyright (c) 1989 Carnegie Mellon University.
-
-
-Thanks to Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl> for
-writing and maintaining the ''Shadow Suite'' for Linux, and for his
-review and comments on this document.
-
-
-Thanks to Ron Tidd <rtidd@tscnet.com> for his helpful review and testing.
-
-
-Thanks to everyone who has sent me feedback to help improve this document.
-
-
-Please, if you have any comments or suggestions then mail them to me.
-
-
-regards
-
-
-
-Michael H. Jackson <mhjack@tscnet
.com>
-
-
-----
+Describe
[HowToShadowPasswordHOWTO
] here.