系统管理指南:基本管理

第 4 章 管理用户帐户和组(概述)

本章提供有关管理用户帐户和组的指南和规划的信息,还介绍有关自定义用户工作环境的信息。

以下列出本章所介绍的信息:

有关管理用户帐户和组的逐步说明,请参见第 5 章

用户和组管理方面的新增功能和已更改功能

本节包含此 Oracle Solaris 发行版中用户和组管理方面的新增功能和已更改功能的有关信息。

在此 Solaris 发行版中,没有任何新增功能或已更改功能。

有关新增功能的完整列表以及 Oracle Solaris 发行版的说明,请参见 《Oracle Solaris 10 9/10 新增功能》

用于管理用户帐户和组帐户的工具

下表描述了可用于管理用户帐户和组的工具。

表 4–1 用于管理用户帐户和组的工具

工具名称 

说明 

更多信息 

Solaris Management Console 

用于管理用户、组、角色、权限、邮件列表、磁盘、终端和调制解调器的图形工具。 

设置用户帐户(任务图)

smusersmrolesmgroup

用于管理用户、组和角色的命令。必须运行 SMC 服务才能使用这些命令。 

smgroupsmuser 命令添加组和用户

useraddgroupaddroleaddusermodgroupmodrolemoduserdelgroupdelroledel

用于管理用户、组和角色的命令。 

groupadduseradd 命令添加组和用户

可以用下列工具添加组:


注 –

此 Solaris 发行版中不再提供 Admintool。


表 4–2 Solaris 用户/组命令的说明

命令 

说明 

参考 

useraddusermoduserdel

添加、修改或删除用户 

useradd(1M)usermod(1M)userdel(1M)

groupaddgroupmodgroupdel

添加、修改或删除组 

groupadd(1M)groupmod(1M)groupdel(1M)

什么是用户帐户和组?

一项基本的系统管理任务就是在站点为每个用户设置一个用户帐户。典型的用户帐户包括在没有系统的超级用户口令的情况下,用户登录和使用系统所必需的信息。有关用户帐户组成部分的信息在用户帐户的组成部分中进行说明。

在设置用户帐户时,可以向预定义的用户组中添加用户。组的典型用法是为文件和目录设置组权限,从而只允许属于该组的用户进行访问。

例如,可能有一个目录中包含只应当由少数几个用户访问的机密文件。可以设置一个名为 topsecret 的组,其中包括参与 topsecret 项目的用户。然后,可以为 topsecret 组设置对 topsecret 文件的读取权限。这样,只有 topsecret 组中的用户才能够读取这些文件。

角色是一种特殊类型的用户帐户,可用于赋予选定的用户特殊权限。有关更多信息,请参见《系统管理指南:安全性服务》中的“基于角色的访问控制(概述)”

用户帐户的组成部分

以下几节介绍用户帐户的特定组成部分。

用户名(登录名)

用户名也称为登录名,使用它用户可以访问其各自的系统和具备适当访问权限的远程系统。必须为所创建的每个用户帐户都选择一个用户名。

建议建立一种标准方法来指定用户名,以便于跟踪它们。而且,用户名应便于用户记忆。在选择用户名时,一个简单的方案就是使用用户名字的首字母和姓氏的前七个字母。例如,Ziggy Ignatz 的用户名为 zignatz。如果使用此方案会产生重名,则可以使用用户第一个名字的首字母、中间名字的首字母和姓氏的前六个字母。例如,Ziggy Top Ignatz 的用户名为 ztignatz

如果使用此方案仍产生重名,请考虑使用下面的方案来创建用户名:


注 –

每个新的用户名都必须不同于系统或者 NIS 或 NIS 域已知的任何邮件别名。否则,邮件可能会传送到使用该别名的用户(而非实际用户)。


有关设置用户名(登录名)的详细指南,请参见用户名、用户 ID 和组 ID 的使用指南

用户 ID 号

每个用户名都有一个与之相关联的用户标识 (user identification, UID) 号。UID 号在任何用户尝试登录的系统中标识用户名。系统可以使用 UID 号来标识文件和目录的属主。如果在许多不同的系统上为同一个人创建用户帐户,请始终使用相同的用户名和用户 ID 号。这样,用户可以在系统之间方便地移动文件,而不会出现拥有权问题。

UID 号必须是一个小于或等于 2147483647 的整数。UID 号是一般用户帐户和特殊系统帐户所必需的。下表列出了为用户帐户和系统帐户保留的 UID 号。

