下一步 上一步 目录

7. Shadow Suite 的使用。

本节讨论在您的系统上安装 Shadow Suite 后您需要了解的一些事项。 更多信息包含在每个命令的手册页中。

7.1 添加、修改和删除用户

Shadow Suite 添加了以下面向命令行的命令,用于添加、修改和删除用户。 您可能还安装了 adduser 程序。

useradd

useradd 命令可用于向系统添加用户。 您也可以调用此命令来更改默认设置。

您应该做的第一件事是检查默认设置,并根据您的系统进行特定更改

useradd -D

GROUP=1
HOME=/home
INACTIVE=0
EXPIRE=0
SHELL=
SKEL=/etc/skel

默认值可能不是您想要的,因此如果您现在开始添加用户,您将不得不为每个用户指定所有信息。 但是,我们可以并且应该更改默认值。

在我的系统上

为了进行这些更改,我将使用
useradd -D -g100 -e60 -f0 -s/bin/bash

现在运行 useradd -D 将给出


GROUP=100
HOME=/home
INACTIVE=0
EXPIRE=60
SHELL=/bin/bash
SKEL=/etc/skel

以防您想知道,这些默认值存储在 /etc/default/useradd 文件中。

现在您可以使用 useradd 向系统添加用户。 例如,要使用默认值添加用户 fred,您将使用以下命令

useradd -m -c "Fred Flintstone" fred
这将在 /etc/passwd 文件中创建以下条目
fred:*:505:100:Fred Flintstone:/home/fred:/bin/bash
并在 /etc/shadow 文件中创建以下条目
fred:!:0:0:60:0:0:0:0
由于使用了 -m 开关,因此将创建 fred 的主目录,并将 /etc/skel 的内容复制到那里。

此外,由于我们没有指定 UID,因此使用了下一个可用的 UID。

fred 的帐户已创建,但 fred 仍然无法登录,直到我们解锁该帐户。 我们通过更改密码来做到这一点。

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

现在 /etc/shadow 将包含
fred:J0C.WDR1amIt6:9559:0:60:0:0:0:0
现在 fred 将能够登录并使用系统。 关于 useraddShadow Suite 附带的其他程序的优点是,它们以原子方式更改 /etc/passwd/etc/shadow 文件。 因此,如果您正在添加用户,而另一个用户同时正在更改其密码,则这两个操作都将正确执行。

您应该使用提供的命令,而不是直接编辑 /etc/passwd/etc/shadow。 如果您正在编辑 /etc/shadow 文件,并且用户在您编辑时更改了他的密码,然后您保存了正在编辑的文件,则用户的密码更改将丢失。

这是一个小的交互式脚本,它使用 useraddpasswd 添加用户


#!/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 (0=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 ""

使用脚本添加新用户实际上比直接编辑 /etc/passwd/etc/shadow 文件或使用像 Slackware adduser 程序这样的程序更可取。 随意使用和修改此脚本以适应您的特定系统。

有关 useradd 的更多信息,请参阅在线手册页。

usermod

usermod 程序用于修改用户的信息。 开关类似于 useradd 程序。

假设您想更改 fred 的 shell,您将执行以下操作

usermod -s /bin/tcsh fred
现在 fred/etc/passwd 文件条目将更改为以下内容
fred:*:505:100:Fred Flintstone:/home/fred:/bin/tcsh
让我们让 fred 的帐户在 97 年 9 月 15 日过期
usermod -e 09/15/97 fred
现在 fred/etc/shadow 中的条目变为
fred:J0C.WDR1amIt6:9559:0:60:0:0:10119:0

有关 usermod 命令的更多信息,请参阅在线手册页。

userdel

userdel 正如您所期望的那样,它删除用户的帐户。 您只需使用

userdel -r username
-r 导致用户主目录中的所有文件以及主目录本身被删除。 位于其他文件系统中的文件将必须手动搜索和删除。

如果您只想锁定帐户而不是删除它,请改用 passwd 命令。

7.2 passwd 命令和密码老化。

passwd 命令具有显而易见的更改密码的用途。 此外,root 用户使用它来

例如,让我们再次看看 fred

passwd -S fred
fred P 03/04/96 0 60 0 0
这意味着 fred 的密码有效,上次更改时间为 96 年 3 月 4 日,可以随时更改,在 60 天后过期,fred 不会收到警告,并且帐户在密码过期时不会被禁用。

这仅仅意味着如果 fred 在密码过期后登录,他将在登录时被提示输入新密码。

