用户管理的基本任务包括添加新用户、删除用户、修改用户属性,以及对现有用户的访问参数进行设置。虽然Red Hat Enterprise Linux提供了图形化工具用来完成这些任务,但大多数管理员更习惯于在命令行界面中执行管理操作。本节中将对这些普通用户管理的操作进行详细介绍,
系统中一个合法的用户应该具有用户名、真实姓名、密码和登录环境等用户信息。与此相对应,添加一个新用户通常需要系统完成以下几项操作。
(1)设置用户名称及密码。
(2)设置用户的UID。系统在/etc/passwd文件中查找目前使用的大于或等于500的UID的最大编号,加1后赋予当前的新用户;若目前还没有大于500的编号,则将500赋予该用户。
(3)添加该新用户所属的用户组。每一个用户都会属于一个或多个用户组。系统在添加新用户时默认添加的用户组名与新用户名相同,同时会赋予该用户组一个GID,通常GID的编号与UID的编号相同。
(4)创建以新用户的用户名为名称的主目录。在大多数系统中,用户的主目录都被创建在同一个特定目录下,例如/home。各用户对自己的主目录有完全的读/写执行权限,其他用户只能依据该目录的权限设置进行访问。
(5)设定用户的Shell环境,默认是/bin/bash。
(6)设定用户的失效时间,默认是99 999天后。
(7)设定失效前发出警告的天数,默认是失效前7天。
在Red Hat Enterprise Linux 5的安装过程中,系统会自动创建若干默认的标准用户(Standard Users),其中除了root代表系统管理员之外,其余账号都是系统账号。系统账号是应用程序在运行过程中所具有的权限。有关标准用户的详细说明如表4.1所示。
表4.1 Linux系统标准用户说明
续表
管理员可以使用useradd或adduser命令来添加一个新的用户。在Red Hat Enterprise Linux 5 中通过查看adduser和useradd这两个命令的文件信息,可以看出其功能是完全相同的:
可以看出,adduser命令只是useradd命令的一个链接文件,如此设计只是为了方便用户的使用。useradd程序通常在/usr/sbin目录中,命令格式为:
不带-D参数时,useradd命令用来指定新账户的设定值,如果没有指定则使用系统的默认值。useradd可使用的选项如下所述。
● c comment:用户的注释说明。
● -d home_dir:用户每次登录系统时所使用的登录目录,可以用来取代默认的/home/username主目录。
● -e expire_date:账号失效日期。日期的指定格式为MM/DD/YY。
● -f inactive_days:设定从账号过期到永久停用的天数。当其值为0时账号到期后会立即被停用。而当值为-1时,账号不会被停用,系统默认值为-1。
● -g initial_group:用户默认的用户组或默认的组ID。该用户组或组ID必须是已经存在的,其默认组ID值为100,即属于users组。
● -G group [,...] :设定该用户为若干用户组的成员。每个用户组使用“,”分隔,不可以夹杂空格。组名与-g选项的限制相同,且-g的设定值为用户的第一用户组。
● -m:用户目录如不存在则自动建立。若使用-k选项,则skeleton_dir目录内的文档会复制至此用户目录中,同时/etc/skel目录下的文档也会复制过去。任何在skeleton_dir或/etc/skel中的目录也同样会在该用户目录下一一建立。-k和-m的默认值是不建立目录及不复制任何文档。
● -M:不建立用户主目录,使用/etc/login.defs系统文件对用户进行设定。
● -n:系统默认用户组名称与用户名称相同。打开此选项将取消该默认设定。
● -r:此参数用来建立系统账号。系统账号的UID是比定义在/etc/login.defs中的UID_MIN小的值,UID_MIN的默认值是500。
● -Shell default_Shell:指定用户的登录Shell,系统默认为/bin/bash。
● -u uid:用户的UID值。该数值在系统中必须唯一,且数字不可为负值。0~499传统上预留给系统账号使用。
注意: “useradd -r”命令所建立的账号不会创建用户主目录,也不会依据/etc/login.defs对用户进行设置。如果想创建用户主目录,需额外指定-m参数。
带参数-D且配合其他选项,useradd可以对系统的默认值进行重新设定。如不带任何其他选项,则显示当前的默认值,命令行如下:
如使用useradd命令修改系统默认值,命令行如下:
例如,添加一新用户student2,UID为502,用户组ID为100(users用户组的标识符是100),用户目录为/home/student2,用户的默认Shell为/bin/bash,账号的失效日期为2012年7月30日,其命令行为:
如果新添加的用户名已经存在,那么执行useradd命令后,系统会提示用户已存在:
修改用户的账号包括更改用户的用户名、密码、主目录、所属用户组和登录Shell等信息。
1.修改用户基本信息
修改用户的基本信息可以使用usermod命令,其命令格式为:
usermod命令会参照命令行上指定的选项对用户账号进行修改。下面所列为usermod可用的选项。
● -c comment:更新用户的注释信息。
● -d home_dir:更新用户的登录目录。如果指定了-m选项,则旧目录中的内容会复制到新的目录中。如果新目录不存在则自动创建。
● -e expire_date:更新用户账号停用日期。其日期格式为MM/DD/YY。
● -f inactive_days:设定账号失效到永久停用的天数,当值为0时账号到期后立刻被停用。而当值为-1时则关闭此功能。默认值为-1。
● -g initial_group:更新用户的初始登录用户组,即第一用户组。用户组名必须已经存在,默认值为users组。
● -G group [,...]:更新用户所属的用户组。通常一个用户可以属于多个用户组,成为多个用户组的成员。每个用户组名之间必须用“”,分隔,如果用户当前所在的用户组不在此项中,则会从当前用户组中删除此用户。
● -l login_name:变更用户登录时的名称为login_name。
● -s Shell:指定用户新的登录Shell。如果此项留白,系统将选用默认的Shell。
● -u uid:更新用户的UID值。该值修改后,用户目录树下所有的文件、目录的用户UID值会自动改变,但放在用户主目录外的文件和目录的UID值则需要用户手动更新。
例如:
此命令将用户的登录目录改为/home/student2,登录Shell改为ksh,所在的组改为users和student。
密码管理是用户管理的一项重要内容。用户在刚创建账号时如果没有设定密码,该账号将被系统锁定,用户无法用该账号登录。只有为其指定密码(即使密码为空)才能激活该账号。
2.修改用户密码
指定和修改用户密码的命令是passwd。根用户不仅可以修改自己的密码,还可以修改其他用户的密码。普通用户则只能修改自己的密码。passwd命令格式为:
各选项的意义如下。
● -k:表示只有密码过期才需要用户重新设定密码。
● -l:通过在用户的密码字段前加前缀“!”,对用户进行锁定。锁定的用户无法登录系统,该命令只有根用户有权使用。例如锁定student用户使其不能登录的命令为:
● --stdin:表示从标准输入重新读入密码,该标准输入也可为一管道。
● -u:该参数与-l相反,是对锁定的用户进行解锁操作。该操作会删除密码字段前的“!”,使用户可以重新登录系统。对于口令为空的用户,原则上系统是不允许解锁的,需配合使用-f参数,才能强制解锁。
● -d:快速删除用户的密码。该命令只对根用户有效。例如删除student用户的密码可以执行下面的命令:
● -n:设定最短的密码有效期。
● -x:设定最长的密码有效期。
● -w:设定密码过期前,发出警报的提前天数。
● -i:设定密码过期到账号停用的天数。
● -S:显示指定用户的当前密码状态。
其中username的默认值为当前用户,即用户名为空则修改当前用户的密码。设定新密码需输入旧密码进行验证,如果验证不正确则不允许修改。新密码需连续输入两次,如果两次的输入一致,则新密码生效,例如:
如果根用户修改普通用户的密码,则无需知道该普通用户的原始密码,例如:
密码应是字母、数字及符号的组合,不应小于5个字符长,密码过短或过于简单时系统会提示其是弱口令。如果用户执意要将弱口令设为密码,继续输入即可,例如:
当不允许用户再次登录本系统时,可以将该用户从系统中删除。准备删除的用户如果已经登录,则必须退出系统才能删除。与添加用户的操作相反,删除用户时系统需要修改/etc/passwd、/ etc/shadow和/etc/group文件中的对应条目,还需删除用户的主目录及所属文件。userdel命令格式如下:
如果不带选项“-r”,则只删除用户在系统中的账户信息,用户的主目录及相关文件依然保留在系统中。使用选项“-r”,则可将用户主目录下的文档全部删除。同时该用户放在其他位置的文档也会被一一找出并删除。例如:
执行该命令后,系统将删除student账号,同时删除student的主目录、邮件及相关属主文档。删除用户前应检查系统中是否还有该用户的相关进程正在运行。如果存在该用户的进程,则需等待其执行完毕或直接终止该用户进程。例如,可以使用ps或top命令对进程进行查看,并使用kill命令终止该用户进程:
用crontab命令可查看是否还有该用户设定的定时任务,如果有则进行删除:
如果不想删除用户,只是临时禁止该用户登录系统,可以通过对/etc/passwd或/etc/shadow文件的修改来实现。例如,可以直接修改/etc/passwd文件中希望禁用的用户记录行,在该用户行的行首添加“#”;也可以修改/etc/shadow文件中的密码字段,在希望禁用的用户所对应的密码字段前添加“*”或“!”;如果想重新启用该账户,只需恢复上面所做的操作。
例如,在前面的/etc/passwd文件中,对用户yang临时禁用:
再如,在前面的/etc/shadow文件中,对用户teacher临时禁用:
/etc/login.defs文件中存储的是用户的默认设置。useradd命令和【User Manager】窗口都通过读取该文件来获得新账户的默认值。可以使用带“-D”选项的useradd命令修改这些值,也可以直接手动编辑该文件。该文件的具体内容和相关注解如下:
其中以“#”开头的行为注释行,空行和注释行都会被系统忽略。“#”通常用来屏蔽系统暂不使用的功能,若需启用相关功能可将其行首的“#”删除。所有其他行均包括一个关键字和其设置值,可以直接修改设置值从而改变系统默认值。不带其他选项使用“useradd -D”命令也可以查看系统默认设置。
管理员有时需要一次性创建大量用户账号,例如在新学期开学或成立新的部门时。如果仍采用useradd命令逐一创建不仅浪费时间,而且也很可能在录入期间产生错误。通常在此情况下可以利用脚本程序完成批量用户的添加和修改。
例如编写Shell程序让系统自动创建20个用户,用户名为student1~student20,用户组为users。程序中主要用到变量赋值语句、命令替换语句、循环语句及流过滤语句awk。具体操作步骤如下。
(1)使用tail 命令查看/etc/passwd和/etc/shadow文件格式:
(2)根据上述查看情况编写脚本程序:
对于不熟悉程序编写的读者,Red Hat Enterprise Linux 5也提供了创建大量用户账号的工具,即newuser和chpasswd。newusers命令能够用一个含有用户名和密码的用户信息文件来生成和修改大量的账号。这个用户信息文件必须具有与/etc/passwd文件相同的格式,且每个账号的用户名和用户ID必须不同。密码字段可以为空或输入“x”。建立本例中所需的用户信息文件如下:
将所建立的用户信息文件/new_account输出给newusers命令可以完成新用户的批量自动创建,命令行如下:
(3)通过查看/etc/passwd文件和/home目录,可以看到新用户已经被添加,并且相应的主目录也已经被创建:
(4)创建批量用户的密码也可采用如上所述的方法。首先建立用户的密码文件:
然后将编辑好的密码文件传输给chpasswd命令,完成用户密码的批量设置:
(5)完成以上步骤后,就可以使用这些账号来登录系统了。