pkg://Shadow-Password-HOWTO-html.tar.gz:25518/Shadow-Password-HOWTO-7.html
downloads
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
<META NAME="GENERATOR" CONTENT="ZH-SGML-Tools 1.0.9">
<TITLE>如何取得,安装,设定 shadow 密码: 将 Shadow Suite 放进来使用。</TITLE>
<LINK HREF="Shadow-Password-HOWTO-8.html" REL=next>
<LINK HREF="Shadow-Password-HOWTO-6.html" REL=previous>
<LINK HREF="Shadow-Password-HOWTO.html#toc7" REL=contents>
</HEAD>
<BODY>
<A HREF="Shadow-Password-HOWTO-8.html">Next</A>
<A HREF="Shadow-Password-HOWTO-6.html">Previous</A>
<A HREF="Shadow-Password-HOWTO.html#toc7">Contents</A>
<HR>
<H2><A NAME="sec-work"></A> <A NAME="s7">7. 将 Shadow Suite 放进来使用。</A></H2>
<P>这节描述你需要知道有些程式在安装时就已经有 <EM>Shadow Suite</EM>。
大部分的资讯在操作手册可以找到。
<P>
<H2><A NAME="ss7.1">7.1 新增、修改和删除使用者</A>
</H2>
<P><EM>Shadow Suite</EM> 新增下列指令用来新增、修改和删除使用者。 这也是可以安装
<CODE>adduser</CODE> 程式。
<P>
<H3>useradd</H3>
<P><CODE>useradd</CODE> 使令可用在系统中新增使用者。 你也可以采用此指令来改变预设字串。
<P>你应该做的第一件事是检查预设值设定和针对你的系统进行改变:
<BLOCKQUOTE><CODE>
<PRE>
useradd -D
</PRE>
</CODE></BLOCKQUOTE>
<HR>
<PRE>
GROUP=1
HOME=/home
INACTIVE=0
EXPIRE=0
SHELL=
SKEL=/etc/skel
</PRE>
<HR>
<P>预设值不全是你要的,所以如果你开始新增使用者,你必须详阅每个使用者资讯。
而且,我们可能和应该改变设定值。
<P>在我的系统上:
<UL>
<LI>我要预设群组是 100</LI>
<LI>我要密码每到 60 天就到期</LI>
<LI>我不要锁住帐号因为密码会到期</LI>
<LI>我要预设 shell 是 <CODE>/bin/bash</CODE></LI>
</UL>
为了这些改变,我要使用:
<BLOCKQUOTE><CODE>
<PRE>
useradd -D -g100 -e60 -f0 -s/bin/bash
</PRE>
</CODE></BLOCKQUOTE>
<P>现在执行 <CODE>useradd -D</CODE> 将得到:
<HR>
<PRE>
GROUP=100
HOME=/home
INACTIVE=0
EXPIRE=60
SHELL=/bin/bash
SKEL=/etc/skel
</PRE>
<HR>
<P>
<P>尽管依照你需要修改,预设值将存在 <CODE>/etc/default/useradd</CODE>.
<P>先在你可以使用 <CODE>useradd</CODE> 来新增系统使用者。举例说明,新增一使用者 <CODE>fred</CODE>
使用预设值方式如下:
<BLOCKQUOTE><CODE>
<PRE>
useradd -m -c "Fred Flintstone" fred
</PRE>
</CODE></BLOCKQUOTE>
<P>这将在 <CODE>/etc/passwd</CODE> 档中的一行建立如下:
<BLOCKQUOTE><CODE>
<PRE>
fred:*:505:100:Fred Flintstone:/home/fred:/bin/bash
</PRE>
</CODE></BLOCKQUOTE>
且在 <CODE>/etc/shadow</CODE> 档中的一行建立如下;
<BLOCKQUOTE><CODE>
<PRE>
fred:!:0:0:60:0:0:0:0
</PRE>
</CODE></BLOCKQUOTE>
<CODE>fred</CODE>的根目录将被建立且 <CODE>/etc/skel</CODE> 的内容将被复制因为指令句中有
<CODE>-m</CODE> 设定。
<P>因为我们并未详述 UID,系统会直接寻找下一个可获得的编号。
<P><CODE>fred</CODE>的帐号被建立罗,但是 <CODE>fred</CODE> 仍然不能签入直到我们不再锁住(unlock)这个帐号。
透过更改密码完成 unlock 帐号,方法如下:
<P>
<BLOCKQUOTE><CODE>
<PRE>
passwd fred
</PRE>
</CODE></BLOCKQUOTE>
<HR>
<PRE>
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: *******
</PRE>
<HR>
现在 <CODE>/etc/shadow</CODE> 档将包含:
<BLOCKQUOTE><CODE>
<PRE>
fred:J0C.WDR1amIt6:9559:0:60:0:0:0:0
</PRE>
</CODE></BLOCKQUOTE>
且 <CODE>fred</CODE> 将可以签入和使用该系统。
<CODE>useradd</CODE> 和其他附带 <EM>Shadow Suite</EM> 比较好的地方是可以自动改变
<CODE>/etc/passwd</CODE> 和 <CODE>/etc/shadow</CODE> 。 所以如果你正在新增一个使用者,
且另一个使用者正在更改密码,这两个操作都可以正确的执行。
<P>你使用提供的指令比直接存取 <CODE>/etc/passwd</CODE> 和 <CODE>/etc/shadow</CODE> 档还好。
如果你正编辑 <CODE>/etc/shadow</CODE> 档,且有个使用者在你编辑时要改变他的密码,
然後你储存编辑结果,这个使用者的密码将会遗失掉。
<P>这里是使用 <CODE>useradd</CODE> 和 <CODE>passwd</CODE> 新增使用者的一些 interactive script :
<HR>
<PRE>
#!/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 ""
</PRE>
<HR>
<P>新增使用者是用 script 比直接编辑 <CODE>/etc/passwd</CODE> / <CODE>/etc/shadow</CODE> 档或使用
像 Slackware 的 <CODE>adduser</CODE> 程式还要好。
<P>需要更多 <CODE>useradd</CODE> 资讯请参照线上操作手册。
<P>
<H3>usermod</H3>
<P><CODE>usermod</CODE> 程式是用在修改使用者资讯。
它的参数使用和 <CODE>useradd</CODE> 程式类似。
<P>如果你要更新 <CODE>fred</CODE> 的 shell,你要作下列步骤:
<BLOCKQUOTE><CODE>
<PRE>
usermod -s /bin/tcsh fred
</PRE>
</CODE></BLOCKQUOTE>
<P>现在 <CODE>fred</CODE> 的 <CODE>/etc/passwd</CODE> 档将变成:
<BLOCKQUOTE><CODE>
<PRE>
fred:*:505:100:Fred Flintstone:/home/fred:/bin/tcsh
</PRE>
</CODE></BLOCKQUOTE>
如果要使 <CODE>fred</CODE> 的帐号到期日为 09/15/97:
<BLOCKQUOTE><CODE>
<PRE>
usermod -e 09/15/97 fred
</PRE>
</CODE></BLOCKQUOTE>
现在 <CODE>fred</CODE> 在 <CODE>/etc/shadow</CODE> 的栏位变成:
<BLOCKQUOTE><CODE>
<PRE>
fred:J0C.WDR1amIt6:9559:0:60:0:0:10119:0
</PRE>
</CODE></BLOCKQUOTE>
<P>需要更多 <CODE>usermod</CODE> 资讯请参照线上操作手册。
<P>
<H3>userdel</H3>
<P><CODE>userdel</CODE> 用在删除使用者,使用方法为:
<BLOCKQUOTE><CODE>
<PRE>
userdel -r username
</PRE>
</CODE></BLOCKQUOTE>
<CODE>-r</CODE> 参数可以将该使用者根目录全部移除。位在期待目录的档案则需手动移除。
<P>如果你只是要简单的锁住帐号而没有要删除它,建议你使用 <CODE>passwd</CODE> 指令。
<P>
<H2><A NAME="ss7.2">7.2 passwd 指令和 passwd 老化</A>
</H2>
<P><CODE>passwd</CODE> 指令很明显使用在改变密码,除此之外,
可由 <EM>root</EM> 使用在:
<UL>
<LI>Lock 和 unlock 帐号 (<CODE>-l</CODE> and <CODE>-u</CODE>)</LI>
<LI>设定密码合法的最大天数
(<CODE>-x</CODE>)</LI>
<LI>设定密码改变间的最小天数 (<CODE>-n</CODE>)</LI>
<LI>设定密码到期的警告天数
(<CODE>-w</CODE>)</LI>
<LI>设定在帐号未被锁死密码到期後的警告天数 (<CODE>-i</CODE>)</LI>
<LI>允许查询帐号资讯 (<CODE>-S</CODE>)</LI>
</UL>
<P>举例说明,如果要锁死 <CODE>fred</CODE> 帐号:
<BLOCKQUOTE><CODE>
<PRE>
passwd -S fred
fred P 03/04/96 0 60 0 0
</PRE>
</CODE></BLOCKQUOTE>
这表示 <CODE>fred</CODE> 的密码是有效的,它在 03/04/96 被修改且任何时间都可被修改
, fred 将不会收到警告且帐号将不会因密码到期而关闭。
<P>
<P>这表示如果 <CODE>fred</CODE> 在密码到期後签入,它将被要求用一个新密码签入。
<P>
<P>如果我们决定要警告 <CODE>fred</CODE> 在密码过期前 14 天,且让它的帐号在到期後14天警告,
我们需要作下列步骤:
<P>
<BLOCKQUOTE><CODE>
<PRE>
passwd -w14 -i14 fred
</PRE>
</CODE></BLOCKQUOTE>
现在 <CODE>fred</CODE> 改变为:
<BLOCKQUOTE><CODE>
<PRE>
fred P 03/04/96 0 60 14 14
</PRE>
</CODE></BLOCKQUOTE>
需要更多 <CODE>passwd</CODE> 资讯请参照线上操作手册。
<P>
<H2><A NAME="ss7.3">7.3 login.defs 档</A>
</H2>
<P><CODE>/etc/login</CODE> 档是对 <CODE>login</CODE> 程式的 configuration file 且 对
<EM>Shadow Suite</EM>。
<P><CODE>/etc/login</CODE> 包含从预设值密码改变的驱动设定。
<P><CODE>/etc/login.defs</CODE> 档是一个很好的文件档,然而仍有些事情要注意:
<P>
<UL>
<LI>It contains flags that can be turned on or off that determine the
amount of logging that takes place.</LI>
<LI>It contains pointers to other configuration files.</LI>
<LI>It contains defaults assignments for things like password aging.</LI>
</UL>
<P>跟去上述你可以发现这是一个重要档,且你应该确认目前设定及你将对你系统的设定内容。
<P>
<H2><A NAME="ss7.4">7.4 群组密码</A>
</H2>
<P><CODE>/etc/groups</CODE> 档包括允许是用者存取群组之密码。 如果你定义
<CODE>SHADOWGRP</CODE> 在 <CODE>/usr/src/shadow-YYMMDD/config.h</CODE> 档将开启该功能。
<P>如果你定义该常数且编译它,你需建立一个 <CODE>/etc/gshadow</CODE> 档来保存群组密码
和群组管理者资讯。
<P>
<P>当你建立 <CODE>/etc/shadow</CODE>。你使用一个呼叫程式叫做 <CODE>pwconv</CODE>,
该程式不会建立 <CODE>/etc/gshadow</CODE> 档,但是这没关系,只要你自行建立即可。
<P>
<P>为了建立起始 <CODE>/etc/gshadow</CODE> 档要执行下列步骤:
<BLOCKQUOTE><CODE>
<PRE>
touch /etc/gshadow
chown root.root /etc/gshadow
chmod 700 /etc/gshadow
</PRE>
</CODE></BLOCKQUOTE>
<P>每次你建立一个新群组,它们会被加到 <CODE>/etc/group</CODE> 和 <CODE>/etc/gshadow</CODE> 档。
如果你透过新增或移除使用者来修改群组或改变群组密码,<CODE>/etc/gshadow</CODE> 档都将被改变。
<P>
<P><CODE>groups</CODE>, <CODE>groupadd</CODE>, <CODE>groupmod</CODE>, 和
<CODE>groupdel</CODE> 程式是用来供应 <EM>Shadow Suite</EM> 部分可以变更群组。
<P><CODE>/etc/group</CODE> 档格式如下:
<BLOCKQUOTE><CODE>
<PRE>
groupname:!:GID:member,member,...
</PRE>
</CODE></BLOCKQUOTE>
其中:
<DL>
<DT><B><CODE>groupname</CODE></B><DD><P>The name of the group
<DT><B><CODE>!</CODE></B><DD><P>The field that normally holds the password, but that
is now relocated to the <CODE>/etc/gshadow</CODE> file.
<DT><B><CODE>GID</CODE></B><DD><P>The numerical group ID number
<DT><B><CODE>member</CODE></B><DD><P>List of group members
</DL>
<P><CODE>/etc/gshadow</CODE> 档格式如下:
<BLOCKQUOTE><CODE>
<PRE>
groupname:password:admin,admin,...:member,member,...
</PRE>
</CODE></BLOCKQUOTE>
其中:
<DL>
<DT><B><CODE>groupname</CODE></B><DD><P>The name of the group
<DT><B><CODE>password</CODE></B><DD><P>The encoded group password.
<DT><B><CODE>admin</CODE></B><DD><P>List of group administrators
<DT><B><CODE>member</CODE></B><DD><P>List of group members
</DL>
<P><CODE>gpasswd</CODE> 指令是用在新增或移除管理者和群组成员。 <CODE>root</CODE> 或其他在
群组管理者人员可新增或移除群组成员。
<P>群组密码可以透过 <CODE>passwd</CODE> 指令改变,需透过
<EM>root</EM> 或在该群组管理者有权限的帐号方可修改。
<P>Despite the fact that there is not currently a manual page for
<CODE>gpasswd</CODE>, typing <CODE>gpasswd</CODE> 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.
<P>
<P>
<H2><A NAME="ss7.5">7.5 检查程式一致性</A>
</H2>
<P>
<P>
<H3>pwck</H3>
<P><CODE>pwck</CODE> 程式提供在 <CODE>/etc/passwd</CODE> 和 <CODE>/etc/shadow</CODE> 档的一致性检查。
它将检查每个使用者名称且依照下列步骤确认:
<P>
<UL>
<LI>the correct number of fields</LI>
<LI>unique user name</LI>
<LI>valid user and group identifier</LI>
<LI>valid primary group</LI>
<LI>valid home directory</LI>
<LI>valid login shell</LI>
</UL>
<P>它也会警告没有密码的帐号。
<P>在安装 <EM>Shadow Suite</EM> 後执行 <CODE>pwck</CODE> 是一个很好的点子。
它也可以每周或每月周期性的执行。 如果你使用 <CODE>-r</CODE> 参数,你可以用 <CODE>cron</CODE>
来执行且收到电子邮件报告
<P>
<H3>grpck</H3>
<P><CODE>grpck</CODE> 检查 <CODE>/etc/group</CODE> 和 <CODE>/etc/gshadow</CODE> 档一致性的程式。
它作下列检查:
<UL>
<LI>the correct number of fields</LI>
<LI>unique group name</LI>
<LI>valid list of members and administrators</LI>
</UL>
<P>它也有 <CODE>-r</CODE> 参数自动产生报表。
<P>
<H2><A NAME="ss7.6">7.6 Dial-up 密码</A>
</H2>
<P>Dial-up 密码是另一个对系统防御的选项列,该系统允许拨接存取。
如果你有一个系统允许许多人区域网路连结,但是你想限制拨接的权限,那你需使用 dial-up
密码。 为了要开启 dial-up 密码,你必须编辑 <CODE>/etc/login.defs</CODE> 档且确定将
<CODE>DIALUPS_CHECK_ENAB</CODE> 设定为 <CODE>yes</CODE>.
<P>有两个档案包括 dial-up 资讯, <CODE>/etc/dialups</CODE> 包括 ttys
(one per line, with the leading "/dev/" removed)。
如果 tty 有被列出, dial-up 表示已经被检查。
<P>第二个档是 <CODE>/etc/d_passwd</CODE> 。 这个档包括 shell 全部合法路径名称。
<P>如果以个使用者签入一条列在 <CODE>/etc/dialups</CODE> 的线(line),且他的 shell 被列在
<CODE>/etc/d_passwd</CODE> 档,他将被允许存取透过提供正确的密码。
<P>另一个使用 dial-up 密码的目的是设定指允许某些形式连结的线(可能是PPP 或 UUCP 连结)。
如果一个使用者试著得到另一种形式连结 (i.e. a list of shells),他必须知道使用这条线的密码。
<P>在你可以在未来使用 dial-up 前,你密需建立一些档案。
<P><CODE>dpasswd</CODE> 指令提供对在 <CODE>/etc/d_passwd</CODE> 档的 shells 指派密码。
可以看操作手册的到更多资讯。
<P>
<P>
<P>
<HR>
<A HREF="Shadow-Password-HOWTO-8.html">Next</A>
<A HREF="Shadow-Password-HOWTO-6.html">Previous</A>
<A HREF="Shadow-Password-HOWTO.html#toc7">Contents</A>
</BODY>
</HTML>