表 4–3 保留的 UID 号

UID 号 

用户帐户或登录帐户 

说明 

0 – 99 

root、daemonbinsys

保留以供 OracleSolaris 使用  

100 – 2147483647 

一般用户 

通用帐户 

60001 和 65534 

nobodynobody4

匿名用户 

60002  

noaccess

不可信用户 

请勿指定 0 到 99 的 UID。保留这些 UID 以供 Oracle Solaris 分配。按照定义,root 总是具有 UID 0,daemon 具有 UID 1,而伪用户 bin 具有 UID 2。此外,您应该为 uucp 登录和伪用户登录(例如,whottyttytype)提供较低的 UID,以便使它们出现在 passwd 文件的开头。

有关设置 UID 的其他指南,请参见用户名、用户 ID 和组 ID 的使用指南

与用户名(登录名)一样,应采用一个方案来指定唯一的 UID 号。某些公司会指定唯一的员工编号。这样,管理员可以在员工编号的基础上添加一个编号,以便为每个员工创建一个唯一的 UID 号。

为了最大限度地降低安全风险,应当避免重新使用已删除帐户的 UID。如果必须重新使用某个 UID,请“彻底清除以前的帐户”,以便新用户不会受到先前用户属性集的影响。例如,先前的用户可能会因包含在打印机拒绝列表中而被拒绝访问打印机。但是,该属性对于新用户可能并不适合。

使用较大的用户 ID 和组 ID

可以为 UID 和组 ID (group ID, GID) 指定带符号整数的最大值,即 2147483647。

但是,大于 60000 的 UID 和 GID 只具有部分功能且与许多 Oracle Solaris 功能不兼容。因此,应避免使用大于 60000 的 UID 或 GID。

下表介绍了与 Oracle Solaris 产品和以前的发行版的互操作性问题。

表 4–4 大于 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+ 名称服务的系统。 

下表说明了 UID 和 GUI 限制。

表 4–5 较大 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,则该列将不对齐。

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 号用来在系统内部标识组。

用户可属于以下两种组:

有关设置组名的详细指南,请参见用户名、用户 ID 和组 ID 的使用指南

有时,用户的辅助组并不重要。例如,文件的拥有权反映主组,而不反映任何辅助组。但是,其他应用程序可能会依赖用户的辅助组成员身份。例如,用户必须是 sysadmin 组(组 14)的成员才能使用以前的 Solaris 发行版中的 Admintool 软件。但是,如果组 14 是用户的当前主组,则辅助组变得无关紧要。

groups 命令可列出用户所属的组。用户一次只能有一个主组。但是,用户可以使用 newgrp 命令,将其主组临时更改为它所属的任何其他组。

添加用户帐户时,必须为用户指定一个主组或接受缺省组 staff(组 10)。该主组应当已经存在。如果主组不存在,请按 GID 号指定主组。用户名不会添加到主组中。如果将用户名添加到主组中,列表可能会变得太长。要想将用户指定给一个新的辅助组,必须先创建一个新的辅助组并为其指定一个 GID 号。

组可以是系统上的本地组,也可以通过名称服务进行管理。为了简化对组的管理,应当使用名称服务(如 NIS)或目录服务(如 LDAP)。使用这些服务可以集中管理组中所有成员身份。

用户口令

可以在添加用户时为用户指定口令。也可以强制用户在首次登录时指定口令。

用户口令必须遵循下面的语法:

尽管用户名是公开的,但口令必须保密且只能由用户知道。应当为每个用户帐户都指定一个口令。口令可以是六到八个字母、数字或特殊字符的组合。

为了使计算机系统更加安全,用户应定期更改其口令。为了实现较高级别的安全,应当要求用户每六周更改一次口令。对于较低级别的安全来说,每三个月更改一次口令就足够了。系统管理登录名(如 rootsys)应每月更改一次,或者应当在知道超级用户口令的员工离开公司或者换岗时进行更改。

许多计算机安全性破坏都涉及到猜测合法用户的口令。应当确保用户避免使用名词、姓名、登录名和其他只需了解该用户的一些情况就有可能猜到的口令。

最好选择如下口令:

请勿选择如下口令:

起始目录

起始目录是文件系统的一部分,分配给用户以便存储专用文件。为起始目录分配的空间量取决于用户所创建的文件的种类、大小和数量。

