表4–1 用于管理用户帐户和组的工具(续)
工具名称说明更多信息
useradd、groupadd、roleadd;
usermod、groupmod、rolemod;
userdel、groupdel、roledel
用于管理用户、组和角色的命
令。
第102 页中的“示例-用
groupadd 和useradd 命令添加组
和用户”
什么是用户帐户和组?
一个基本的系统管理任务就是在站点为每个用户都设置一个用户帐户。典型的用户帐
户包括在没有系统的超级用户口令的情况下,用户登录和使用系统所必需的信息。有
关用户帐户组成部分的信息在第70 页中的“用户帐户的组成部分”中进行说明。
在设置用户帐户时,可以向预定义的用户组中添加用户。组的典型用法是为文件和目
录设置组权限,从而只允许属于该组的用户进行访问。
例如,可能有一个目录中包含只应当由少数几个用户访问的机密文件。可以设置一个
名为topsecret 的组,其中包括参与topsecret 项目的用户,然后为topsecret 组设置
对topsecret 文件的读取权限。这样,只有topsecret 组中的用户才能够读取这些文
件。
角色是一种特殊类型的用户帐户,可用于赋予选定的用户特殊权限。有关更多信息,
请参见《系统管理指南:安全性服务》中的“基于角色的访问控制(概述)”。
用户帐户的组成部分
以下几节介绍用户帐户的特定组成部分。
用户名(登录名)
用户名,又称作登录名,使用它用户可以访问他们自己的系统,及其具有适当访问权
限的远程系统。必须为所创建的每个用户帐户都选择一个用户名。
建议建立一种标准方法来指定用户名,以便于跟踪它们。而且,用户名应便于用户记
忆。在选择用户名时,一个简单的方案就是使用用户名字的首字母和姓氏的前七个字
母。例如,Ziggy Ignatz 的用户名为zignatz。如果使用此方案会产生重名,则可以使用
用户第一个名字的首字母、中间名字的首字母和姓氏的前六个字母。例如,Ziggy Top
Ignatz 的用户名为ztignatz。
如果使用此方案仍产生重名,请考虑使用下面的方案来创建用户名:
■ 用户第一个名字的首字母、中间名字的首字母和姓氏的前五个字母
■ 数字1、2 或3,依此类推,直到用户名唯一
什么是用户帐户和组?
70 系统管理指南:基本管理• 2006 年7 月
注– 每个新用户名都必须不同于系统或NIS/NIS+ 域已知的任何邮件别名。否则,邮件
可能会传送到使用该别名的用户(而非实际用户)。
有关设置用户名(登录名)的详细指南,请参见第76 页中的“用户名、用户ID 和组
ID 的使用指南”。
用户ID 号
每个用户名都有一个与之相关联的用户标识(user identification, UID) 号。UID 号在任何
用户尝试登录的系统中标识用户名。系统可以使用UID 号来标识文件和目录的属主。
如果在许多不同的系统上为同一个人创建用户帐户,请始终使用相同的用户名和用户
ID 号。这样,用户可以在系统之间方便地移动文件,而不会出现拥有权问题。
UID 号必须是一个小于或等于2147483647 的整数。UID 号是一般用户帐户和特殊系统
帐户所必需的。下表列出了为用户帐户和系统帐户保留的UID 号。
表4–2 保留的UID号
UID 号用户帐户或登录帐户说明
0 – 99 root、daemon、bin、sys 等系统帐户
100 – 2147483647 一般用户通用帐户
60001 和65534 nobody 和nobody4 匿名用户
60002 noaccess 不可信用户
不要为一般用户帐户指定0 到99 的UID,这些UID 是为系统保留的。根据定义,root
的UID 始终为0,daemon 的UID 始终为1,伪用户bin 的UID 始终为2。另外,应当为
uucp 登录和伪用户登录(如who、tty 和ttytype)指定较小的UID,以便它们位于
passwd 文件的开头。
有关设置UID 的其他指南,请参见第76 页中的“用户名、用户ID 和组ID 的使用指
南”。
与用户名(登录名)一样,应采用一个方案来指定唯一的UID 号。某些公司会指定唯
一的员工编号。这样,管理员可以在员工编号的基础上添加一个编号,以便为每个员
工创建一个唯一的UID 号。
为了尽可能降低安全风险,应当避免重新使用已删除帐户的UID。如果必须重新使用
某个UID,请“彻底清除以前的帐户”,以便新用户不会受到先前用户属性集的影响。例
如,先前的用户可能会因包含在打印机拒绝列表中而被拒绝访问打印机。但是,该属
性对于新用户可能并不适合。
什么是用户帐户和组?
第4 章• 管理用户帐户和组(概述) 71
使用较大的用户ID 和组ID
可以为UID 和组ID (group ID, GID) 指定带符号整数的最大值(即2147483647)。
但是,大于60000 的UID 和GID 只具有部分功能且与许多Solaris 功能不兼容。因此,
应避免使用大于60000 的UID 或GID。
下表描述了与Solaris 产品和以前的Solaris 发行版的互操作性问题。
表4–3 大于60000 的UID 或GID 的互操作性问题
类别产品或命令问题
NFS 互操作性SunOS 4.0 NFS 软件及其
兼容发行版
NFS 服务器和客户机代码将较大的UID 和GID 截
断到16 位。如果在使用较大的UID 和GID 的环
境中使用运行SunOS 4.0 和兼容发行版的系统,
可能会产生安全问题。运行SunOS 4.0 和兼容发
行版的系统需要一个修补程序以避免出现此问
题。
名称服务互操作性NIS 名称服务和基于文
件的名称服务
UID 大于60000 的用户可以在运行Solaris 2.5(和
兼容发行版)的系统上登录或者使用su 命令。但
是,会将他们的UID 和GID 设置为60001
(nobody)。
NIS+ 名称服务UID 大于60000 的用户被拒绝访问运行Solaris 2.5
(和兼容发行版)和NIS+ 名称服务的系统。
表4–4 较大UID 或GID 的限制摘要
UID 或GID 限制
60003 或更大用户在登录运行Solaris 2.5(和兼容发行版)和NIS 或文件名称服务的
系统之后,将获得以下UID 和GID:nobody。
65535 或更大■ 运行Solaris 2.5(和兼容发行版)和NFS 版本2 软件的系统会将
UID 截断到16 位,这有可能会产生安全问题。
■ 使用具有缺省归档格式的cpio 命令复制文件的用户,会看到系统
针对每个文件都返回一条错误消息。而且,归档中的UID 和GID
被设置为nobody。
■ 基于x86 的系统:运行与SVR3 兼容的应用程序的用户可能会在进
行系统调用时看到EOVERFLOW 返回代码。
■ 基于x86 的系统:如果用户尝试在已挂载的System V 文件系统上
创建文件或目录,则System V 文件系统会返回一个EOVERFLOW 错
误。
100000 或更大ps -l 命令最多可显示五位的UID。因此,如果列显的列中包括大于
99999 的UID 或GID,则该列将不对齐。
什么是用户帐户和组?
72 系统管理指南:基本管理• 2006 年7 月
表4–4 较大UID 或GID 的限制摘要(续)
UID 或GID 限制
262144 或更大使用具有-H odc 格式的cpio 命令或者使用pax -x cpio 命令复制文件
的用户,会看到系统针对每个文件都返回一条错误消息。而且,归档
中的UID 和GID 被设置为nobody。
1000000 或更大使用ar 命令的用户,其归档中的UID 和GID 设置为nobody。
2097152 或更大使用tar 命令、cpio -H ustar 命令或pax -x tar 命令的用户,其UID
和GID 设置为nobody。
UNIX 组
组是指可共享文件和其他系统资源的用户的集合。例如,参与同一个项目的用户可以
形成一个组。组在以前称作UNIX 组。
每个组都必须有名称、组标识(group identification, GID) 号和一个属于该组的用户名的
列表。GID 号用来在系统内部标识组。用户可属于以下两种组:
■ 主组-这是操作系统指定给由用户所创建文件的组。每个用户都必须属于一个主
组。
■ 辅助组-这是用户所属的除主组之外的一个或多个组。用户最多可以属于15 个辅助
组。
有关设置组名的详细指南,请参见第76 页中的“用户名、用户ID 和组ID 的使用指南
”。
有时,用户的辅助组并不重要。例如,文件的拥有权反映主组,而不反映任何辅助
组。但是,其他应用程序可能会依赖用户的辅助组成员身份。例如,用户必须是
sysadmin 组(组14)的成员才能使用以前的Solaris 发行版中的Admintool 软件。但
是,如果组14 是用户的当前主组,则辅助组变得无关紧要。
groups 命令可列出用户所属的组。用户一次只能有一个主组。但是,用户可以使用
newgrp 命令,将其主组临时更改为它所属的任何其他组。
在添加用户帐户时,必须为用户指定一个主组或者接受缺省组staff(组10)。该主组
应当已经存在。如果主组不存在,请按GID 号指定主组。用户名不会添加到主组中。
如果将用户名添加到主组中,列表可能会变得太长。必须创建一个新的辅助组并为其
指定GID 号,才能将用户指定给该组。
组可以是系统上的本地组,也可以通过名称服务进行管理。为了简化对组的管理,应
当使用名称服务(如NIS)或目录服务(如LDAP)。使用这些服务可以集中管理组中
所有成员身份。
用户口令
可以在添加用户时为用户指定口令。也可以强制用户在首次登录时指定口令。用户口
令必须遵循下面的语法:
什么是用户帐户和组?
第4 章• 管理用户帐户和组(概述) 73
■ 口令长度至少必须与/etc/default/passwd 文件中PASSLENGTH 变量所标识的值相
符。缺省情况下,PASSLENGTH 被设置为6。
■ 口令的前6 个字符必须至少包含两个字母字符,还必须至少包含一个数值字符或特
殊字符。
■ 通过使用可支持八个以上字符的算法来配置/etc/policy.conf 文件,可以将口令的
最大长度增加到八个字符以上。
尽管用户名是公开的,但是口令必须保密,而且仅为用户所知。应当为每个用户帐户
都指定一个口令。口令可以是六到八个字母、数字或特殊字符的组合。
为了使计算机系统更安全,用户应当定期更改其口令。为了实现较高级别的安全,应
当要求用户每六周更改一次口令。对于较低级别的安全来说,每三个月更改一次口令
就足够了。系统管理登录名(如root 和sys)应当每月更改一次,或者应当在知道超级
用户口令的员工离开公司或者换岗时进行更改。
许多计算机安全性破坏都涉及到猜测合法用户的口令。应当确保用户避免使用名词、
姓名、登录名和其他只需了解该用户的一些情况就有可能猜到的口令。
最好选择如下口令:
■ 短语(beammeup)。
■ 由短语中每个单词的前几个字母组成的无意义的单词。例如,用swotrb 来替换
SomeWhereOver The RainBow。
■ 用数字或字符替换字母的单词。例如,用sn00py 替换snoopy。
请勿选择如下口令:
■ 您的姓名(从前向后拼、从后向前拼或混杂在一起)
■ 家庭成员的姓名或宠物的名字
■ 汽车驾照编号
■ 电话号码
■ 社会安全号码
■ 员工编号
■ 与爱好或兴趣有关的单词
■ 季节主题,如Santa inDecember
■ 字典中的任何单词
起始目录
起始目录是分配给用户的文件系统的一部分,用于存储专用文件。为起始目录分配的
空间量取决于用户所创建的文件的种类、大小和数量。
起始目录可以位于用户的本地系统上,也可以位于远程文件服务器上。在任一情况
下,都应当按照惯例创建/export/home/username 形式的起始目录。对于较大的站点,
应当将起始目录存储到服务器上。对于每个/export/homen 目录都使用一个单独的文件
系统,这样有利于备份和恢复起始目录。例如,/export/home1 和/export/home2。
什么是用户帐户和组?
74 系统管理指南:基本管理• 2006 年7 月
通常,无论用户的起始目录位于何处,用户都能够通过名为/home/username 的挂载点
访问其起始目录。如果起始目录是通过使用AutoFS 挂载的,系统将不允许您在任何系
统上的/home 挂载点下面创建任何目录。当AutoFS 处于活动状态时,系统能够识别
/home 的特殊状态。有关自动挂载起始目录的更多信息,请参见《系统管理指南:网络
服务》中的“Autofs 管理的任务概述”。
要在网络上的任何位置使用起始目录,应当始终用$HOME(而非
/export/home/username)来指起始目录。/export/home/username 与机器有关。另外,
在用户的起始目录中创建的任何符号链接都应使用相对路径(例如,
../../../x/y/x),这样,无论起始目录挂载在哪里,链接都有效。
名称服务
如果要管理大型站点的用户帐户,则可能希望考虑使用名称服务或目录服务,如
LDAP、NIS 或NIS+。使用名称服务或目录服务,可以集中存储用户帐户信息,而不是
将用户帐户信息存储到每个系统的/etc 文件中。在针对用户帐户使用名称服务或目录
服务时,用户可以使用同一个用户帐户从一个系统移到另一个系统,而不必在所有系
统上都复制站点范围的用户帐户信息。使用名称服务或目录服务还有利于保持用户帐
户信息的集中和一致。
用户的工作环境
除具有用于创建和存储文件的起始目录外,用户还需要用于访问完成其工作所需的工
具和资源的环境。当用户登录系统时,用户的工作环境由初始化文件确定。这些文件
由用户的启动shell(如C shell、Korn shell 或Bourne shell)来定义。
一个较好的管理用户工作环境的策略是,在用户的起始目录中提供自定义的用户初始
化文件,如.login、.cshrc 和.profile。
注– 请勿使用系统初始化文件(如/etc/profile 或/etc/.login)来管理用户的工作环
境。这些文件驻留在本地系统上,不能进行集中管理。例如,如果使用AutoFS 从网络
上的任何系统挂载用户的起始目录,则必须修改每个系统上的系统初始化文件,以确
保用户在系统之间切换时获得一致的环境。
有关为用户自定义用户初始化文件的详细信息,请参见第85 页中的“自定义用户的工
作环境”。
自定义用户帐户的另一种方法是使用基于角色的访问控制(role-based access control,
RBAC)。有关更多信息,请参见《系统管理指南:安全性服务》中的“基于角色的访问
控制(概述)”。
什么是用户帐户和组?
第4 章• 管理用户帐户和组(概述) 75
用户名、用户ID 和组ID 的使用指南
在可能跨多个域的组织中,用户名、UID 和GID 应保持唯一。
在创建用户名或角色名、UID 和GID 时,请牢记以下准则:
■ 用户名-它们应当包含两到八个字母和数字。第一个字符应当为字母。至少有一个
字符应当为小写字母。
注– 尽管用户名中可以包含句点(.)、下划线(_) 或连字符(-),但是建议不要使用这
些字符,因为在某些软件产品中它们可能会产生问题。
■ 系统帐户-请勿使用包含在缺省文件/etc/passwd 和/etc/group 中的任何用户名、
UID 或GID。0 到99 的UID 和GID 是为系统保留的,任何人都不应使用它们。此限
制包括当前未在使用的数字。
例如,gdm 是为GNOME DisplayManager 守护进程保留的用户名和组名,其他用户
不应使用它。有关缺省的/etc/passwd 和/etc/group 项的完整列表,请参见表4–6
和表4–9。
请勿将nobody 和nobody4 帐户用于正在运行的进程。这两个帐户是为NFS 保留的。
如果针对正在运行的进程使用这些帐户,可能会产生意外的安全风险。需要以非超
级用户身份运行的进程应当使用daemon 或noaccess 帐户。
■ 系统帐户配置-请勿更改缺省系统帐户的配置。这包括更改当前处于锁定状态的系
统帐户的登录shell。但是,为超级用户帐户设置口令和口令生命期参数除外。
用户帐户信息和组信息的存储位置
根据站点策略的不同,用户帐户信息和组信息可以存储在本地系统的/etc 文件中,也
可以存储在名称服务或目录服务中,如下所示:
■ NIS+ 名称服务的信息存储在表中。
■ NIS 名称服务的信息存储在映射中。
■ LDAP 目录服务的信息存储在带索引的数据库文件中。
注– 为了避免混淆,通常用文件来指有关用户帐户和组的信息所在的位置,而不用数据
库、表或映射。
多数用户帐户信息都存储在passwd 文件中。口令信息按如下方式进行存储:
■ 如果使用的是NIS 或NIS+,则存储在passwd 文件中
■ 如果使用的是/etc 文件,则存储在/etc/shadow 文件中
■ 如果使用的是LDAP,则存储在people 容器中
用户帐户信息和组信息的存储位置
76 系统管理指南:基本管理• 2006 年7 月
在使用NIS+ 或LDAP(而非NIS)时,口令失效功能有效。
对于NIS、NIS+ 和文件,组信息存储在group 文件中。对于LDAP,组信息存储在
group 容器中。
passwd 文件中的字段
passwd 文件中的字段由冒号分隔,其中包含如下信息:
username:password:uid:gid:comment:home-directory:login-shell
例如:
kryten:x:101:100:Kryten Series 4000 Mechanoid:/export/home/kryten:/bin/csh
下表描述了passwd 文件中的各个字段。
表4–5 passwd 文件中的字段
字段名说明
username 包含用户名或登录名。用户名应当保持唯一,且应当由1 到8 个字母
(A-Z, a-z) 和数字(0-9) 组成。第一个字符必须为字母,而且至少有一
个字符必须为小写字母。
password 包含一个x,这是加密口令的占位符。加密口令存储在shadow 文件
中。
uid 包含一个在系统中标识用户的用户标识(user identification, UID) 号。
一般用户的UID 号应当介于100 和60000 之间。所有的UID 号都应当
保持唯一。
gid 包含一个用来标识用户的主组的组标识(group identification, GID) 号。
每个GID 号都必须是一个介于0 和60002 之间的整数。数字60001 和
60002 分别指定给nobody 和noaccess。数字65534 指定给nobody4。
comment 通常包含用户的全名。该字段仅用于提供信息。它有时称作GECOS
字段,因为它最初用来存放登录信息,这些登录信息是从贝尔实验室
中的UNIX 系统向运行GECOS(General Electric Computer Operating
System,通用电子计算机操作系统)的巨型机提交批处理作业所必需
的。
home-directory 包含用户起始目录的路径名。
login-shell 包含用户的缺省登录shell,如/bin/sh、/bin/csh 或/bin/ksh。表
4–20 描述了shell 的基本功能。
用户帐户信息和组信息的存储位置
第4 章• 管理用户帐户和组(概述) 77
缺省的passwd 文件
缺省的Solaris passwd 文件包含标准守护进程的项。守护进程是通常在引导时启动的进
程,用来执行某些系统范围的任务(如打印、网络管理或端口监视)。
root:x:0:1:Super-User:/:/sbin/sh
daemon:x:1:1::/:
bin:x:2:2::/usr/bin:
sys:x:3:3::/:
adm:x:4:4:Admin:/var/adm:
lp:x:71:8:Line Printer Admin:/usr/spool/lp:
uucp:x:5:5:uucp Admin:/usr/lib/uucp:
nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico
smmsp:x:25:25:SendMail Message Submission Program:/:
listen:x:37:4:Network Admin:/usr/net/nls:
gdm:x:50:50:GDM Reserved UID:/:
webservd:x:80:80:WebServer Reserved UID:/:
nobody:x:60001:60001:NFS Anonymous Access User:/:
noaccess:x:60002:60002:No Access User:/:
nobody4:x:65534:65534:SunOS 4.x NFS Anonymous Access User:/:
表4–6 passwd 文件中的缺省项
用户名用户ID 说明
root 0 超级用户帐户
daemon 1 与例行系统任务相关联的综合系统守护进程
bin 2 与正在运行的系统二进制文件相关联的管理守护进
程,用来执行某些例行系统任务
sys 3 与临时目录中的系统日志记录或文件更新相关联的
管理守护进程
adm 4 与系统日志记录相关联的管理守护进程
lp 71 行式打印机守护进程
uucp 5 与uucp 函数相关联的守护进程
nuucp 6 与uucp 函数相关联的另一个守护进程
smmsp 25 Sendmail 邮件提交程序守护进程
webservd 80 为WebServer 访问保留的帐户
gdm 50 GNOME DisplayManager 守护进程
listen 37 网络侦听器守护进程
用户帐户信息和组信息的存储位置
78 系统管理指南:基本管理• 2006 年7 月
表4–6 passwd 文件中的缺省项(续)
用户名用户ID 说明
nobody 60001 为匿名NFS 访问保留的帐户
noaccess 60002 为需要通过某个应用程序来访问系统(而不进行实
际登录)的用户或进程指定的帐户。
nobody4 65534 SunOS 4.0 或4.1 版本的nobody 用户帐户
shadow 文件中的字段
shadow 文件中的字段由冒号分隔,其中包含如下信息:
username:password:lastchg:min:max:warn:inactive:expire
例如:
rimmer:86Kg/MNT/dGu.:8882:0::5:20:8978
下表描述了shadow 文件中的各个字段。
表4–7 shadow 文件中的字段
字段名说明
username 包含用户名(又称作登录名)。
password 可以包含以下项之一:
■ 由13 个字符组成的加密用户口令
■ 字符串*LK*(指示帐户不可访问)
■ 字符串NP(指示帐户无口令)
lastchg 指示从1970 年1 月1 日到上次修改口令的日期之间的天数。
min 包含所需的相邻两次更改口令之间的最小天数。
max 包含在系统提示用户指定新口令之前口令保持有效的最大天数。
warn 指示用户在口令到期之前多少天得到警告。
inactive 包含用户帐户在被锁定之前保持不活动状态的天数。
expire 包含用户帐户到期时的绝对日期。在该日期之后,用户将无法登录系
统。
用户帐户信息和组信息的存储位置
第4 章• 管理用户帐户和组(概述) 79
group 文件中的字段
group 文件中的字段由冒号分隔,其中包含如下信息:
group-name:group-password:gid:user-list
例如:
bin::2:root,bin,daemon
下表描述了group 文件中的各个字段。
表4–8 group 文件中的字段
字段名说明
group-name 包含为该组指定的名称。例如,大学中化学系的成员可以称作chem。组名
最多可以包含八个字符。
group-password 通常包含星号或为空。group-password 字段是早期版本UNIX 的遗留字段。
如果组有口令,那么newgrp 命令会提示用户输入口令。但是,没有可用来
设置口令的实用程序。
gid 包含组的GID 号。GID 号必须在本地系统保持唯一,也应该在整个工作单
位内保持唯一。每个GID 号都必须是介于0 和60002 之间的整数。小于100
的数字是为系统的缺省组帐户保留的。用户定义的组的GID 号可以是100
和60000 之间的整数。数字60001 和60002 是保留的GID 号,它们分别指定
给nobody 和noaccess。
user-list 包含一个由逗号分隔的用户名列表,表示用户的辅助组成员身份。每个用
户最多可以属于15 个辅助组。
缺省的group 文件
缺省的Solaris group 文件包含下列系统组,这些组支持某些系统范围的任务,如打印、
网络管理或电子邮件。其中的许多组在passwd 文件中都有相应的项。
root::0:
other::1:
bin::2:root,daemon
sys::3:root,bin,adm
adm::4:root,daemon
uucp::5:root
mail::6:root
tty::7:root,adm
lp::8:root,adm
nuucp::9:root
staff::10:
用户帐户信息和组信息的存储位置
80 系统管理指南:基本管理• 2006 年7 月
daemon::12:root
smmsp::25:
sysadmin::14:
gdm::50:
webservd::80:
nobody::60001:
noaccess::60002:
nogroup::65534:
表4–9 缺省group 文件中的项
组名组ID 说明
root 0 超级用户组
other 1 可选组
bin 2 与正在运行的系统二进制文件相关联的管理组
sys 3 与系统日志记录或临时目录相关联的管理组
adm 4 与系统日志记录相关联的管理组
uucp 5 与uucp 函数相关联的组
mail 6 电子邮件组
tty 7 与tty 设备相关联的组
lp 8 行式打印机组
nuucp 9 与uucp 函数相关联的组
staff 10 一般的管理组
daemon 12 与例行系统任务相关联的组
sysadmin 14 与传统的Admintool 和Solstice AdminSuite 工具相关
联的管理组
smmsp 25 Sendmail 邮件提交程序的守护进程
webservd 80 为WebServer 访问保留的组
gdm 50 为GNOME DisplayManager 守护进程保留的组
nobody 60001 为匿名NFS 访问保留的组
noaccess 60002 为需要通过某个应用程序访问系统(而不进行实际
登录)的用户或进程指定的组
nogroup 65534 为不是已知组中成员的用户指定的组
用户帐户信息和组信息的存储位置
第4 章• 管理用户帐户和组(概述) 81
用于管理用户帐户和组的工具
下表列出了推荐的用于管理用户和组的工具。这些工具包含在SolarisManagement
Console 的工具套件中。有关启动和使用SolarisManagement Console 的信息,请参见
第2 章。
表4–10用于管理用户和组的工具
Solaris 管理工具用途
用户管理用户帐户
用户模板为特定种类的用户(如学生、工程师或讲师)创
建一组属性
权限管理RBAC 权限
管理角色管理RBAC 管理角色
组管理组信息
项目管理项目信息
邮件列表管理邮件列表
有关执行这些任务的信息,请参见SolarisManagement Console 联机帮助。
有关可用于管理用户帐户和组的Solaris 命令的信息,请参见表1–6。这些命令提供与
Solaris 管理工具相同的功能(包括验证和名称服务支持)。
Solaris 用户和组管理工具的任务
使用Solaris 用户管理工具,可以在本地系统或名称服务环境中管理用户帐户和组。
下表描述了可以通过用户工具的用户帐户功能执行的任务。
表4–11用户帐户工具的任务说明
任务说明
添加用户向本地系统或名称服务中添加用户。
创建用户模板创建预定义用户属性的模板,用来创建属于同一个组的
用户(如学生、承包商或工程师)。
使用用户模板添加用户使用模板添加用户,以便对用户属性进行预定义。
用于管理用户帐户和组的工具
82 系统管理指南:基本管理• 2006 年7 月
表4–11 用户帐户工具的任务说明(续)
任务说明
克隆用户模板如果希望使用一组类似的预定义用户属性,可以克隆用
户模板,然后根据需要仅更改部分属性。
设置用户属性在添加用户之前设置用户属性。属性包括指定在添加用
户时是否使用用户模板,以及在删除用户时是否缺省删
除起始目录或邮箱。
添加多个用户通过以下方法向本地系统或名称服务中添加多个用户:
指定一个文本文件、键入每个用户名或者自动生成一系
列用户名。
查看或更改用户属性显示或更改用户属性(如登录shell、口令或口令选
项)。
为用户指定权限为用户指定将允许他们执行特定管理任务的RBAC 权
限。
删除用户从本地系统或名称服务中删除用户。还可以选择指定是
否删除用户的起始目录或邮箱。同时将用户从所有组或
角色中删除。
有关向本地系统或名称服务中添加用户的信息,请参见第70 页中的“什么是用户帐户
和组?”和第70 页中的“用户帐户的组成部分”。
表4–12权限工具的任务说明
任务说明
授予权限授予用户运行特定命令或应用程序的权限,该命令或
应用程序以前只能由管理员使用。
查看或更改现有的权限属性显示或更改现有的权限。
添加授权添加授权,授权是授予角色或用户的独立权限。
查看或更改授权显示或更改现有的授权。
有关授予用户权限的更多信息,请参见《系统管理指南:安全性服务》中的“权限配置
文件的内容”。
表4–13管理角色工具的任务说明
任务说明
添加管理角色添加由某人用来执行特定管理任务的角色。
为管理角色指定权限为角色指定将允许某人执行任务的特定权限。
用于管理用户帐户和组的工具
第4 章• 管理用户帐户和组(概述) 83
表4–13 管理角色工具的任务说明(续)
任务说明
更改管理角色在角色中添加或删除权限。
有关使用管理角色的更多信息,请参见《系统管理指南:安全性服务》中的“如何规划
RBAC 实现”。
表4–14组工具的任务说明
任务说明
添加组向本地系统或名称服务中添加组,以便组名在添加用户
之前可用。
向组中添加用户如果用户需要访问由某个组拥有的文件,将用户添加到
该组中。
从组中删除用户如果用户不再需要访问组文件,将该用户从该组中删
除。
有关向组中添加用户的信息,请参见第73 页中的“UNIX 组”。
表4–15邮件列表工具的任务说明
任务说明
创建邮件列表创建邮件列表,其中包含用来发送电子邮件的用户名列
表。
更改邮件列表的名称更改所创建的邮件列表。
删除邮件列表删除不再使用的邮件列表。
有关创建邮件列表的信息,请参见SolarisManagement Console 联机帮助。
表4–16项目工具的任务说明
任务说明
创建或克隆项目创建新项目,或者如果新项目所需的属性与现有项目的
属性相似,可以克隆现有的项目。
修改或查看项目属性显示或更改现有项目的属性。
删除项目删除不再使用的项目。
用于管理用户帐户和组的工具
84 系统管理指南:基本管理• 2006 年7 月
用项目管理用户和资源
从Solaris 9 发行版开始,用户和组可以是项目的成员,项目是一个标识符,用来指示可
用作系统使用情况或资源分配费用分摊基础的工作量组件。项目是Solaris 资源管理功
能的一部分,用来管理系统资源。
用户必须是项目的成员才能成功登录运行Solaris 9 发行版的系统。缺省情况下,在安装
了Solaris 9 发行版且未配置其他项目信息时,用户是group.staff 项目的成员。
用户项目信息存储在/etc/project 文件中,该文件可以存储在本地系统(文件)、NIS
名称服务或LDAP 目录服务中。可以使用SolarisManagement Console 来管理项目信
息。
/etc/project 文件必须存在,用户才能成功登录,但是如果您没有使用项目,则无需
对该文件进行任何管理。
有关使用或设置项目的更多信息,请参见《系统管理指南:Solaris Containers-资源管
理和Solaris Zones》中的第2 章“项目和任务(概述)”。
自定义用户的工作环境
在设置用户的起始目录的过程中,需要为用户的登录shell 提供用户初始化文件。用户
初始化文件是一个shell 脚本,用来在用户登录系统之后为其设置工作环境。使用用户
初始化文件基本上可以执行shell 脚本所能完成的全部任务。但是,用户初始化文件的
主要任务是定义用户工作环境的特征,如用户的搜索路径、环境变量和窗口环境。每
个登录shell 都有各自的初始化文件,下表列出了这些文件。
表4–17 Bourne Shell、CShell 和Korn Shell 的用户初始化文件
shell 用户初始化文件用途
Bourne $HOME/.profile 在用户登录时定义用户的环境
C $HOME/.cshrc 为所有的C shell 定义用户环境,在登录shell 之后
调用
$HOME/.login 在用户登录时定义用户的环境
Korn $HOME/.profile 在用户登录时定义用户的环境
$HOME/$ENV 在用户登录文件时定义用户的环境,由Korn shell
的ENV 环境变量指定
Solaris 环境为每个系统上/etc/skel 目录中的每个shell 提供缺省的用户初始化文件,如
下表所示。
自定义用户的工作环境
第4 章• 管理用户帐户和组(概述) 85
表4–18缺省的用户初始化文件
shell 缺省文件
C /etc/skel/local.login
/etc/skel/local.cshrc
Bourne 或Korn /etc/skel/local.profile
可以将这些文件用作起始点,并修改它们,以便创建一组标准文件,从而提供对于所
有用户均相同的工作环境。也可以修改这些文件,以便为不同类型的用户提供工作环
境。尽管不能使用用户工具创建自定义的用户初始化文件,但是可以使用那些位于指
定“框架”目录中的用户初始化文件填充用户的起始目录。这可以通过以下方法来完成:
使用用户模板工具创建用户模板,然后指定要从中复制用户初始化文件的框架目录。
有关如何为不同类型的用户创建系列用户初始化文件的逐步说明,请参见第99 页中的
“如何自定义用户初始化文件”。
在使用用户工具创建新用户帐户并选择“创建起始目录”选项时,将创建下列文件,具体
情况取决于选定的登录shell。
表4–19在添加用户时使用用户工具创建的文件
shell 所创建的文件
C /etc/skel/local.cshrc 和/etc/skel/local.login 文件将被复制到用户
的起始目录中,并分别被重命名为.cshrc 和.login。
Bourne 和Korn /etc/skel/local.profile 文件将被复制到用户的起始目录中,并被重命
名为.profile
如果使用useradd 命令添加新用户帐户,并使用-k 和-m 选项来指定/etc/skel 目录,
所有这三个文件(/etc/skel/local * 文件和/etc/skel/.profile 文件)将复制到用户
的起始目录中。此时,需要将它们重命名为适合用户的登录shell 的名称。
使用站点初始化文件
管理员和用户均可以对用户初始化文件进行自定义。这个重要功能可以通过位于集中
位置且分布在全局的名为站点初始化文件的用户初始化文件来完成。使用站点初始化
文件,可以不断向用户的工作环境中引入新功能,同时允许用户自定义用户初始化文
件。
如果您在用户初始化文件中引用站点初始化文件,那么,当用户登录系统时或者当用
户启动新shell 时,对于站点初始化文件进行的所有更新都将自动反映出来。站点初始
化文件旨在将系统范围的更改分发到您在添加用户时未参与的用户工作环境中。
自定义用户的工作环境
86 系统管理指南:基本管理• 2006 年7 月
可以按照自定义用户初始化文件的方式自定义站点初始化文件。站点初始化文件通常
驻留在一台或一组服务器上,并作为第一条语句出现在用户初始化文件中。而且,每
个站点初始化文件都必须与引用它的用户初始化文件属于相同类型的shell 脚本。
要在C shell 用户初始化文件中引用站点初始化文件,请在用户初始化文件的开头放置
一行类似如下的语句:
source /net/machine-name/export/site-files/site-init-file
要在Bourne shell 或Korn shell 用户初始化文件中引用站点初始化文件,请在用户初始
化文件的开头放置一行类似如下的语句:
. /net/machine-name/export/site-files/site-init-file
避免引用本地系统
不应向用户初始化文件中添加对本地系统的特定引用。无论用户登录哪个系统,您都
会希望用户初始化文件中的指令有效。例如:
■ 为了使用户的起始目录可在网络上的任何位置使用,请始终用变量$HOME 引用起始
目录。例如,使用$HOME/bin,而不使用/export/home/username/bin。如果起始目
录在用户登录另一个系统时自动挂载,$HOME 变量将有效。
■ 要访问本地磁盘上的文件,请使用全局路径名,如
/net/system-name/directory-name。由/net/system-name 引用的任何目录都可以在用
户所登录的系统上自动挂载(假设该系统运行的是AutoFS)。
Shell 功能
下表列出了每个shell 所提供的基本shell 功能,这有助于确定在为每个shell 创建用户初
始化文件时可以执行的操作和不能执行的操作。
表4–20 Bourne Shell、CShell 和Korn Shell 的基本功能
功能Bourne C Korn
是否可以称作UNIX 中的标准shell 是否否
是否与Bourne shell 的语法兼容- 否是
是否提供作业控制是是是
是否提供历史记录列表否是是
是否提供命令行编辑否是是
自定义用户的工作环境
第4 章• 管理用户帐户和组(概述) 87
表4–20 Bourne Shell、C Shell 和Korn Shell 的基本功能(续)
功能Bourne C Korn
是否提供别名否是是
是否提供登录目录的单字符缩写否是是
是否防止覆写(noclobber) 否是是
是否设置为忽略Ctrl-D (ignoreeof) 否是是
是否提供增强的cd 命令否是是
是否将初始化文件与.profile 与分开否是是
是否提供退出文件否是否
Shell 环境
Shell 可维护包含一组变量的环境,这些变量由login 程序、系统初始化文件和用户初
始化文件定义。另外,某些变量是在缺省情况下定义的。Shell 可以有两种类型的变量
:
■ 环境变量-导出到由shell 产生的所有进程的变量。可以使用env 命令查看这些变量
的设置。环境变量的子集(如PATH)影响shell 本身的行为。
■ Shell(局部)变量-只影响当前shell 的变量。在C shell 中,一组shell(局部)变量
与相应的一组环境变量具有特殊关系。这些shell 变量包括user、term、home 和
path。相应环境变量的值最初用来设置shell 变量。
在C shell 中,可使用小写名称和set 命令来设置shell 变量,使用大写名称和setenv 命
令来设置环境变量。如果设置shell 变量,shell 会设置相应的环境变量,反之亦然。例
如,如果使用一个新路径更新path shell 变量,shell 也会用这个新路径更新PATH 环境变
量。
在Bourne shell 和Korn shell 中,可以使用等于某个值的大写变量名称来设置shell 变量
和环境变量。还必须使用export 命令为后续要执行的任何命令激活这些变量。
对于所有的shell,通常按变量的大写名称引用shell 变量和环境变量。
在用户初始化文件中,可以通过更改预定义变量的值和指定其他变量来自定义用户的
shell 环境。下表显示如何在用户初始化文件中设置环境变量。
自定义用户的工作环境
88 系统管理指南:基本管理• 2006 年7 月
表4–21在用户初始化文件中设置环境变量
Shell 类型添加到用户初始化文件中的行
C shell setenv VARIABLE value
示例:
setenv MAIL /var/mail/ripley
Bourne shell 或Korn shell VARIABLE=value ; export VARIABLE
示例:
MAIL=/var/mail/ripley;export MAIL
下表描述了您可能希望在用户初始化文件中自定义的环境变量和shell 变量。有关不同
shell 所使用变量的更多信息,请参见sh(1)、ksh(1) 或csh(1) 手册页。
表4–22 Shell 变量和环境变量的说明
变量说明
C shell 中的CDPATH 或
cdpath
设置由cd 命令使用的变量。如果将cd 命令的目标目录指定为相对路径名,
cd 命令将首先在当前目录(“.”) 中查找目标目录。如果没有找到目标目录,将
继续搜索列在CDPATH 变量中的路径名,直到找到目标目录并完成目录切换。
如果没有找到目标目录,则当前的工作目录保持不变。例如,CDPATH 变量设
置为/home/jean,/home/jean 下面有两个目录:bin 和rje。如果当前的目录
是/home/jean/bin 目录,那么,当您键入cd rje 时,即使您未指定全路径
名,目录也将切换到/home/jean/rje。
history 为C shell 设置历史记录。
C shell 中的HOME 或
home
设置用户起始目录的路径。
LANG 设置语言环境(locale)。
LOGNAME 定义当前登录用户的名称。登录程序会将LOGNAME 的缺省值自动设置为在
passwd 文件中指定的用户名。您不应当重置此变量,而只应当引用此变量。
LPDEST 设置用户的缺省打印机。
MAIL 设置用户邮箱的路径。
MANPATH 设置可用手册页的分层结构。
自定义用户的工作环境
第4 章• 管理用户帐户和组(概述) 89
表4–22 Shell 变量和环境变量的说明(续)
变量说明
C shell 中的PATH 或
path
按顺序指定多个目录,当用户键入命令时,shell 将在这些目录搜索要运行的
程序。如果该目录不在搜索路径中,用户必须键入命令的完整路径名。
在登录过程中,系统会自动定义缺省的PATH,并将其设置为在.profile
(Bourne shell 或Korn shell 中)或.cshrc (C shell) 中指定的路径。
搜索路径的顺序至关重要。如果不同位置中存在相同的命令,将使用首先找
到的具有该名称的命令。例如,假设在Bourne shell 和Korn shell 语法中将
PATH 定义为PATH=/bin:/usr/bin:/usr/sbin:$HOME/bin,/usr/bin 和
/home/jean/bin 中均有名为sample 的文件。如果用户键入sample 命令而未指
定其全路径名,则将使用在/usr/bin 中找到的版本。
prompt 为C shell 定义shell 提示符。
PS1 为Bourne shell 或Korn shell 定义shell 提示符。
C shell 中的SHELL 或
shell
设置由make、vi 和其他工具使用的缺省shell。
TERMINFO 指定已添加到terminfo 文件中的不受支持终端的路径名。可使用
/etc/profile 或/etc/.login 文件中的TERMINFO 变量。
如果设置了TERMINFO 环境变量,系统将首先检查由用户定义的TERMINFO 路
径。如果系统在用户定义的TERMINFO 目录中找不到终端的定义,它将在缺省
目录(/usr/share/lib/terminfo) 中搜索终端的定义。如果系统在这两个目录
中均未找到终端的定义,则将终端标识为“哑终端”。
C shell 中的TERM 或
term
定义终端。此变量应当在/etc/profile 或/etc/.login 文件中重置。当用户
调用编辑器时,系统将查找在该环境变量中定义的同名文件。系统将搜索
TERMINFO 所引用的目录以确定终端的特征。
TZ 设置时区。例如,时区可用于在ls -l 命令中显示日期。如果没有在用户的
环境中设置TZ,将使用系统设置。否则,将使用格林威治标准时间。
PATH 变量
当用户使用全路径执行命令时,shell 将使用该路径来查找此命令。但是,当用户仅指
定命令名称时,shell 将按PATH 变量指定的顺序在目录中搜索该命令。如果在一个目录
中找到了该命令,shell 将执行该命令。
缺省路径由系统设置。但是,多数用户会通过修改该路径来添加其他命令目录。与设
置环境和访问命令或工具的正确版本有关的许多用户问题都是路径定义错误引起的。
路径的设置准则
下面是设置有效PATH 变量的一些准则:
■ 如果无需考虑安全问题,请首先将当前的工作目录(.) 放在路径中。但是,在路径中
包括当前的工作目录会引起您可能希望避免的安全风险,对于超级用户尤其如此。
自定义用户的工作环境
90 系统管理指南:基本管理• 2006 年7 月
■ 搜索路径应尽可能短。Shell 会在该路径中搜索每个目录。如果未找到命令,搜索长
目录会降低系统性能。
■ 搜索路径的读取顺序是从左到右,因此,您应当将常用命令的目录放在路径的开
头。
■ 确保目录在路径中不重复。
■ 尽可能避免搜索大型目录。将大型目录放在路径的末尾处。
■ 将本地目录放在NFS 挂载目录之前,以便减少在NFS 服务器不响应时“挂起”的几
率。此策略还会减少不必要的网络通信流量。
示例-设置用户的缺省路径
下面的几个示例说明如何将用户的缺省路径设置为包括起始目录和其他NFS 挂载目
录。首先在该路径中指定当前的工作目录。在C shell 用户初始化文件中,可以添加如
下内容:
set path=(. /usr/bin $HOME/bin /net/glrr/files1/bin)
在Bourne shell 或Korn shell 用户初始化文件中,可以添加如下内容:
PATH=.:/usr/bin:/$HOME/bin:/net/glrr/files1/bin
export PATH
语言环境变量
LANG 和LC 环境变量可以为shell 指定特定于语言环境的转换和约定。这些转换和约定包
括时区、整理顺序、日期格式、时间格式、货币格式和数字格式。另外,还可以使用
用户初始化文件中的stty 命令来指示终端会话是否支持多字节字符。
LANG 变量为给定的语言环境设置所有可能的转换和约定。LC 变量分别设置本地化的多
个方面:LC_COLLATE、LC_CTYPE、LC_MESSAGES、LC_NUMERIC、LC_MONETARY 和LC_TIME。
下表描述了LANG 和LC 环境变量的某些值。
表4–23 LANG 和LC 变量的值
值语言环境
de_DE.ISO8859-1 德语
en_US.UTF-8 美国英语(UTF-8)
es_ES.ISO8859-1 西班牙语
fr_FR.ISO8859-1 法语
自定义用户的工作环境
第4 章• 管理用户帐户和组(概述) 91
表4–23 LANG 和LC 变量的值(续)
值语言环境
it_IT.ISO8859-1 意大利语
ja_JP.eucJP 日语(EUC)
ko_KR.EUC 韩文(EUC)
sv_SE.ISO8859-1 瑞典语
zh_CN.EUC 简体中文(EUC)
zh_TW.EUC 繁体中文(EUC)
有关支持的语言环境的更多信息,请参见《国际语言环境指南》。
示例4–1 使用LANG 变量设置语言环境
下面的几个示例说明如何使用LANG 环境变量来设置语言环境。在C shell 用户初始化文
件中,可以添加如下内容:
setenv LANG de_DE.ISO8859-1
在Bourne shell 或Korn shell 用户初始化文件中,可以添加如下内容:
LANG=de_DE.ISO8859-1; export LANG
缺省的文件权限(umask)
在创建文件或目录时,指定给文件或目录的缺省文件权限由用户掩码控制。用户掩码
由用户初始化文件中的umask 命令设置。可以通过键入umask 并按回车键来显示用户掩
码的当前值。
用户掩码中包含下列八进制值:
■ 第一位用来为用户设置权限
■ 第二位用来为组设置权限
■ 第三位用来为其他实体设置权限(又称作world)
请注意,如果第一位是零,它将不显示出来。例如,如果用户掩码设置为022,则将显
示22。
如需确定要设置的umask 值,请用666(对于文件)或777(对于目录)减去所需的权
限值。差值就是要用于umask 命令的值。例如,假设您希望将文件的缺省模式设置为
644 (rw-r--r--),666 与644 的差值022 就是将用作umask 命令参数的值。
还可以使用下表来确定要设置的umask 值。下表显示了为umask 的每个八进制值创建的
文件权限和目录权限。
自定义用户的工作环境
92 系统管理指南:基本管理• 2006 年7 月
表4–24 umask 权限的值
umask 八进制值文件权限目录权限
0 rw- rwx
1 rw- rw-
2 r-- r-x
3 r-- r--
4 -w- -wx
5 -w- -w-
6 --x --x
7 ---(无) ---(无)
用户初始化文件中的下行用来将缺省的文件权限设置为rw-rw-rw-。
umask 000
用户初始化文件和站点初始化文件的示例
以下几节提供用户初始化文件和站点初始化文件的示例,您可以从这些文件开始自定
义自己的初始化文件。您需要针对特定的站点更改这些示例中使用的系统名称和路
径。
示例4–2 .profile 文件
(Line 1) PATH=$PATH:$HOME/bin:/usr/local/bin:/usr/ccs/bin:.
(Line 2) MAIL=/var/mail/$LOGNAME
(Line 3) NNTPSERVER=server1
(Line 4) MANPATH=/usr/share/man:/usr/local/man
(Line 5) PRINTER=printer1
(Line 6) umask 022
(Line 7) export PATH MAIL NNTPSERVER MANPATH PRINTER
1. 定义用户的shell 搜索路径
2. 定义用户邮件文件的路径
3. 定义用户的Usenet(世界性的新闻组网络系统)新闻服务器
4. 定义用户的手册页搜索路径
5. 定义用户的缺省打印机
6. 设置用户的缺省文件创建权限
7. 设置所列出的环境变量
自定义用户的工作环境
第4 章• 管理用户帐户和组(概述) 93
示例4–3 .cshrc 文件
(Line 1) set path=($PATH $HOME/bin /usr/local/bin /usr/ccs/bin)
(Line 2) setenv MAIL /var/mail/$LOGNAME
(Line 3) setenv NNTPSERVER server1
(Line 4) setenv PRINTER printer1
(Line 5) alias h history
(Line 6) umask 022
(Line 7) source /net/server2/site-init-files/site.login
1. 定义用户的shell 搜索路径。
2. 设置用户邮件文件的路径。
3. 定义用户的Usenet 新闻服务器。
4. 定义用户的缺省打印机。
5. 为history 命令创建别名。用户只需键入h 即可运行history 命令。
6. 设置用户的缺省文件创建权限。
7. 以站点初始化文件为来源。
示例4–4站点初始化文件
下面的示例显示用户可从中选择特定应用程序版本的站点初始化文件。
# @(#)site.login
main:
echo "Application Environment Selection"
echo ""
echo "1. Application, Version 1"
echo "2. Application, Version 2"
echo ""
echo -n "Type 1 or 2 and press Return to set your
application environment: "
set choice = $<
if ( $choice !~ [1-2] ) then
goto main
endif
switch ($choice)
case "1":
setenv APPHOME /opt/app-v.1
breaksw
case "2":
setenv APPHOME /opt/app-v.2
endsw
自定义用户的工作环境
94 系统管理指南:基本管理• 2006 年7 月
示例4–4 站点初始化文件(续)
站点初始化文件可以在用户的.cshrc 文件(仅限C shell)中引用,该文件中包含下行
:
source /net/server2/site-init-files/site.login
在该行中,站点初始化文件命名为site.login 且位于名为server2 的服务器上。该行
还假设用户的系统运行的是自动挂载程序。
工具名称说明更多信息
useradd、groupadd、roleadd;
usermod、groupmod、rolemod;
userdel、groupdel、roledel
用于管理用户、组和角色的命
令。
第102 页中的“示例-用
groupadd 和useradd 命令添加组
和用户”
什么是用户帐户和组?
一个基本的系统管理任务就是在站点为每个用户都设置一个用户帐户。典型的用户帐
户包括在没有系统的超级用户口令的情况下,用户登录和使用系统所必需的信息。有
关用户帐户组成部分的信息在第70 页中的“用户帐户的组成部分”中进行说明。
在设置用户帐户时,可以向预定义的用户组中添加用户。组的典型用法是为文件和目
录设置组权限,从而只允许属于该组的用户进行访问。
例如,可能有一个目录中包含只应当由少数几个用户访问的机密文件。可以设置一个
名为topsecret 的组,其中包括参与topsecret 项目的用户,然后为topsecret 组设置
对topsecret 文件的读取权限。这样,只有topsecret 组中的用户才能够读取这些文
件。
角色是一种特殊类型的用户帐户,可用于赋予选定的用户特殊权限。有关更多信息,
请参见《系统管理指南:安全性服务》中的“基于角色的访问控制(概述)”。
用户帐户的组成部分
以下几节介绍用户帐户的特定组成部分。
用户名(登录名)
用户名,又称作登录名,使用它用户可以访问他们自己的系统,及其具有适当访问权
限的远程系统。必须为所创建的每个用户帐户都选择一个用户名。
建议建立一种标准方法来指定用户名,以便于跟踪它们。而且,用户名应便于用户记
忆。在选择用户名时,一个简单的方案就是使用用户名字的首字母和姓氏的前七个字
母。例如,Ziggy Ignatz 的用户名为zignatz。如果使用此方案会产生重名,则可以使用
用户第一个名字的首字母、中间名字的首字母和姓氏的前六个字母。例如,Ziggy Top
Ignatz 的用户名为ztignatz。
如果使用此方案仍产生重名,请考虑使用下面的方案来创建用户名:
■ 用户第一个名字的首字母、中间名字的首字母和姓氏的前五个字母
■ 数字1、2 或3,依此类推,直到用户名唯一
什么是用户帐户和组?
70 系统管理指南:基本管理• 2006 年7 月
注– 每个新用户名都必须不同于系统或NIS/NIS+ 域已知的任何邮件别名。否则,邮件
可能会传送到使用该别名的用户(而非实际用户)。
有关设置用户名(登录名)的详细指南,请参见第76 页中的“用户名、用户ID 和组
ID 的使用指南”。
用户ID 号
每个用户名都有一个与之相关联的用户标识(user identification, UID) 号。UID 号在任何
用户尝试登录的系统中标识用户名。系统可以使用UID 号来标识文件和目录的属主。
如果在许多不同的系统上为同一个人创建用户帐户,请始终使用相同的用户名和用户
ID 号。这样,用户可以在系统之间方便地移动文件,而不会出现拥有权问题。
UID 号必须是一个小于或等于2147483647 的整数。UID 号是一般用户帐户和特殊系统
帐户所必需的。下表列出了为用户帐户和系统帐户保留的UID 号。
表4–2 保留的UID号
UID 号用户帐户或登录帐户说明
0 – 99 root、daemon、bin、sys 等系统帐户
100 – 2147483647 一般用户通用帐户
60001 和65534 nobody 和nobody4 匿名用户
60002 noaccess 不可信用户
不要为一般用户帐户指定0 到99 的UID,这些UID 是为系统保留的。根据定义,root
的UID 始终为0,daemon 的UID 始终为1,伪用户bin 的UID 始终为2。另外,应当为
uucp 登录和伪用户登录(如who、tty 和ttytype)指定较小的UID,以便它们位于
passwd 文件的开头。
有关设置UID 的其他指南,请参见第76 页中的“用户名、用户ID 和组ID 的使用指
南”。
与用户名(登录名)一样,应采用一个方案来指定唯一的UID 号。某些公司会指定唯
一的员工编号。这样,管理员可以在员工编号的基础上添加一个编号,以便为每个员
工创建一个唯一的UID 号。
为了尽可能降低安全风险,应当避免重新使用已删除帐户的UID。如果必须重新使用
某个UID,请“彻底清除以前的帐户”,以便新用户不会受到先前用户属性集的影响。例
如,先前的用户可能会因包含在打印机拒绝列表中而被拒绝访问打印机。但是,该属
性对于新用户可能并不适合。
什么是用户帐户和组?
第4 章• 管理用户帐户和组(概述) 71
使用较大的用户ID 和组ID
可以为UID 和组ID (group ID, GID) 指定带符号整数的最大值(即2147483647)。
但是,大于60000 的UID 和GID 只具有部分功能且与许多Solaris 功能不兼容。因此,
应避免使用大于60000 的UID 或GID。
下表描述了与Solaris 产品和以前的Solaris 发行版的互操作性问题。
表4–3 大于60000 的UID 或GID 的互操作性问题
类别产品或命令问题
NFS 互操作性SunOS 4.0 NFS 软件及其
兼容发行版
NFS 服务器和客户机代码将较大的UID 和GID 截
断到16 位。如果在使用较大的UID 和GID 的环
境中使用运行SunOS 4.0 和兼容发行版的系统,
可能会产生安全问题。运行SunOS 4.0 和兼容发
行版的系统需要一个修补程序以避免出现此问
题。
名称服务互操作性NIS 名称服务和基于文
件的名称服务
UID 大于60000 的用户可以在运行Solaris 2.5(和
兼容发行版)的系统上登录或者使用su 命令。但
是,会将他们的UID 和GID 设置为60001
(nobody)。
NIS+ 名称服务UID 大于60000 的用户被拒绝访问运行Solaris 2.5
(和兼容发行版)和NIS+ 名称服务的系统。
表4–4 较大UID 或GID 的限制摘要
UID 或GID 限制
60003 或更大用户在登录运行Solaris 2.5(和兼容发行版)和NIS 或文件名称服务的
系统之后,将获得以下UID 和GID:nobody。
65535 或更大■ 运行Solaris 2.5(和兼容发行版)和NFS 版本2 软件的系统会将
UID 截断到16 位,这有可能会产生安全问题。
■ 使用具有缺省归档格式的cpio 命令复制文件的用户,会看到系统
针对每个文件都返回一条错误消息。而且,归档中的UID 和GID
被设置为nobody。
■ 基于x86 的系统:运行与SVR3 兼容的应用程序的用户可能会在进
行系统调用时看到EOVERFLOW 返回代码。
■ 基于x86 的系统:如果用户尝试在已挂载的System V 文件系统上
创建文件或目录,则System V 文件系统会返回一个EOVERFLOW 错
误。
100000 或更大ps -l 命令最多可显示五位的UID。因此,如果列显的列中包括大于
99999 的UID 或GID,则该列将不对齐。
什么是用户帐户和组?
72 系统管理指南:基本管理• 2006 年7 月
表4–4 较大UID 或GID 的限制摘要(续)
UID 或GID 限制
262144 或更大使用具有-H odc 格式的cpio 命令或者使用pax -x cpio 命令复制文件
的用户,会看到系统针对每个文件都返回一条错误消息。而且,归档
中的UID 和GID 被设置为nobody。
1000000 或更大使用ar 命令的用户,其归档中的UID 和GID 设置为nobody。
2097152 或更大使用tar 命令、cpio -H ustar 命令或pax -x tar 命令的用户,其UID
和GID 设置为nobody。
UNIX 组
组是指可共享文件和其他系统资源的用户的集合。例如,参与同一个项目的用户可以
形成一个组。组在以前称作UNIX 组。
每个组都必须有名称、组标识(group identification, GID) 号和一个属于该组的用户名的
列表。GID 号用来在系统内部标识组。用户可属于以下两种组:
■ 主组-这是操作系统指定给由用户所创建文件的组。每个用户都必须属于一个主
组。
■ 辅助组-这是用户所属的除主组之外的一个或多个组。用户最多可以属于15 个辅助
组。
有关设置组名的详细指南,请参见第76 页中的“用户名、用户ID 和组ID 的使用指南
”。
有时,用户的辅助组并不重要。例如,文件的拥有权反映主组,而不反映任何辅助
组。但是,其他应用程序可能会依赖用户的辅助组成员身份。例如,用户必须是
sysadmin 组(组14)的成员才能使用以前的Solaris 发行版中的Admintool 软件。但
是,如果组14 是用户的当前主组,则辅助组变得无关紧要。
groups 命令可列出用户所属的组。用户一次只能有一个主组。但是,用户可以使用
newgrp 命令,将其主组临时更改为它所属的任何其他组。
在添加用户帐户时,必须为用户指定一个主组或者接受缺省组staff(组10)。该主组
应当已经存在。如果主组不存在,请按GID 号指定主组。用户名不会添加到主组中。
如果将用户名添加到主组中,列表可能会变得太长。必须创建一个新的辅助组并为其
指定GID 号,才能将用户指定给该组。
组可以是系统上的本地组,也可以通过名称服务进行管理。为了简化对组的管理,应
当使用名称服务(如NIS)或目录服务(如LDAP)。使用这些服务可以集中管理组中
所有成员身份。
用户口令
可以在添加用户时为用户指定口令。也可以强制用户在首次登录时指定口令。用户口
令必须遵循下面的语法:
什么是用户帐户和组?
第4 章• 管理用户帐户和组(概述) 73
■ 口令长度至少必须与/etc/default/passwd 文件中PASSLENGTH 变量所标识的值相
符。缺省情况下,PASSLENGTH 被设置为6。
■ 口令的前6 个字符必须至少包含两个字母字符,还必须至少包含一个数值字符或特
殊字符。
■ 通过使用可支持八个以上字符的算法来配置/etc/policy.conf 文件,可以将口令的
最大长度增加到八个字符以上。
尽管用户名是公开的,但是口令必须保密,而且仅为用户所知。应当为每个用户帐户
都指定一个口令。口令可以是六到八个字母、数字或特殊字符的组合。
为了使计算机系统更安全,用户应当定期更改其口令。为了实现较高级别的安全,应
当要求用户每六周更改一次口令。对于较低级别的安全来说,每三个月更改一次口令
就足够了。系统管理登录名(如root 和sys)应当每月更改一次,或者应当在知道超级
用户口令的员工离开公司或者换岗时进行更改。
许多计算机安全性破坏都涉及到猜测合法用户的口令。应当确保用户避免使用名词、
姓名、登录名和其他只需了解该用户的一些情况就有可能猜到的口令。
最好选择如下口令:
■ 短语(beammeup)。
■ 由短语中每个单词的前几个字母组成的无意义的单词。例如,用swotrb 来替换
SomeWhereOver The RainBow。
■ 用数字或字符替换字母的单词。例如,用sn00py 替换snoopy。
请勿选择如下口令:
■ 您的姓名(从前向后拼、从后向前拼或混杂在一起)
■ 家庭成员的姓名或宠物的名字
■ 汽车驾照编号
■ 电话号码
■ 社会安全号码
■ 员工编号
■ 与爱好或兴趣有关的单词
■ 季节主题,如Santa inDecember
■ 字典中的任何单词
起始目录
起始目录是分配给用户的文件系统的一部分,用于存储专用文件。为起始目录分配的
空间量取决于用户所创建的文件的种类、大小和数量。
起始目录可以位于用户的本地系统上,也可以位于远程文件服务器上。在任一情况
下,都应当按照惯例创建/export/home/username 形式的起始目录。对于较大的站点,
应当将起始目录存储到服务器上。对于每个/export/homen 目录都使用一个单独的文件
系统,这样有利于备份和恢复起始目录。例如,/export/home1 和/export/home2。
什么是用户帐户和组?
74 系统管理指南:基本管理• 2006 年7 月
通常,无论用户的起始目录位于何处,用户都能够通过名为/home/username 的挂载点
访问其起始目录。如果起始目录是通过使用AutoFS 挂载的,系统将不允许您在任何系
统上的/home 挂载点下面创建任何目录。当AutoFS 处于活动状态时,系统能够识别
/home 的特殊状态。有关自动挂载起始目录的更多信息,请参见《系统管理指南:网络
服务》中的“Autofs 管理的任务概述”。
要在网络上的任何位置使用起始目录,应当始终用$HOME(而非
/export/home/username)来指起始目录。/export/home/username 与机器有关。另外,
在用户的起始目录中创建的任何符号链接都应使用相对路径(例如,
../../../x/y/x),这样,无论起始目录挂载在哪里,链接都有效。
名称服务
如果要管理大型站点的用户帐户,则可能希望考虑使用名称服务或目录服务,如
LDAP、NIS 或NIS+。使用名称服务或目录服务,可以集中存储用户帐户信息,而不是
将用户帐户信息存储到每个系统的/etc 文件中。在针对用户帐户使用名称服务或目录
服务时,用户可以使用同一个用户帐户从一个系统移到另一个系统,而不必在所有系
统上都复制站点范围的用户帐户信息。使用名称服务或目录服务还有利于保持用户帐
户信息的集中和一致。
用户的工作环境
除具有用于创建和存储文件的起始目录外,用户还需要用于访问完成其工作所需的工
具和资源的环境。当用户登录系统时,用户的工作环境由初始化文件确定。这些文件
由用户的启动shell(如C shell、Korn shell 或Bourne shell)来定义。
一个较好的管理用户工作环境的策略是,在用户的起始目录中提供自定义的用户初始
化文件,如.login、.cshrc 和.profile。
注– 请勿使用系统初始化文件(如/etc/profile 或/etc/.login)来管理用户的工作环
境。这些文件驻留在本地系统上,不能进行集中管理。例如,如果使用AutoFS 从网络
上的任何系统挂载用户的起始目录,则必须修改每个系统上的系统初始化文件,以确
保用户在系统之间切换时获得一致的环境。
有关为用户自定义用户初始化文件的详细信息,请参见第85 页中的“自定义用户的工
作环境”。
自定义用户帐户的另一种方法是使用基于角色的访问控制(role-based access control,
RBAC)。有关更多信息,请参见《系统管理指南:安全性服务》中的“基于角色的访问
控制(概述)”。
什么是用户帐户和组?
第4 章• 管理用户帐户和组(概述) 75
用户名、用户ID 和组ID 的使用指南
在可能跨多个域的组织中,用户名、UID 和GID 应保持唯一。
在创建用户名或角色名、UID 和GID 时,请牢记以下准则:
■ 用户名-它们应当包含两到八个字母和数字。第一个字符应当为字母。至少有一个
字符应当为小写字母。
注– 尽管用户名中可以包含句点(.)、下划线(_) 或连字符(-),但是建议不要使用这
些字符,因为在某些软件产品中它们可能会产生问题。
■ 系统帐户-请勿使用包含在缺省文件/etc/passwd 和/etc/group 中的任何用户名、
UID 或GID。0 到99 的UID 和GID 是为系统保留的,任何人都不应使用它们。此限
制包括当前未在使用的数字。
例如,gdm 是为GNOME DisplayManager 守护进程保留的用户名和组名,其他用户
不应使用它。有关缺省的/etc/passwd 和/etc/group 项的完整列表,请参见表4–6
和表4–9。
请勿将nobody 和nobody4 帐户用于正在运行的进程。这两个帐户是为NFS 保留的。
如果针对正在运行的进程使用这些帐户,可能会产生意外的安全风险。需要以非超
级用户身份运行的进程应当使用daemon 或noaccess 帐户。
■ 系统帐户配置-请勿更改缺省系统帐户的配置。这包括更改当前处于锁定状态的系
统帐户的登录shell。但是,为超级用户帐户设置口令和口令生命期参数除外。
用户帐户信息和组信息的存储位置
根据站点策略的不同,用户帐户信息和组信息可以存储在本地系统的/etc 文件中,也
可以存储在名称服务或目录服务中,如下所示:
■ NIS+ 名称服务的信息存储在表中。
■ NIS 名称服务的信息存储在映射中。
■ LDAP 目录服务的信息存储在带索引的数据库文件中。
注– 为了避免混淆,通常用文件来指有关用户帐户和组的信息所在的位置,而不用数据
库、表或映射。
多数用户帐户信息都存储在passwd 文件中。口令信息按如下方式进行存储:
■ 如果使用的是NIS 或NIS+,则存储在passwd 文件中
■ 如果使用的是/etc 文件,则存储在/etc/shadow 文件中
■ 如果使用的是LDAP,则存储在people 容器中
用户帐户信息和组信息的存储位置
76 系统管理指南:基本管理• 2006 年7 月
在使用NIS+ 或LDAP(而非NIS)时,口令失效功能有效。
对于NIS、NIS+ 和文件,组信息存储在group 文件中。对于LDAP,组信息存储在
group 容器中。
passwd 文件中的字段
passwd 文件中的字段由冒号分隔,其中包含如下信息:
username:password:uid:gid:comment:home-directory:login-shell
例如:
kryten:x:101:100:Kryten Series 4000 Mechanoid:/export/home/kryten:/bin/csh
下表描述了passwd 文件中的各个字段。
表4–5 passwd 文件中的字段
字段名说明
username 包含用户名或登录名。用户名应当保持唯一,且应当由1 到8 个字母
(A-Z, a-z) 和数字(0-9) 组成。第一个字符必须为字母,而且至少有一
个字符必须为小写字母。
password 包含一个x,这是加密口令的占位符。加密口令存储在shadow 文件
中。
uid 包含一个在系统中标识用户的用户标识(user identification, UID) 号。
一般用户的UID 号应当介于100 和60000 之间。所有的UID 号都应当
保持唯一。
gid 包含一个用来标识用户的主组的组标识(group identification, GID) 号。
每个GID 号都必须是一个介于0 和60002 之间的整数。数字60001 和
60002 分别指定给nobody 和noaccess。数字65534 指定给nobody4。
comment 通常包含用户的全名。该字段仅用于提供信息。它有时称作GECOS
字段,因为它最初用来存放登录信息,这些登录信息是从贝尔实验室
中的UNIX 系统向运行GECOS(General Electric Computer Operating
System,通用电子计算机操作系统)的巨型机提交批处理作业所必需
的。
home-directory 包含用户起始目录的路径名。
login-shell 包含用户的缺省登录shell,如/bin/sh、/bin/csh 或/bin/ksh。表
4–20 描述了shell 的基本功能。
用户帐户信息和组信息的存储位置
第4 章• 管理用户帐户和组(概述) 77
缺省的passwd 文件
缺省的Solaris passwd 文件包含标准守护进程的项。守护进程是通常在引导时启动的进
程,用来执行某些系统范围的任务(如打印、网络管理或端口监视)。
root:x:0:1:Super-User:/:/sbin/sh
daemon:x:1:1::/:
bin:x:2:2::/usr/bin:
sys:x:3:3::/:
adm:x:4:4:Admin:/var/adm:
lp:x:71:8:Line Printer Admin:/usr/spool/lp:
uucp:x:5:5:uucp Admin:/usr/lib/uucp:
nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico
smmsp:x:25:25:SendMail Message Submission Program:/:
listen:x:37:4:Network Admin:/usr/net/nls:
gdm:x:50:50:GDM Reserved UID:/:
webservd:x:80:80:WebServer Reserved UID:/:
nobody:x:60001:60001:NFS Anonymous Access User:/:
noaccess:x:60002:60002:No Access User:/:
nobody4:x:65534:65534:SunOS 4.x NFS Anonymous Access User:/:
表4–6 passwd 文件中的缺省项
用户名用户ID 说明
root 0 超级用户帐户
daemon 1 与例行系统任务相关联的综合系统守护进程
bin 2 与正在运行的系统二进制文件相关联的管理守护进
程,用来执行某些例行系统任务
sys 3 与临时目录中的系统日志记录或文件更新相关联的
管理守护进程
adm 4 与系统日志记录相关联的管理守护进程
lp 71 行式打印机守护进程
uucp 5 与uucp 函数相关联的守护进程
nuucp 6 与uucp 函数相关联的另一个守护进程
smmsp 25 Sendmail 邮件提交程序守护进程
webservd 80 为WebServer 访问保留的帐户
gdm 50 GNOME DisplayManager 守护进程
listen 37 网络侦听器守护进程
用户帐户信息和组信息的存储位置
78 系统管理指南:基本管理• 2006 年7 月
表4–6 passwd 文件中的缺省项(续)
用户名用户ID 说明
nobody 60001 为匿名NFS 访问保留的帐户
noaccess 60002 为需要通过某个应用程序来访问系统(而不进行实
际登录)的用户或进程指定的帐户。
nobody4 65534 SunOS 4.0 或4.1 版本的nobody 用户帐户
shadow 文件中的字段
shadow 文件中的字段由冒号分隔,其中包含如下信息:
username:password:lastchg:min:max:warn:inactive:expire
例如:
rimmer:86Kg/MNT/dGu.:8882:0::5:20:8978
下表描述了shadow 文件中的各个字段。
表4–7 shadow 文件中的字段
字段名说明
username 包含用户名(又称作登录名)。
password 可以包含以下项之一:
■ 由13 个字符组成的加密用户口令
■ 字符串*LK*(指示帐户不可访问)
■ 字符串NP(指示帐户无口令)
lastchg 指示从1970 年1 月1 日到上次修改口令的日期之间的天数。
min 包含所需的相邻两次更改口令之间的最小天数。
max 包含在系统提示用户指定新口令之前口令保持有效的最大天数。
warn 指示用户在口令到期之前多少天得到警告。
inactive 包含用户帐户在被锁定之前保持不活动状态的天数。
expire 包含用户帐户到期时的绝对日期。在该日期之后,用户将无法登录系
统。
用户帐户信息和组信息的存储位置
第4 章• 管理用户帐户和组(概述) 79
group 文件中的字段
group 文件中的字段由冒号分隔,其中包含如下信息:
group-name:group-password:gid:user-list
例如:
bin::2:root,bin,daemon
下表描述了group 文件中的各个字段。
表4–8 group 文件中的字段
字段名说明
group-name 包含为该组指定的名称。例如,大学中化学系的成员可以称作chem。组名
最多可以包含八个字符。
group-password 通常包含星号或为空。group-password 字段是早期版本UNIX 的遗留字段。
如果组有口令,那么newgrp 命令会提示用户输入口令。但是,没有可用来
设置口令的实用程序。
gid 包含组的GID 号。GID 号必须在本地系统保持唯一,也应该在整个工作单
位内保持唯一。每个GID 号都必须是介于0 和60002 之间的整数。小于100
的数字是为系统的缺省组帐户保留的。用户定义的组的GID 号可以是100
和60000 之间的整数。数字60001 和60002 是保留的GID 号,它们分别指定
给nobody 和noaccess。
user-list 包含一个由逗号分隔的用户名列表,表示用户的辅助组成员身份。每个用
户最多可以属于15 个辅助组。
缺省的group 文件
缺省的Solaris group 文件包含下列系统组,这些组支持某些系统范围的任务,如打印、
网络管理或电子邮件。其中的许多组在passwd 文件中都有相应的项。
root::0:
other::1:
bin::2:root,daemon
sys::3:root,bin,adm
adm::4:root,daemon
uucp::5:root
mail::6:root
tty::7:root,adm
lp::8:root,adm
nuucp::9:root
staff::10:
用户帐户信息和组信息的存储位置
80 系统管理指南:基本管理• 2006 年7 月
daemon::12:root
smmsp::25:
sysadmin::14:
gdm::50:
webservd::80:
nobody::60001:
noaccess::60002:
nogroup::65534:
表4–9 缺省group 文件中的项
组名组ID 说明
root 0 超级用户组
other 1 可选组
bin 2 与正在运行的系统二进制文件相关联的管理组
sys 3 与系统日志记录或临时目录相关联的管理组
adm 4 与系统日志记录相关联的管理组
uucp 5 与uucp 函数相关联的组
mail 6 电子邮件组
tty 7 与tty 设备相关联的组
lp 8 行式打印机组
nuucp 9 与uucp 函数相关联的组
staff 10 一般的管理组
daemon 12 与例行系统任务相关联的组
sysadmin 14 与传统的Admintool 和Solstice AdminSuite 工具相关
联的管理组
smmsp 25 Sendmail 邮件提交程序的守护进程
webservd 80 为WebServer 访问保留的组
gdm 50 为GNOME DisplayManager 守护进程保留的组
nobody 60001 为匿名NFS 访问保留的组
noaccess 60002 为需要通过某个应用程序访问系统(而不进行实际
登录)的用户或进程指定的组
nogroup 65534 为不是已知组中成员的用户指定的组
用户帐户信息和组信息的存储位置
第4 章• 管理用户帐户和组(概述) 81
用于管理用户帐户和组的工具
下表列出了推荐的用于管理用户和组的工具。这些工具包含在SolarisManagement
Console 的工具套件中。有关启动和使用SolarisManagement Console 的信息,请参见
第2 章。
表4–10用于管理用户和组的工具
Solaris 管理工具用途
用户管理用户帐户
用户模板为特定种类的用户(如学生、工程师或讲师)创
建一组属性
权限管理RBAC 权限
管理角色管理RBAC 管理角色
组管理组信息
项目管理项目信息
邮件列表管理邮件列表
有关执行这些任务的信息,请参见SolarisManagement Console 联机帮助。
有关可用于管理用户帐户和组的Solaris 命令的信息,请参见表1–6。这些命令提供与
Solaris 管理工具相同的功能(包括验证和名称服务支持)。
Solaris 用户和组管理工具的任务
使用Solaris 用户管理工具,可以在本地系统或名称服务环境中管理用户帐户和组。
下表描述了可以通过用户工具的用户帐户功能执行的任务。
表4–11用户帐户工具的任务说明
任务说明
添加用户向本地系统或名称服务中添加用户。
创建用户模板创建预定义用户属性的模板,用来创建属于同一个组的
用户(如学生、承包商或工程师)。
使用用户模板添加用户使用模板添加用户,以便对用户属性进行预定义。
用于管理用户帐户和组的工具
82 系统管理指南:基本管理• 2006 年7 月
表4–11 用户帐户工具的任务说明(续)
任务说明
克隆用户模板如果希望使用一组类似的预定义用户属性,可以克隆用
户模板,然后根据需要仅更改部分属性。
设置用户属性在添加用户之前设置用户属性。属性包括指定在添加用
户时是否使用用户模板,以及在删除用户时是否缺省删
除起始目录或邮箱。
添加多个用户通过以下方法向本地系统或名称服务中添加多个用户:
指定一个文本文件、键入每个用户名或者自动生成一系
列用户名。
查看或更改用户属性显示或更改用户属性(如登录shell、口令或口令选
项)。
为用户指定权限为用户指定将允许他们执行特定管理任务的RBAC 权
限。
删除用户从本地系统或名称服务中删除用户。还可以选择指定是
否删除用户的起始目录或邮箱。同时将用户从所有组或
角色中删除。
有关向本地系统或名称服务中添加用户的信息,请参见第70 页中的“什么是用户帐户
和组?”和第70 页中的“用户帐户的组成部分”。
表4–12权限工具的任务说明
任务说明
授予权限授予用户运行特定命令或应用程序的权限,该命令或
应用程序以前只能由管理员使用。
查看或更改现有的权限属性显示或更改现有的权限。
添加授权添加授权,授权是授予角色或用户的独立权限。
查看或更改授权显示或更改现有的授权。
有关授予用户权限的更多信息,请参见《系统管理指南:安全性服务》中的“权限配置
文件的内容”。
表4–13管理角色工具的任务说明
任务说明
添加管理角色添加由某人用来执行特定管理任务的角色。
为管理角色指定权限为角色指定将允许某人执行任务的特定权限。
用于管理用户帐户和组的工具
第4 章• 管理用户帐户和组(概述) 83
表4–13 管理角色工具的任务说明(续)
任务说明
更改管理角色在角色中添加或删除权限。
有关使用管理角色的更多信息,请参见《系统管理指南:安全性服务》中的“如何规划
RBAC 实现”。
表4–14组工具的任务说明
任务说明
添加组向本地系统或名称服务中添加组,以便组名在添加用户
之前可用。
向组中添加用户如果用户需要访问由某个组拥有的文件,将用户添加到
该组中。
从组中删除用户如果用户不再需要访问组文件,将该用户从该组中删
除。
有关向组中添加用户的信息,请参见第73 页中的“UNIX 组”。
表4–15邮件列表工具的任务说明
任务说明
创建邮件列表创建邮件列表,其中包含用来发送电子邮件的用户名列
表。
更改邮件列表的名称更改所创建的邮件列表。
删除邮件列表删除不再使用的邮件列表。
有关创建邮件列表的信息,请参见SolarisManagement Console 联机帮助。
表4–16项目工具的任务说明
任务说明
创建或克隆项目创建新项目,或者如果新项目所需的属性与现有项目的
属性相似,可以克隆现有的项目。
修改或查看项目属性显示或更改现有项目的属性。
删除项目删除不再使用的项目。
用于管理用户帐户和组的工具
84 系统管理指南:基本管理• 2006 年7 月
用项目管理用户和资源
从Solaris 9 发行版开始,用户和组可以是项目的成员,项目是一个标识符,用来指示可
用作系统使用情况或资源分配费用分摊基础的工作量组件。项目是Solaris 资源管理功
能的一部分,用来管理系统资源。
用户必须是项目的成员才能成功登录运行Solaris 9 发行版的系统。缺省情况下,在安装
了Solaris 9 发行版且未配置其他项目信息时,用户是group.staff 项目的成员。
用户项目信息存储在/etc/project 文件中,该文件可以存储在本地系统(文件)、NIS
名称服务或LDAP 目录服务中。可以使用SolarisManagement Console 来管理项目信
息。
/etc/project 文件必须存在,用户才能成功登录,但是如果您没有使用项目,则无需
对该文件进行任何管理。
有关使用或设置项目的更多信息,请参见《系统管理指南:Solaris Containers-资源管
理和Solaris Zones》中的第2 章“项目和任务(概述)”。
自定义用户的工作环境
在设置用户的起始目录的过程中,需要为用户的登录shell 提供用户初始化文件。用户
初始化文件是一个shell 脚本,用来在用户登录系统之后为其设置工作环境。使用用户
初始化文件基本上可以执行shell 脚本所能完成的全部任务。但是,用户初始化文件的
主要任务是定义用户工作环境的特征,如用户的搜索路径、环境变量和窗口环境。每
个登录shell 都有各自的初始化文件,下表列出了这些文件。
表4–17 Bourne Shell、CShell 和Korn Shell 的用户初始化文件
shell 用户初始化文件用途
Bourne $HOME/.profile 在用户登录时定义用户的环境
C $HOME/.cshrc 为所有的C shell 定义用户环境,在登录shell 之后
调用
$HOME/.login 在用户登录时定义用户的环境
Korn $HOME/.profile 在用户登录时定义用户的环境
$HOME/$ENV 在用户登录文件时定义用户的环境,由Korn shell
的ENV 环境变量指定
Solaris 环境为每个系统上/etc/skel 目录中的每个shell 提供缺省的用户初始化文件,如
下表所示。
自定义用户的工作环境
第4 章• 管理用户帐户和组(概述) 85
表4–18缺省的用户初始化文件
shell 缺省文件
C /etc/skel/local.login
/etc/skel/local.cshrc
Bourne 或Korn /etc/skel/local.profile
可以将这些文件用作起始点,并修改它们,以便创建一组标准文件,从而提供对于所
有用户均相同的工作环境。也可以修改这些文件,以便为不同类型的用户提供工作环
境。尽管不能使用用户工具创建自定义的用户初始化文件,但是可以使用那些位于指
定“框架”目录中的用户初始化文件填充用户的起始目录。这可以通过以下方法来完成:
使用用户模板工具创建用户模板,然后指定要从中复制用户初始化文件的框架目录。
有关如何为不同类型的用户创建系列用户初始化文件的逐步说明,请参见第99 页中的
“如何自定义用户初始化文件”。
在使用用户工具创建新用户帐户并选择“创建起始目录”选项时,将创建下列文件,具体
情况取决于选定的登录shell。
表4–19在添加用户时使用用户工具创建的文件
shell 所创建的文件
C /etc/skel/local.cshrc 和/etc/skel/local.login 文件将被复制到用户
的起始目录中,并分别被重命名为.cshrc 和.login。
Bourne 和Korn /etc/skel/local.profile 文件将被复制到用户的起始目录中,并被重命
名为.profile
如果使用useradd 命令添加新用户帐户,并使用-k 和-m 选项来指定/etc/skel 目录,
所有这三个文件(/etc/skel/local * 文件和/etc/skel/.profile 文件)将复制到用户
的起始目录中。此时,需要将它们重命名为适合用户的登录shell 的名称。
使用站点初始化文件
管理员和用户均可以对用户初始化文件进行自定义。这个重要功能可以通过位于集中
位置且分布在全局的名为站点初始化文件的用户初始化文件来完成。使用站点初始化
文件,可以不断向用户的工作环境中引入新功能,同时允许用户自定义用户初始化文
件。
如果您在用户初始化文件中引用站点初始化文件,那么,当用户登录系统时或者当用
户启动新shell 时,对于站点初始化文件进行的所有更新都将自动反映出来。站点初始
化文件旨在将系统范围的更改分发到您在添加用户时未参与的用户工作环境中。
自定义用户的工作环境
86 系统管理指南:基本管理• 2006 年7 月
可以按照自定义用户初始化文件的方式自定义站点初始化文件。站点初始化文件通常
驻留在一台或一组服务器上,并作为第一条语句出现在用户初始化文件中。而且,每
个站点初始化文件都必须与引用它的用户初始化文件属于相同类型的shell 脚本。
要在C shell 用户初始化文件中引用站点初始化文件,请在用户初始化文件的开头放置
一行类似如下的语句:
source /net/machine-name/export/site-files/site-init-file
要在Bourne shell 或Korn shell 用户初始化文件中引用站点初始化文件,请在用户初始
化文件的开头放置一行类似如下的语句:
. /net/machine-name/export/site-files/site-init-file
避免引用本地系统
不应向用户初始化文件中添加对本地系统的特定引用。无论用户登录哪个系统,您都
会希望用户初始化文件中的指令有效。例如:
■ 为了使用户的起始目录可在网络上的任何位置使用,请始终用变量$HOME 引用起始
目录。例如,使用$HOME/bin,而不使用/export/home/username/bin。如果起始目
录在用户登录另一个系统时自动挂载,$HOME 变量将有效。
■ 要访问本地磁盘上的文件,请使用全局路径名,如
/net/system-name/directory-name。由/net/system-name 引用的任何目录都可以在用
户所登录的系统上自动挂载(假设该系统运行的是AutoFS)。
Shell 功能
下表列出了每个shell 所提供的基本shell 功能,这有助于确定在为每个shell 创建用户初
始化文件时可以执行的操作和不能执行的操作。
表4–20 Bourne Shell、CShell 和Korn Shell 的基本功能
功能Bourne C Korn
是否可以称作UNIX 中的标准shell 是否否
是否与Bourne shell 的语法兼容- 否是
是否提供作业控制是是是
是否提供历史记录列表否是是
是否提供命令行编辑否是是
自定义用户的工作环境
第4 章• 管理用户帐户和组(概述) 87
表4–20 Bourne Shell、C Shell 和Korn Shell 的基本功能(续)
功能Bourne C Korn
是否提供别名否是是
是否提供登录目录的单字符缩写否是是
是否防止覆写(noclobber) 否是是
是否设置为忽略Ctrl-D (ignoreeof) 否是是
是否提供增强的cd 命令否是是
是否将初始化文件与.profile 与分开否是是
是否提供退出文件否是否
Shell 环境
Shell 可维护包含一组变量的环境,这些变量由login 程序、系统初始化文件和用户初
始化文件定义。另外,某些变量是在缺省情况下定义的。Shell 可以有两种类型的变量
:
■ 环境变量-导出到由shell 产生的所有进程的变量。可以使用env 命令查看这些变量
的设置。环境变量的子集(如PATH)影响shell 本身的行为。
■ Shell(局部)变量-只影响当前shell 的变量。在C shell 中,一组shell(局部)变量
与相应的一组环境变量具有特殊关系。这些shell 变量包括user、term、home 和
path。相应环境变量的值最初用来设置shell 变量。
在C shell 中,可使用小写名称和set 命令来设置shell 变量,使用大写名称和setenv 命
令来设置环境变量。如果设置shell 变量,shell 会设置相应的环境变量,反之亦然。例
如,如果使用一个新路径更新path shell 变量,shell 也会用这个新路径更新PATH 环境变
量。
在Bourne shell 和Korn shell 中,可以使用等于某个值的大写变量名称来设置shell 变量
和环境变量。还必须使用export 命令为后续要执行的任何命令激活这些变量。
对于所有的shell,通常按变量的大写名称引用shell 变量和环境变量。
在用户初始化文件中,可以通过更改预定义变量的值和指定其他变量来自定义用户的
shell 环境。下表显示如何在用户初始化文件中设置环境变量。
自定义用户的工作环境
88 系统管理指南:基本管理• 2006 年7 月
表4–21在用户初始化文件中设置环境变量
Shell 类型添加到用户初始化文件中的行
C shell setenv VARIABLE value
示例:
setenv MAIL /var/mail/ripley
Bourne shell 或Korn shell VARIABLE=value ; export VARIABLE
示例:
MAIL=/var/mail/ripley;export MAIL
下表描述了您可能希望在用户初始化文件中自定义的环境变量和shell 变量。有关不同
shell 所使用变量的更多信息,请参见sh(1)、ksh(1) 或csh(1) 手册页。
表4–22 Shell 变量和环境变量的说明
变量说明
C shell 中的CDPATH 或
cdpath
设置由cd 命令使用的变量。如果将cd 命令的目标目录指定为相对路径名,
cd 命令将首先在当前目录(“.”) 中查找目标目录。如果没有找到目标目录,将
继续搜索列在CDPATH 变量中的路径名,直到找到目标目录并完成目录切换。
如果没有找到目标目录,则当前的工作目录保持不变。例如,CDPATH 变量设
置为/home/jean,/home/jean 下面有两个目录:bin 和rje。如果当前的目录
是/home/jean/bin 目录,那么,当您键入cd rje 时,即使您未指定全路径
名,目录也将切换到/home/jean/rje。
history 为C shell 设置历史记录。
C shell 中的HOME 或
home
设置用户起始目录的路径。
LANG 设置语言环境(locale)。
LOGNAME 定义当前登录用户的名称。登录程序会将LOGNAME 的缺省值自动设置为在
passwd 文件中指定的用户名。您不应当重置此变量,而只应当引用此变量。
LPDEST 设置用户的缺省打印机。
MAIL 设置用户邮箱的路径。
MANPATH 设置可用手册页的分层结构。
自定义用户的工作环境
第4 章• 管理用户帐户和组(概述) 89
表4–22 Shell 变量和环境变量的说明(续)
变量说明
C shell 中的PATH 或
path
按顺序指定多个目录,当用户键入命令时,shell 将在这些目录搜索要运行的
程序。如果该目录不在搜索路径中,用户必须键入命令的完整路径名。
在登录过程中,系统会自动定义缺省的PATH,并将其设置为在.profile
(Bourne shell 或Korn shell 中)或.cshrc (C shell) 中指定的路径。
搜索路径的顺序至关重要。如果不同位置中存在相同的命令,将使用首先找
到的具有该名称的命令。例如,假设在Bourne shell 和Korn shell 语法中将
PATH 定义为PATH=/bin:/usr/bin:/usr/sbin:$HOME/bin,/usr/bin 和
/home/jean/bin 中均有名为sample 的文件。如果用户键入sample 命令而未指
定其全路径名,则将使用在/usr/bin 中找到的版本。
prompt 为C shell 定义shell 提示符。
PS1 为Bourne shell 或Korn shell 定义shell 提示符。
C shell 中的SHELL 或
shell
设置由make、vi 和其他工具使用的缺省shell。
TERMINFO 指定已添加到terminfo 文件中的不受支持终端的路径名。可使用
/etc/profile 或/etc/.login 文件中的TERMINFO 变量。
如果设置了TERMINFO 环境变量,系统将首先检查由用户定义的TERMINFO 路
径。如果系统在用户定义的TERMINFO 目录中找不到终端的定义,它将在缺省
目录(/usr/share/lib/terminfo) 中搜索终端的定义。如果系统在这两个目录
中均未找到终端的定义,则将终端标识为“哑终端”。
C shell 中的TERM 或
term
定义终端。此变量应当在/etc/profile 或/etc/.login 文件中重置。当用户
调用编辑器时,系统将查找在该环境变量中定义的同名文件。系统将搜索
TERMINFO 所引用的目录以确定终端的特征。
TZ 设置时区。例如,时区可用于在ls -l 命令中显示日期。如果没有在用户的
环境中设置TZ,将使用系统设置。否则,将使用格林威治标准时间。
PATH 变量
当用户使用全路径执行命令时,shell 将使用该路径来查找此命令。但是,当用户仅指
定命令名称时,shell 将按PATH 变量指定的顺序在目录中搜索该命令。如果在一个目录
中找到了该命令,shell 将执行该命令。
缺省路径由系统设置。但是,多数用户会通过修改该路径来添加其他命令目录。与设
置环境和访问命令或工具的正确版本有关的许多用户问题都是路径定义错误引起的。
路径的设置准则
下面是设置有效PATH 变量的一些准则:
■ 如果无需考虑安全问题,请首先将当前的工作目录(.) 放在路径中。但是,在路径中
包括当前的工作目录会引起您可能希望避免的安全风险,对于超级用户尤其如此。
自定义用户的工作环境
90 系统管理指南:基本管理• 2006 年7 月
■ 搜索路径应尽可能短。Shell 会在该路径中搜索每个目录。如果未找到命令,搜索长
目录会降低系统性能。
■ 搜索路径的读取顺序是从左到右,因此,您应当将常用命令的目录放在路径的开
头。
■ 确保目录在路径中不重复。
■ 尽可能避免搜索大型目录。将大型目录放在路径的末尾处。
■ 将本地目录放在NFS 挂载目录之前,以便减少在NFS 服务器不响应时“挂起”的几
率。此策略还会减少不必要的网络通信流量。
示例-设置用户的缺省路径
下面的几个示例说明如何将用户的缺省路径设置为包括起始目录和其他NFS 挂载目
录。首先在该路径中指定当前的工作目录。在C shell 用户初始化文件中,可以添加如
下内容:
set path=(. /usr/bin $HOME/bin /net/glrr/files1/bin)
在Bourne shell 或Korn shell 用户初始化文件中,可以添加如下内容:
PATH=.:/usr/bin:/$HOME/bin:/net/glrr/files1/bin
export PATH
语言环境变量
LANG 和LC 环境变量可以为shell 指定特定于语言环境的转换和约定。这些转换和约定包
括时区、整理顺序、日期格式、时间格式、货币格式和数字格式。另外,还可以使用
用户初始化文件中的stty 命令来指示终端会话是否支持多字节字符。
LANG 变量为给定的语言环境设置所有可能的转换和约定。LC 变量分别设置本地化的多
个方面:LC_COLLATE、LC_CTYPE、LC_MESSAGES、LC_NUMERIC、LC_MONETARY 和LC_TIME。
下表描述了LANG 和LC 环境变量的某些值。
表4–23 LANG 和LC 变量的值
值语言环境
de_DE.ISO8859-1 德语
en_US.UTF-8 美国英语(UTF-8)
es_ES.ISO8859-1 西班牙语
fr_FR.ISO8859-1 法语
自定义用户的工作环境
第4 章• 管理用户帐户和组(概述) 91
表4–23 LANG 和LC 变量的值(续)
值语言环境
it_IT.ISO8859-1 意大利语
ja_JP.eucJP 日语(EUC)
ko_KR.EUC 韩文(EUC)
sv_SE.ISO8859-1 瑞典语
zh_CN.EUC 简体中文(EUC)
zh_TW.EUC 繁体中文(EUC)
有关支持的语言环境的更多信息,请参见《国际语言环境指南》。
示例4–1 使用LANG 变量设置语言环境
下面的几个示例说明如何使用LANG 环境变量来设置语言环境。在C shell 用户初始化文
件中,可以添加如下内容:
setenv LANG de_DE.ISO8859-1
在Bourne shell 或Korn shell 用户初始化文件中,可以添加如下内容:
LANG=de_DE.ISO8859-1; export LANG
缺省的文件权限(umask)
在创建文件或目录时,指定给文件或目录的缺省文件权限由用户掩码控制。用户掩码
由用户初始化文件中的umask 命令设置。可以通过键入umask 并按回车键来显示用户掩
码的当前值。
用户掩码中包含下列八进制值:
■ 第一位用来为用户设置权限
■ 第二位用来为组设置权限
■ 第三位用来为其他实体设置权限(又称作world)
请注意,如果第一位是零,它将不显示出来。例如,如果用户掩码设置为022,则将显
示22。
如需确定要设置的umask 值,请用666(对于文件)或777(对于目录)减去所需的权
限值。差值就是要用于umask 命令的值。例如,假设您希望将文件的缺省模式设置为
644 (rw-r--r--),666 与644 的差值022 就是将用作umask 命令参数的值。
还可以使用下表来确定要设置的umask 值。下表显示了为umask 的每个八进制值创建的
文件权限和目录权限。
自定义用户的工作环境
92 系统管理指南:基本管理• 2006 年7 月
表4–24 umask 权限的值
umask 八进制值文件权限目录权限
0 rw- rwx
1 rw- rw-
2 r-- r-x
3 r-- r--
4 -w- -wx
5 -w- -w-
6 --x --x
7 ---(无) ---(无)
用户初始化文件中的下行用来将缺省的文件权限设置为rw-rw-rw-。
umask 000
用户初始化文件和站点初始化文件的示例
以下几节提供用户初始化文件和站点初始化文件的示例,您可以从这些文件开始自定
义自己的初始化文件。您需要针对特定的站点更改这些示例中使用的系统名称和路
径。
示例4–2 .profile 文件
(Line 1) PATH=$PATH:$HOME/bin:/usr/local/bin:/usr/ccs/bin:.
(Line 2) MAIL=/var/mail/$LOGNAME
(Line 3) NNTPSERVER=server1
(Line 4) MANPATH=/usr/share/man:/usr/local/man
(Line 5) PRINTER=printer1
(Line 6) umask 022
(Line 7) export PATH MAIL NNTPSERVER MANPATH PRINTER
1. 定义用户的shell 搜索路径
2. 定义用户邮件文件的路径
3. 定义用户的Usenet(世界性的新闻组网络系统)新闻服务器
4. 定义用户的手册页搜索路径
5. 定义用户的缺省打印机
6. 设置用户的缺省文件创建权限
7. 设置所列出的环境变量
自定义用户的工作环境
第4 章• 管理用户帐户和组(概述) 93
示例4–3 .cshrc 文件
(Line 1) set path=($PATH $HOME/bin /usr/local/bin /usr/ccs/bin)
(Line 2) setenv MAIL /var/mail/$LOGNAME
(Line 3) setenv NNTPSERVER server1
(Line 4) setenv PRINTER printer1
(Line 5) alias h history
(Line 6) umask 022
(Line 7) source /net/server2/site-init-files/site.login
1. 定义用户的shell 搜索路径。
2. 设置用户邮件文件的路径。
3. 定义用户的Usenet 新闻服务器。
4. 定义用户的缺省打印机。
5. 为history 命令创建别名。用户只需键入h 即可运行history 命令。
6. 设置用户的缺省文件创建权限。
7. 以站点初始化文件为来源。
示例4–4站点初始化文件
下面的示例显示用户可从中选择特定应用程序版本的站点初始化文件。
# @(#)site.login
main:
echo "Application Environment Selection"
echo ""
echo "1. Application, Version 1"
echo "2. Application, Version 2"
echo ""
echo -n "Type 1 or 2 and press Return to set your
application environment: "
set choice = $<
if ( $choice !~ [1-2] ) then
goto main
endif
switch ($choice)
case "1":
setenv APPHOME /opt/app-v.1
breaksw
case "2":
setenv APPHOME /opt/app-v.2
endsw
自定义用户的工作环境
94 系统管理指南:基本管理• 2006 年7 月
示例4–4 站点初始化文件(续)
站点初始化文件可以在用户的.cshrc 文件(仅限C shell)中引用,该文件中包含下行
:
source /net/server2/site-init-files/site.login
在该行中,站点初始化文件命名为site.login 且位于名为server2 的服务器上。该行
还假设用户的系统运行的是自动挂载程序。