getcmdattr 子例程

用途

查询特权命令数据库中的命令安全性信息。

安全性库 (libc.a)

语法

#include <usersec.h>

int getcmdattr (Command, Attribute, Value, Type)
    char *Command;
    char *Attribute;
    void *Value;
    int Type;

描述

getcmdattr 子例程从命令数据库读取指定的属性。 如果数据库未打开,那么此子例程将执行隐式打开以进行读取。 对于 SEC_CHARSEC_LIST 类型的属性, getcmdattr 子例程将值返回到分配的内存。 调用者需要释放此内存。

参数

描述
命令 指定命令名。 该值应该是系统上命令的完整路径。
属性 指定要读取的属性。 在 usersec.h 文件中定义了以下可能的属性:
S_ACCESSAUTHS
访问权限。 属性类型为 SEC_LIST ,并且是以 null 分隔的授权名称列表。 可以指定 16 个权限。 允许具有其中一个权限的用户运行该命令。 除了系统上可用的用户定义和系统定义的权限外,还允许以下三个特殊值:
允许所有者
允许命令所有者在不检查访问权限的情况下运行命令。
允许组
允许命令组在不检查访问权限的情况下运行命令。
允许全部
允许每个用户在不检查访问权限的情况下运行该命令。
服务 (AUTHPRIVS)
授权特权。 属性类型为 SEC_LIST。 特权授权和授权特权对指示在执行与父进程所拥有的授权相对应的命令期间的进程特权。 授权及其相应特权以等号 (=) 分隔; 个别特权以加号 (+) 分隔; 授权和特权对以逗号 (,) 分隔,如下图所示:
auth=priv+priv+...,auth=priv+priv...,...
授权和特权对的数量限制为十六个。
服务 (AUTHROLES)
角色或角色列表,具有这些角色的用户必须经过认证才能允许执行命令。 属性类型为 SEC_LIST
INNATEPRIVS
先天特权。 这是在运行命令时分配给进程的特权的空分隔列表。 属性类型为 SEC_LIST
S_INHERITPRIVS
可继承的特权。 这是传递给子进程特权的以 null 分隔的特权列表。 属性类型为 SEC_LIST
用户标识
运行命令时要采用的有效用户标识。 属性类型为 SEC_INT
环境标识
运行命令时要采用的有效组标识。 属性类型为 SEC_INT
(RUID)
运行命令时要采用的实际用户标识。 属性类型为 SEC_INT
VALUE 根据 属性类型 参数中指定的值指定指针或指向指针的指针。 请参阅 Type 参数以获取更多详细信息。
TYPE 指定属性的类型。 在 usersec.h 文件中定义了以下有效类型:
SEC_INT
属性的格式为整数。 对于子例程,用户应提供指向已定义整数变量的指针。
SEC_CHAR
属性的格式是以 null 结束的字符串。 对于子例程,用户应提供指向定义的字符指针变量的指针。 调用者需要释放此内存。
SEC_LIST
属性的格式是一系列并置字符串,每个字符串都以 null 结束。 序列中的最后一个字符串由两个连续的空字符终止。 对于子例程,用户应提供指向定义的字符指针变量的指针。 调用者需要释放此内存。

安全性

访问的文件:
文件 方式
/etc/security/privcmds rw

返回值

如果成功, getcmdattr 子例程将返回零。 否则,返回值为-1,并设置errno全局值来指示错误。

错误代码

如果 getcmdattr 子例程失败,那么将设置下列其中一个 errno 值:

描述
EINVAL Command 参数为 NULLdefault
EINVAL Attribute 数组或 Type 参数为 NULL 或不包含其中一个已定义的值。
ENOATTR Attribute 数组为 S_PRIVCMDS,但 Command 参数不是 ALL
ENOENT Command 参数中指定的命令不存在。
ENOATTR Attribute 数组中指定的属性有效,但没有为命令定义任何值。
EPERM 不允许该操作。
EIO 未能访问远程命令数据库。