Next Previous Contents

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
fred的根目录将被建立且 /etc/skel 的内容将被复制因为指令句中有 -m 设定。

因为我们并未详述 UID,系统会直接寻找下一个可获得的编号。

fred的帐号被建立啰,但是 fred 仍然不能签入直到我们不再锁住(unlock)这个帐号。 透过更改密码完成 unlock 帐号,方法如下:

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 将可以签入和使用该系统。 useradd 和其他附带 Shadow Suite 比较好的地方是可以自动改变 /etc/passwd/etc/shadow 。 所以如果你正在新增一个使用者, 且另一个使用者正在更改密码,这两个操作都可以正确的执行。

你使用提供的指令比直接存取 /etc/passwd/etc/shadow 档还好。 如果你正编辑 /etc/shadow 档,且有个使用者在你编辑时要改变他的密码, 然后你储存编辑结果,这个使用者的密码将会遗失掉。

这里是使用 useraddpasswd 新增使用者的一些 interactive script :


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

新增使用者是用 script 比直接编辑 /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 的帐号到期日为 09/15/97:
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 老化

passwd 指令很明显使用在改变密码,除此之外, 可由 root 使用在:

举例说明,如果要锁死 fred 帐号:

passwd -S fred
fred P 03/04/96 0 60 0 0
这表示 fred 的密码是有效的,它在 03/04/96 被修改且任何时间都可被修改 , 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 程序的 configuration file 且 对 Shadow Suite

/etc/login 包含从预设值密码改变的驱动设定。

/etc/login.defs 档是一个很好的文件档,然而仍有些事情要注意:

跟去上述你可以发现这是一个重要档,且你应该确认目前设定及你将对你系统的设定内容。

7.4 群组密码

/etc/groups 档包括允许是用者存取群组之密码。 如果你定义 SHADOWGRP/usr/src/shadow-YYMMDD/config.h 档将开启该功能。

如果你定义该常数且编译它,你需建立一个 /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 档都将被改变。

groups, groupadd, groupmod, 和 groupdel 程序是用来供应 Shadow Suite 部分可以变更群组。

/etc/group 档格式如下:

groupname:!:GID:member,member,...
其中:
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

/etc/gshadow 档格式如下:

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

The name of the group

password

The encoded group password.

admin

List of group administrators

member

List of group members

gpasswd 指令是用在新增或移除管理者和群组成员。 root 或其他在 群组管理者人员可新增或移除群组成员。

群组密码可以透过 passwd 指令改变,需透过 root 或在该群组管理者有权限的帐号方可修改。

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 检查程序一致性

pwck

pwck 程序提供在 /etc/passwd/etc/shadow 档的一致性检查。 它将检查每个使用者名称且依照下列步骤确认:

它也会警告没有密码的帐号。

在安装 Shadow Suite 后执行 pwck 是一个很好的点子。 它也可以每周或每月周期性的执行。 如果你使用 -r 参数,你可以用 cron 来执行且收到电子邮件报告

grpck

grpck 检查 /etc/group/etc/gshadow 档一致性的程序。 它作下列检查:

它也有 -r 参数自动产生报表。

7.6 Dial-up 密码

Dial-up 密码是另一个对系统防御的选项列,该系统允许拨接存取。 如果你有一个系统允许许多人区域网路连结,但是你想限制拨接的权限,那你需使用 dial-up 密码。 为了要开启 dial-up 密码,你必须编辑 /etc/login.defs 档且确定将 DIALUPS_CHECK_ENAB 设定为 yes.

有两个文档包括 dial-up 信息, /etc/dialups 包括 ttys (one per line, with the leading "/dev/" removed)。 如果 tty 有被列出, dial-up 表示已经被检查。

第二个档是 /etc/d_passwd 。 这个档包括 shell 全部合法路径名称。

如果以个使用者签入一条列在 /etc/dialups 的线(line),且他的 shell 被列在 /etc/d_passwd 档,他将被允许存取透过提供正确的密码。

另一个使用 dial-up 密码的目的是设定指允许某些形式连结的线(可能是PPP 或 UUCP 连结)。 如果一个使用者试著得到另一种形式连结 (i.e. a list of shells),他必须知道使用这条线的密码。

在你可以在未来使用 dial-up 前,你密需建立一些文档。

dpasswd 指令提供对在 /etc/d_passwd 档的 shells 指派密码。 可以看操作手册的到更多信息。


Next Previous Contents