起始目录可以位于用户的本地系统上,也可以位于远程文件服务器上。在任一情况下,都应当按照惯例创建 /export/home/username 形式的起始目录。对于较大的站点,应当将起始目录存储到服务器上。对于每个 /export/homen 目录都使用一个单独的文件系统,这样有利于备份和恢复起始目录。例如,/export/home1/export/home2

通常,无论用户的起始目录位于何处,用户都能够通过名为 /home/username 的挂载点访问其起始目录。如果起始目录是通过使用 AutoFS 挂载的,系统将不允许您在任何系统上的 /home 挂载点下面创建任何目录。当 AutoFS 处于活动状态时,系统能够识别 /home 的特殊状态。有关自动挂载起始目录的更多信息,请参见《系统管理指南:网络服务》中的“Autofs 管理的任务概述”

要在网络上的任何位置使用起始目录,应当始终用 $HOME(而非 /export/home/username)来引用起始目录。/export/home/username 与机器有关。另外,在用户的起始目录中创建的任何符号链接都应使用相对路径(例如,../../../x/y/x),这样,无论起始目录挂载在哪里,链接都有效。

名称服务

如果要管理大型站点的用户帐户,则可能需要考虑使用名称服务或目录服务,如 LDAP、NIS 或 NIS+。使用名称服务或目录服务,可以集中存储用户帐户信息,而不是将用户帐户信息存储到每个系统的 /etc 文件中。在针对用户帐户使用名称服务或目录服务时,用户可以使用同一个用户帐户从一个系统移到另一个系统,而不必在所有系统上都复制站点范围的用户帐户信息。使用名称服务或目录服务还有利于保持用户帐户信息的集中和一致。

用户的工作环境

除具有用于创建和存储文件的起始目录外,用户还需要一个环境,使之可以访问完成其工作所需的工具和资源。当用户登录系统时,用户的工作环境由初始化文件确定。这些文件由用户的启动 shell 来定义,具体视发行版的不同而异。

一个较好的管理用户工作环境的策略是,在用户的起始目录中提供自定义的用户初始化文件,如 .login.cshrc.profile


注 –

请勿使用系统初始化文件(如 /etc/profile/etc/.login)来管理用户的工作环境。这些文件驻留在本地系统上,不能进行集中管理。例如,如果使用 AutoFS 从网络上的任何系统挂载用户的起始目录,则必须修改每个系统上的系统初始化文件,以确保用户在系统之间切换时获得一致的环境。


有关为用户自定义用户初始化文件的详细信息,请参见自定义用户的工作环境

自定义用户帐户的另一种方法是使用基于角色的访问控制 (role-based access control, RBAC)。有关更多信息,请参见《系统管理指南:安全性服务》中的“基于角色的访问控制(概述)”

用户名、用户 ID 和组 ID 的使用指南

在可能跨多个域的组织中,用户名、UID 和 GID 应保持唯一。

在创建用户名或角色名、UID 和 GID 时,请牢记以下准则:

用户帐户信息和组信息的存储位置

根据站点策略的不同,用户帐户信息和组信息可以存储在本地系统的 /etc 文件中,也可以存储在名称服务或目录服务中,如下所示:


注 –

为了避免混淆,通常用文件来指用户帐户和组信息所在的位置,而不用数据库映射


多数用户帐户信息都存储在 passwd 文件中。口令信息按如下方式进行存储:

使用 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 文件中各个字段的完整说明,请参见 passwd(1) 手册页。

缺省的 passwd 文件

缺省的 passwd 文件包含标准守护进程的项。守护进程是通常在引导时启动的进程,用来执行某些系统范围的任务(如打印、网络管理或端口监视)。


root:x:0:0: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:/:
postgres:x:90:90:PostgreSQL Reserved UID:/:/usr/bin/pfksh
unknown:x:96:96:Unknown Remote UID:/:
svctag:x:95:12:Service Tag 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 

说明 

0

超级用户帐户 

daemon(守护进程)

1

与例行系统任务相关联的综合系统守护进程 

bin

2

与正在运行的系统二进制文件相关联的管理守护进程,用来执行某些例行系统任务 

sys

3

与临时目录中的系统日志记录或文件更新相关联的管理守护进程 

adm

4

与系统日志记录相关联的管理守护进程 

lp

71

行式打印机守护进程 

uucp

5

uucp 函数相关联的守护进程

