本节讨论在您的系统上安装 Shadow Suite 后您需要了解的一些事项。 更多信息包含在每个命令的手册页中。
Shadow Suite 添加了以下面向命令行的命令,用于添加、修改和删除用户。 您可能还安装了 adduser
程序。
useradd
命令可用于向系统添加用户。 您也可以调用此命令来更改默认设置。
您应该做的第一件事是检查默认设置,并根据您的系统进行特定更改
useradd -D
GROUP=1 HOME=/home INACTIVE=0 EXPIRE=0 SHELL= SKEL=/etc/skel
默认值可能不是您想要的,因此如果您现在开始添加用户,您将不得不为每个用户指定所有信息。 但是,我们可以并且应该更改默认值。
在我的系统上
/bin/bash
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
将能够登录并使用系统。 关于 useradd
和 Shadow Suite 附带的其他程序的优点是,它们以原子方式更改 /etc/passwd
和 /etc/shadow
文件。 因此,如果您正在添加用户,而另一个用户同时正在更改其密码,则这两个操作都将正确执行。您应该使用提供的命令,而不是直接编辑 /etc/passwd
和 /etc/shadow
。 如果您正在编辑 /etc/shadow
文件,并且用户在您编辑时更改了他的密码,然后您保存了正在编辑的文件,则用户的密码更改将丢失。
这是一个小的交互式脚本,它使用 useradd
和 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 (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
程序用于修改用户的信息。 开关类似于 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 -r username
-r
导致用户主目录中的所有文件以及主目录本身被删除。 位于其他文件系统中的文件将必须手动搜索和删除。如果您只想锁定帐户而不是删除它,请改用 passwd
命令。
passwd
命令具有显而易见的更改密码的用途。 此外,root 用户使用它来
-l
和 -u
)-x
)-n
)-w
)-i
)-S
)例如,让我们再次看看 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
命令的更多信息,请参阅在线手册页。
/etc/login
文件是 login
程序以及整个 Shadow Suite 的配置文件。
/etc/login
包含从提示符的外观到用户更改密码时的默认过期时间等设置。
/etc/login.defs
文件通过其中包含的注释进行了很好的文档记录。 但是,有几件事需要注意
从上面的列表中可以看出,这是一个相当重要的文件,您应该确保它存在,并且设置是您系统所需的设置。
/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
文件将被更改。
程序 groups
、groupadd
、groupmod
和 groupdel
作为 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
会给出选项列表。 一旦您了解文件格式和概念,就很容易掌握它的工作原理。
程序 pwck
用于对 /etc/passwd
和 /etc/shadow
文件提供一致性检查。 它将检查每个用户名并验证它是否具有以下内容
它还会警告任何没有密码的帐户。
在安装 Shadow Suite 后运行 pwck
是一个好主意。 定期运行它也是一个好主意,也许是每周或每月一次。 如果您使用 -r
选项,您可以使用 cron
定期运行它,并将报告邮寄给您。
grpck
是 /etc/group
和 /etc/gshadow
文件的一致性检查程序。 它执行以下检查
它还具有用于自动报告的 -r
选项。
拨号密码是允许拨入访问的系统的另一种可选防线。 如果您的系统允许多人本地或通过网络连接,但您想限制谁可以拨入和连接,那么拨号密码适合您。 要启用拨号密码,您必须编辑 /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 分配密码。 有关更多信息,请参阅手册页。