下表列出了使用权限的接口。表后面提供了一些主要权限接口的说明。
表 2–1 使用权限的接口
目的 |
函数 |
其他注释 |
---|---|---|
获取和设置权限集 |
setppriv() 和 getppriv() 是系统调用。priv_ineffect() 和 priv_set() 是为方便而使用的包装函数。 |
|
识别和转换权限 |
priv_str_to_set(3C)、priv_set_to_str(3C)、priv_getbyname(3C)、priv_getbynum(3C)、priv_getsetbyname(3C)、priv_getsetbynum(3C) |
这些函数将指定的权限或权限集映射到名称或编号。 |
处理权限集 |
priv_allocset(3C)、priv_freeset(3C)、priv_emptyset(3C)、priv_fillset(3C)、priv_isemptyset(3C)、priv_isfullset(3C)、priv_isequalset(3C)、priv_issubset(3C)、priv_intersect(3C)、priv_union(3C)、priv_inverse(3C)、priv_addset(3C)、priv_copyset(3C)、priv_delset(3C)、priv_ismember(3C) |
这些函数与权限内存分配、测试和各种设置操作有关。 |
获取和设置进程标志 |
PRIV_AWARE 进程标志指示进程是否了解权限或是否在超级用户模型下运行。PRIV_DEBUG 用于权限调试。 |
|
低级凭证处理 |
这些例程用于调试、底层系统调用和内核调用。 |
用于设置权限的主要函数为 setppriv(),该函数具有以下语法:
int setppriv(priv_op_t op, priv_ptype_t which, \ const priv_set_t *set);
op 表示要执行的权限操作。op 参数具有以下三个可能值之一:
PRIV_ON-将 set 变量指定的权限添加到 which 指定的权限集类型中
PRIV_OFF-从 which 指定的权限集类型中删除 set 变量指定的权限
PRIV_SET-使用 set 变量指定的权限替换 which 指定的权限集类型中的权限
which 用于指定要更改的权限集类型:
PRIV_PERMITTED
PRIV_EFFECTIVE
PRIV_INHERITABLE
PRIV_LIMIT
set 指定要在更改操作中使用的权限。
此外,还提供了便利函数:priv_set()。
这些函数便于使用其数值映射权限名称。priv_str_to_set() 是此系列中的典型函数。priv_str_to_set() 具有以下语法:
priv_set_t *priv_str_to_set(const char *buf, const char *set, \ const char **endptr);
priv_str_to_set() 采用 buf 中指定的权限名字符串。priv_str_to_set() 返回可以与四个权限集之一组合的一组权限值。**endptr 可用于调试解析错误。请注意,可以在 buf 中包括以下关键字:
“all” 指示所有已定义的权限。使用 “all,!priv_name,...” 可以指定除指示权限以外的所有权限。
使用 “priv_set, !priv_name,...” 的构造将从指定的权限集中删除指定的权限。如果事先没有指定集,请不要使用 “!priv_name,...”,因为如果没有从中删除权限的权限集,该构造将从空的权限集中删除指定的权限,并有效指示无权限。
“none” 指示无权限。
“basic” 表示执行登录标准 UNIX 操作系统的所有用户一般都可以执行的操作所需的权限集。