项目标识符
项目标识符是指用于标识相关工作的管理标识符。可以将项目标识符视为等同于用户标识符和组标识符的工作负荷标记。一个用户或组可以属于一个或多个项目。这些项目可用于表示允许用户(或用户组)参与的工作负荷。此成员关系然后可以作为费用分摊(例如基于使用情况或初始资源分配等)的基础。尽管必须为用户指定一个缺省项目,但是用户启动的进程可以与用户参与的任何项目关联。
确定用户的缺省项目
要登录到系统,必须为用户指定一个缺省项目。即使用户不在缺省项目中指定的用户或组列表中,此用户仍会自动成为该项目的成员。
由于系统上的每个进程都具有项目成员资格,因此,必须使用一种算法为登录或其他初始进程指定缺省项目。此算法在 getprojent(3C) 手册页中进行了介绍。系统按照顺序步骤确定缺省项目。如果找不到缺省项目,则会拒绝用户的登录或启动进程的请求。
系统按顺序执行以下步骤,以确定用户的缺省项目:
如果用户具有在 /etc/user_attr 扩展用户属性数据库中定义了 project 属性的某个条目,则 project 属性的值即为缺省项目。请参见 user_attr(4) 手册页。
如果 project 数据库中存在名为 user.user-id 的项目,则该项目即为缺省项目。有关更多信息,请参见 project(4) 手册页。
如果 project 数据库中存在名为 group.group-name 的项目,其中 group-name 是在 passwd 文件中指定的用户缺省组的名称,则该项目即为缺省项目。有关 passwd 文件的信息,请参见 passwd(4) 手册页。
如果 project 数据库中存在特殊的项目 default,则此项目即为缺省项目。
此逻辑由 getdefaultproj() 库函数提供。有关更多信息,请参见 getprojent(3PROJECT) 手册页。
使用 useradd、usermod 和 passmgmt 命令设置用户属性
您可以使用以下带有 -K 选项和 key=value 对的命令在本地文件中设置用户属性:passmgmt
修改用户信息
useradd
设置用户的缺省项目
usermod
修改用户信息
本地文件可包括以下内容:
/etc/group
/etc/passwd
/etc/project
/etc/shadow
/etc/user_attr
如果正在使用某一网络命名服务(如 NIS)为本地文件补充其他条目,则这些命令不能更改该网络命名服务提供的信息。但是,这些命令确实可以根据外部命名服务数据库验证以下内容:
用户名(或角色)的唯一性
用户 ID 的唯一性
是否存在任何指定的组名
project 数据库
您可以将项目数据存储在本地文件、网络信息服务 (Network Information Service, NIS) 项目映射或轻量目录访问协议 (Lightweight Directory Access Protocol, LDAP) 目录服务中。/etc/project
文件或命名服务在登录时使用,由可插拔验证模块 (pluggable authentication module, PAM) 发出的所有帐户管理请求使用它将用户绑定到缺省项目。
注 -对项目数据库中条目的更新,无论是对 /etc/project 文件还是对网络命名服务中数据库表示形式的更新,都不会应用于当前活动的项目。使用 login 或 newtask 命令时,会将更新应用于加入项目的新任务。有关更多信息,请参见 login(1) 和 newtask(1) 手册页。
PAM 子系统
更改或设置身份的操作包括登录到系统、调用 rcp 或 rsh 命令,以及使用 ftp 或使用 su。当操作涉及更改或设置身份时,会使用一组可配置的模块来提供验证、帐户管理、证书管理和会话管理。
命名服务配置
资源管理支持命名服务 project 数据库。/etc/nsswitch.conf 文件中定义了 project 数据库的存储位置。缺省情况下,会先列出 files,但是源可以按任意顺序列出。project: files [nis] [ldap]
如果列出了多个项目信息源,则 nsswitch.conf 文件会指示例程开始在列出的第一个源中搜索信息,然后搜索后续源。
本地 /etc/project 文件格式
如果在 nsswitch.conf 文件中选择 files 作为 project 数据库源,则登录过程会在 /etc/project 文件中搜索项目信息。有关更多信息,请参见 projects(1) 和 project(4)
手册页。
对于系统识别的每个项目,project 文件均包含以下形式的单行条目:projname:projid:comment:user-list:group-list:attributes
字段定义如下:projname
项目的名称。该名称必须是由字母数字字符、下划线 (_) 字符、连字符 (-) 和句点 (.) 组成的字符串。句点是为对操作系统有特殊意义的项目保留的,只能将其用在用户的缺省项目名称中。projname 不能包含冒号 (: ) 或换行符。
projid
系统内项目的唯一数字 ID (PROJID)。projid 字段的最大值为 UID_MAX (2147483647)。
comment
项目的说明。
user-list
允许参与项目的用户的列表(以逗号分隔)。
此字段中可以使用通配符。星号 (*) 允许所有用户参与项目。感叹号后跟星号 (!*) 可将所有用户排除在项目之外。感叹号 (!)后跟用户名可将指定用户排除在项目之外。
group-list
允许参与项目的用户组的列表(以逗号分隔)。
此字段中可以使用通配符。星号 (*) 允许所有组参与项目。感叹号后跟星号 (!*) 可将所有组排除在项目之外。感叹号 (!)后跟组名可将指定组排除在项目之外。
attributes
以分号分隔的名称-值对列表,如资源控制(请参见第 6 章)。name 是指定与对象相关的属性的任意字符串,value 是该属性的可选的值。name[=value]
在名称-值对中,名称仅可包含字母、数字、下划线和句点。句点通常用作资源控制 (rctl) 的类别和子类别之间的分隔符。属性名称的第一个字符必须是字母。名称区分大小写。
可以在值中使用逗号和括号结构以便确立优先级。
分号用于分隔名称-值对。不能在值定义中使用分号。冒号用于分隔项目字段。不能在值定义中使用冒号。
注 -如果读取此文件的例程遇到格式错误的条目,则这些例程会停止。不会指定错误条目后指定的任何项目。
以下示例显示了缺省的 /etc/project 文件:system:0:System:::
user.root:1:Super-User:::
noproject:2:No Project:::
default:3::::
group.staff:10::::
以下示例显示了在结尾添加了项目条目的缺省的 /etc/project 文件:system:0:System:::
user.root:1:Super-User:::
noproject:2:No Project:::
default:3::::
group.staff:10::::
user.ml:2424:Lyle Personal:::
booksite:4113:Book Auction Project:ml,mp,jtd,kjh::
您还可以将资源控制和属性添加到 /etc/project 文件:
要为项目添加资源控制,请参见设置资源控制。
要使用 rcapd(1M) 中所述的资源上限设置守护进程为项目定义物理内存资源上限,请参见限制项目物理内存使用情况的属性。
要将 project.pool 属性添加到项目条目,请参见创建配置。
NIS 的项目配置
如果正在使用 NIS,则可以在 /etc/nsswitch.conf 文件中进行指定,以便在 NIS 项目映射中搜索项目:project: nis files
NIS 映射(project.byname 或 project.bynumber)与 /etc/project 文件具有相同的形式:projname:projid:comment:user-list:group-list:attributes
LDAP 的项目配置
如果正在使用 LDAP,则可以在 /etc/nsswitch.conf 文件中进行指定,以便在 LDAP project 数据库中搜索项目:project: ldap files