nuucp

6

uucp 函数相关联的另一个守护进程

smmsp

25

Sendmail 邮件提交程序守护进程 

webservd

80

为 WebServer 访问保留的帐户 

postgres

90

为 PostgresSQL 访问保留的帐户 

unknown

96

为 NFSv4 ACL 中不可映射远程用户保留的帐户 

svctag

95

Service Tag Registry 访问 

gdm

50

GNOME Display Manager 守护进程 

listen

37

网络侦听器守护进程 

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 文件中各个字段的完整说明,请参见 shadow(4)crypt(1) 手册页。

group 文件中的字段

group 文件中的字段以冒号加以分隔且包含以下信息:


group-name:group-password:gid:user-list

例如:


bin::2:root,bin,daemon

有关 group 文件中各个字段的完整说明,请参见 group(4) 手册页。

缺省的 group 文件

缺省的 group 文件包含下列系统组,这些组支持某些系统范围的任务,如打印、网络管理或电子邮件。其中的许多组在 passwd 文件中都有相应的项。


root::0:
other::1:root
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:
daemon::12:root
sysadmin::14:
smmsp::25:
gdm::50:
webservd::80:
postgres::90:
unknown::96:
nobody::60001:
noaccess::60002:
nogroup::65534:
表 4–7 缺省的 group 文件项

组名 

组 ID 

说明 

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 邮件提交程序的守护进程 

gdm

50 

为 GNOME Display Manager 守护进程保留的组 

webservd

80

为 WebServer 访问保留的组 

postgres

90

为 PostgresSQL 访问保留的组 

unknown

96

为 NFSv4 ACL 中不可映射远程组保留的组 

nobody

60001

为匿名 NFS 访问保留的组 

noaccess

60002

为需要通过某个应用程序访问系统(而不进行实际登录)的用户或进程指定的组 

nogroup

65534

为不是已知组中成员的用户指定的组 

用于管理用户帐户和组的工具

下表列出了推荐的用于管理用户和组的工具。这些工具包含在 Solaris Management Console 的工具套件中。有关启动和使用 Solaris Management Console 的信息,请参见第 2 章

表 4–8 用于管理用户和组的工具

Solaris 管理工具 

目的 

用户 

管理用户帐户 

用户模板  

为特定种类的用户(如学生、工程师或讲师)创建一组属性 

权限 

管理 RBAC 权限 

管理角色  

管理 RBAC 管理角色 

组 

管理组信息 

项目 

管理项目信息 

邮件列表 

管理邮件列表 

有关执行这些任务的信息,请参见 Solaris Management Console 联机帮助。

有关可用于管理用户帐户和组的 Solaris 命令的信息,请参见表 1–5。这些命令提供与 Solaris 管理工具相同的功能(包括验证和名称服务支持)。

Solaris 用户和组管理工具的任务

使用 Solaris 用户管理工具,可以在本地系统或名称服务环境中管理用户帐户和组。

下表描述了可以通过用户工具的用户帐户功能执行的任务。

表 4–9 用户帐户工具的任务说明

任务 

说明 

添加用户。 

向本地系统或名称服务中添加用户。 

创建用户模板。 

创建预定义用户属性的模板,用来创建属于同一个组的用户(如学生、承包商或工程师)。 

使用用户模板添加用户。 

使用模板添加用户,以便对用户属性进行预定义。 

克隆用户模板。 

如果希望使用一组类似的预定义用户属性,可以克隆用户模板,然后根据需要仅更改部分属性。 

设置用户属性。 

在添加用户之前设置用户属性。属性包括指定在添加用户时是否使用用户模板,以及在删除用户时是否缺省删除起始目录或邮箱。 

添加多个用户。 

通过以下方法向本地系统或名称服务中添加多个用户:指定一个文本文件、键入每个用户名或者自动生成一系列用户名。 

查看或更改用户属性。 

显示或更改用户属性(如登录 shell、口令或口令选项)。 

为用户指定权限。 

为用户指定将允许他们执行特定管理任务的 RBAC 权限。 

删除用户。 

从本地系统或名称服务中删除用户。还可以选择指定是否删除用户的起始目录或邮箱。同时将用户从所有组或角色中删除。 

有关向本地系统或名称服务中添加用户的信息,请参见什么是用户帐户和组?用户帐户的组成部分

表 4–10 权限工具的任务说明

任务 

说明 

