面向开发者的 Oracle® Solaris 11 安全性指南

退出打印视图

更新时间: 2014 年 7 月
 
 

特权接口

下表列出了使用特权的接口。表后面提供了一些主要特权接口的说明。

表 2-1  使用特权的接口
用途
函数
其他注释
获取和设置特权集合
setppriv()getppriv() 是系统调用。priv_ineffect()priv_set() 是为方便而使用的包装函数。
识别和转换特权
这些函数将指定的特权或特权集合映射到名称或编号。
处理特权集合
这些函数与特权内存分配、测试和各种设置操作有关。
获取和设置进程标志
PRIV_AWARE 进程标志指示进程是否了解特权或是否在超级用户模型下运行。PRIV_DEBUG 用于特权调试。
低级凭证处理
这些例程用于调试、底层系统调用和内核调用。

setppriv():用于设置特权

用于设置特权的主要函数为 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_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 操作系统的所有用户一般都可以执行的操作所需的特权集合。