如果我们决定在 fred 的密码过期前 14 天警告他,并在密码过期后 14 天使其帐户无效,我们需要执行以下操作

passwd -w14 -i14 fred
现在 fred 已更改为
fred P 03/04/96 0 60 14 14
有关 passwd 命令的更多信息,请参阅在线手册页。

7.3 login.defs 文件。

/etc/login 文件是 login 程序以及整个 Shadow Suite 的配置文件。

/etc/login 包含从提示符的外观到用户更改密码时的默认过期时间等设置。

/etc/login.defs 文件通过其中包含的注释进行了很好的文档记录。 但是,有几件事需要注意

从上面的列表中可以看出,这是一个相当重要的文件,您应该确保它存在,并且设置是您系统所需的设置。

7.4 组密码。

/etc/groups 文件可能包含允许用户成为特定组成员的密码。 如果您在 /usr/src/shadow-YYMMDD/config.h 文件中定义常量 SHADOWGRP,则启用此功能。

如果您定义了此常量然后进行编译,则必须创建一个 /etc/gshadow 文件来保存组密码和组管理员信息。

当您创建 /etc/shadow 时,您使用了一个名为 pwconv 的程序,没有等效的程序来创建 /etc/gshadow 文件,但这真的没关系,它会自行处理。

要创建初始 /etc/gshadow 文件,请执行以下操作

touch /etc/gshadow
chown root.root /etc/gshadow
chmod 700 /etc/gshadow

一旦您创建新组,它们将被添加到 /etc/group/etc/gshadow 文件中。 如果您通过添加或删除用户或更改组密码来修改组,则 /etc/gshadow 文件将被更改。

程序 groupsgroupaddgroupmodgroupdel 作为 Shadow Suite 的一部分提供,用于修改组。

/etc/group 文件的格式如下

groupname:!:GID:member,member,...
其中
groupname

组的名称

!

通常保存密码的字段,但现在已重定位到 /etc/gshadow 文件。

GID

数字组 ID 号

member

组成员列表

/etc/gshadow 文件的格式如下

groupname:password:admin,admin,...:member,member,...
其中
groupname

组的名称

password

编码的组密码。

admin

组管理员列表

member

组成员列表

命令 gpasswd 仅用于向组添加或从中删除管理员和成员。 root 或管理员列表中的某人可以添加或删除组成员。

组密码可以使用 passwd 命令由 root 或列为组管理员的任何人更改。

尽管目前没有 gpasswd 的手册页,但在不带任何参数的情况下键入 gpasswd 会给出选项列表。 一旦您了解文件格式和概念,就很容易掌握它的工作原理。

7.5 一致性检查程序

pwck

程序 pwck 用于对 /etc/passwd/etc/shadow 文件提供一致性检查。 它将检查每个用户名并验证它是否具有以下内容

它还会警告任何没有密码的帐户。

在安装 Shadow Suite 后运行 pwck 是一个好主意。 定期运行它也是一个好主意,也许是每周或每月一次。 如果您使用 -r 选项,您可以使用 cron 定期运行它,并将报告邮寄给您。

grpck

grpck/etc/group/etc/gshadow 文件的一致性检查程序。 它执行以下检查

它还具有用于自动报告的 -r 选项。

7.6 拨号密码。

拨号密码是允许拨入访问的系统的另一种可选防线。 如果您的系统允许多人本地或通过网络连接,但您想限制谁可以拨入和连接,那么拨号密码适合您。 要启用拨号密码,您必须编辑 /etc/login.defs 文件并确保 DIALUPS_CHECK_ENAB 设置为 yes

两个文件包含拨号信息,/etc/dialups 包含 tty(每行一个,删除前导 "/dev/")。 如果列出了 tty,则执行拨号检查。

第二个文件是 /etc/d_passwd 文件。 此文件包含 shell 的完全限定路径名,后跟一个可选密码。

如果用户登录到 /etc/dialups 中列出的线路,并且他的 shell 在 /etc/d_passwd 文件中列出,则只有提供正确的密码才能允许他访问。

使用拨号密码的另一个有用目的可能是设置一条仅允许某种类型的连接的线路(可能是 PPP 或 UUCP 连接)。 如果用户尝试获取另一种类型的连接(即 shell 列表),他必须知道密码才能使用该线路。

在可以使用拨号功能之前,您必须创建文件。

提供了 dpasswd 命令来为 /etc/d_passwd 文件中的 shell 分配密码。 有关更多信息,请参阅手册页。


下一步 上一步 目录