授予权限。 

授予用户运行特定命令或应用程序的权限,该命令或应用程序以前只能由管理员使用。 

查看或更改现有的权限属性。 

显示或更改现有的权限。 

添加授权。 

添加授权,授权是授予角色或用户的独立权限。 

查看或更改授权。 

显示或更改现有的授权。 

有关授予用户权限的更多信息,请参见《系统管理指南:安全性服务》中的“权限配置文件的内容”

表 4–11 管理角色工具的任务说明

任务 

说明 

添加管理角色。 

添加由某人用来执行特定管理任务的角色。 

为管理角色指定权限。 

为角色指定将允许某人执行任务的特定权限。 

更改管理角色。 

在角色中添加或删除权限。 

有关使用管理角色的更多信息,请参见《系统管理指南:安全性服务》中的“如何规划 RBAC 实现”

表 4–12 组工具的任务说明

任务 

说明 

添加组。 

向本地系统或名称服务中添加组,以便组名在添加用户之前可用。 

向组中添加用户。 

如果用户需要访问由某个组拥有的文件,将用户添加到该组中。 

从组中删除用户。 

如果用户不再需要访问组文件,将该用户从该组中删除。 

有关向组中添加用户的信息,请参见UNIX 组

表 4–13 邮件列表工具的任务说明

任务 

说明 

创建邮件列表。 

创建邮件列表,其中包含用来发送电子邮件的用户名列表。 

更改邮件列表的名称。 

更改所创建的邮件列表。 

删除邮件列表。 

删除不再使用的邮件列表。 

有关创建邮件列表的信息,请参见 Solaris Management Console 联机帮助。

表 4–14 项目工具的任务说明

任务 

说明 

创建或克隆项目。 

创建新项目,或者如果新项目所需的属性与现有项目的属性相似,可以克隆现有的项目。 

修改或查看项目属性。 

显示或更改现有项目的属性。 

删除项目。 

删除不再使用的项目。 

用项目管理用户和资源

用户和组可以是项目的成员,该项目是一个标识符,用来指示可用作系统使用情况或资源分配费用分摊基础的工作量组件。项目是 Solaris 资源管理功能的一部分,用来管理系统资源。

用户必须是项目的成员才能成功登录运行 Solaris 9 发行版的系统。缺省情况下,在安装了 Solaris 9 发行版且未配置其他项目信息时,用户是 group.staff 项目的成员。

用户项目信息存储在 /etc/project 文件中,该文件可以存储在本地系统(文件)、NIS 名称服务或 LDAP 目录服务中。可以使用 Solaris Management Console 来管理项目信息。

/etc/project 文件必须存在,用户才能成功登录,但是如果您没有使用项目,则无需对该文件进行任何管理。

有关使用或设置项目的更多信息,请参见 《系统管理指南:Oracle Solaris Containers-资源管理和 Oracle Solaris Zones》中的第 2  章 “项目和任务(概述)”

自定义用户的工作环境

设置用户的起始目录时,需要为用户的登录 shell 提供用户初始化文件。用户初始化文件是一个 shell 脚本,用来在用户登录系统之后为其设置工作环境。使用用户初始化文件基本上可以执行 shell 脚本所能完成的全部任务。但是,用户初始化文件的主要任务是定义用户工作环境的特征,如用户的搜索路径、环境变量和窗口环境。每个登录 shell 都有各自的初始化文件,下表列出了这些文件。

表 4–15 Bourne Shell、C Shell 和 Korn Shell 的用户初始化文件

Shell 

用户初始化文件 

目的 

Bourne 

$HOME/.profile

在用户登录时定义用户的环境 

C

$HOME/.cshrc

为所有的 C shell 定义用户环境,在登录 shell 之后调用 

 

$HOME/.login

在用户登录时定义用户的环境 

 

Korn

$HOME/.profile

在用户登录时定义用户的环境 

 

$HOME/$ENV

在用户登录文件时定义用户的环境,由 Korn shell 的 ENV 环境变量指定

表 4–16 缺省的用户初始化文件

Shell 

缺省文件 

C

/etc/skel/local.login

 

/etc/skel/local.cshrc

Bourne 或 Korn

/etc/skel/local.profile

您可以使用这些文件作为起点,之后修改这些文件,以创建可为所有用户提供通用工作环境的标准文件集。也可以修改这些文件,以便为不同类型的用户提供工作环境。尽管不能使用“用户工具”创建自定义的用户初始化文件,但是可以使用那些位于指定“框架”目录中的用户初始化文件填充用户的起始目录。这可以通过以下方法来完成此任务:使用“用户模板”工具创建用户模板,然后指定要从中复制用户初始化文件的框架目录。

有关如何为不同类型的用户创建用户初始化文件集的逐步说明,请参见如何自定义用户初始化文件

在使用用户工具创建新用户帐户并选择“创建起始目录”选项时,将创建下列文件,具体情况取决于选定的登录 shell。

表 4–17 在添加用户时使用用户工具创建的文件

Shell 

所创建的文件 

C  

/etc/skel/local.cshrc/etc/skel/local.login 文件将被复制到用户的起始目录中,并分别被重命名为 .cshrc.login

Bourne 和 Korn 

/etc/skel/local.profile 文件将被复制到用户的起始目录中,并被重命名为 .profile

自定义 Bash Shell

要自定义 Bash Shell,请将信息添加到位于起始目录的 .bashrc 文件中。安装 Oracle Solaris 时创建的初始用户具有一个 .bashrc 文件,可设置 PATHMANPATH 和命令提示符。有关更多信息,请参见 bash (1) 手册页。

使用站点初始化文件

用户初始化文件可以由管理员和用户进行自定义。此重要任务可以通过位于集中位置且分布在全局的名为站点初始化文件的用户初始化文件来完成。使用站点初始化文件,可以不断向用户的工作环境中引入新功能,同时允许用户自定义用户初始化文件。

如果您在用户初始化文件中引用站点初始化文件,那么,当用户登录系统时或者当用户启动新 shell 时,对于站点初始化文件进行的所有更新都将自动反映出来。站点初始化文件旨在将系统范围的更改分发到您在添加用户时未参与的用户工作环境中。

可以按照自定义用户初始化文件的方式自定义站点初始化文件。站点初始化文件通常驻留在一台或一组服务器上,并作为第一条语句出现在用户初始化文件中。而且,每个站点初始化文件都必须与引用它的用户初始化文件属于相同类型的 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

避免引用本地系统

请勿在用户初始化文件中添加对本地系统的具体引用。无论用户登录哪个系统,用户初始化文件中的指令均应为有效指令。

例如:

Shell 功能

下表列出了每个 shell 提供的基本 shell 功能,这有助于确定在为每个 shell 创建用户初始化文件时可以执行的操作和不能执行的操作。

表 4–18 Bourne Shell、C Shell 和 Korn Shell 的基本功能

功能 

Bourne 

Korn 

是否可以称作 UNIX 中的标准 shell 

适用 

不适用 

不适用 

是否与 Bourne shell 的语法兼容 

不适用 

适用 

是否提供作业控制 

适用 

适用 

适用 

是否提供历史记录列表 

不适用 

适用 

适用 

是否提供命令行编辑 

不适用 

适用 

适用 

是否提供别名 

不适用 

适用 

适用 

是否提供登录目录的单字符缩写 

不适用 

适用 

适用 

是否防止覆写 (noclobber)

不适用 

适用 

适用 

是否设置为忽略 Ctrl-D (ignoreeof)

不适用 

适用 

适用 

是否提供增强的 cd 命令

不适用 

适用 

适用 

是否将初始化文件与 .profile 与分开

不适用 

适用 

适用 

是否提供退出文件 

不适用 

适用 

N/A

Shell 环境

shell 可维护包含一组变量的环境,这些变量由 login 程序、系统初始化文件和用户初始化文件定义。另外,某些变量是在缺省情况下定义的。

Shell 可以有两种类型的变量:

在 C shell 中,使用小写名称和 set 命令来设置 shell 变量。使用大写名称和 setenv 命令来设置环境变量。如果设置 shell 变量,shell 会设置相应的环境变量。同样,如果设置环境变量,相应的 shell 变量也会更新。例如,如果使用一个新路径更新 path shell 变量,shell 也会用这个新路径更新 PATH 环境变量。

在 Bourne shellKorn shell 中,可以使用等于某个值的大写变量名称来设置 shell 变量和环境变量。同时也可使用 export 命令为后续要执行的任何命令激活这些变量。

对于所有的 shell,通常按变量的大写名称引用 shell 变量和环境变量。

在用户初始化文件中,可以通过更改预定义变量的值或指定其他变量来自定义用户的 shell 环境。下表显示如何在用户初始化文件中设置环境变量。

表 4–19 在用户初始化文件中设置环境变量

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–20 Shell 变量和环境变量的说明

变量 

说明 

C shell 中的 CDPATHcdpath

设置由 cd 命令使用的变量。如果将 cd 命令的目标目录指定为相对路径名,cd 命令将首先在当前目录 (.) 中查找目标目录。如果没有找到目标目录,将继续搜索列在 CDPATH 变量中的路径名,直到找到目标目录并完成目录切换。如果没有找到目标目录,则当前的工作目录保持不变。例如,CDPATH 变量设置为 /home/jean/home/jean 下面有两个目录:binrje。如果当前的目录是 /home/jean/bin 目录,那么,当您键入 cd rje 时,即使您未指定全路径名,目录也将切换到 /home/jean/rje

history

为 C shell 设置历史记录。 

C shell 中的 HOMEhome

设置用户起始目录的路径。 

LANG

设置语言环境 (locale)。 

LOGNAME

定义当前登录用户的名称。登录程序会将 LOGNAME 的缺省值自动设置为在 passwd 文件中指定的用户名。您不应当重置此变量,而只应当引用此变量。

LPDEST

设置用户的缺省打印机。 

MAIL

设置用户邮箱的路径。 

MANPATH

设置可用手册页的分层结构。 

C shell 中的 PATHpath

按顺序指定多个目录,当用户键入命令时,shell 将在这些目录搜索要运行的程序。如果该目录不在搜索路径中,用户必须键入命令的完整路径名。  

在登录过程中,系统会自动定义缺省的 PATH,并将其设置为在 .profile(Bourne 或 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 中的 SHELLshell

设置由 makevi 和其他工具使用的缺省 shell。

TERMINFO

指定存储备用 terminfo 数据库的目录。可使用 /etc/profile/etc/.login 文件中的 TERMINFO 变量。有关更多信息,请参见 terminfo(4) 手册页。

如果设置了 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 变量的一些准则:

设置用户的缺省路径

此示例说明如何设置用户的缺省路径。

以下示例说明如何设置用户的缺省路径,以包括起始目录和其他 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

语言环境变量

LANGLC 环境变量可以为 shell 指定特定于语言环境的转换和约定。这些转换和约定包括时区、整理顺序、日期格式、时间格式、货币格式和数字格式。另外,还可以使用用户初始化文件中的 stty 命令来指示终端会话是否支持多字节字符。

LANG 变量为给定的语言环境设置所有可能的转换和约定。可以通过以下 LC 变量来分别设置本地化的多个方面: LC_COLLATELC_CTYPELC_MESSAGESLC_NUMERICLC_MONETARYLC_TIME

下表描述了 LANGLC 环境变量的某些值。

表 4–21 LANGLC 变量的值

值 

语言环境 

de_DE.ISO8859-1

德语

en_US.UTF-8

美国英语 (UTF-8)

es_ES.ISO8859-1

西班牙语

fr_FR.ISO8859-1

法语

it_IT.ISO8859-1

意大利语

ja_JP.eucJP

日语 (EUC)

ko_KR.EUC

韩文 (EUC)

sv_SE.ISO8859-1

瑞典语

zh_CN.EUC

简体中文 (EUC)

zh_TW.EUC

繁体中文 (EUC)

有关支持的语言环境的更多信息,请参见《International Language Environments Guide》。


示例 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 并按回车键来显示用户掩码的当前值。

用户掩码中包含下列八进制值:

请注意,如果第一位是零,它将不显示出来。例如,如果用户掩码设置为 022,则将显示 22。

如需确定要设置的 umask 值,请用 666(对于文件)或 777(对于目录)减去所需的权限值。差值就是要用于 umask 命令的值。例如,假设您希望将文件的缺省模式设置为 644 (rw-r--r--),666 与 644 的差值 022 就是将用作 umask 命令参数的值。

还可以使用下表来确定要设置的 umask 值。下表显示了为 umask 的每个八进制值创建的文件权限和目录权限。

表 4–22 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–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

站点初始化文件可以在用户的 .cshrc 文件(仅限 C shell)中引用,该文件中包含下行:


source /net/server2/site-init-files/site.login

在该行中,站点初始化文件命名为 site.login 且位于名为 server2 的服务器上。该行还假设用户的系统运行的是自动挂载程序。