putcmdattr 子例程

用途

修改特权命令数据库中的命令安全性信息。

安全性库 (libc.a)

语法

#include <usersec.h>

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

描述

putcmdattr 子例程将指定的属性写入命令数据库。 如果数据库未打开,那么此子例程将执行隐式打开以进行读取和写入。 必须通过使用指定 SEC_COMMITType 参数调用 putcmdattr 子例程来显式落实由 putcmdattr 子例程更改的数据。 在落实所有数据之前,只有进程中的子例程会返回已写入的数据。

必须首先通过调用具有 SEC_NEW 类型的 putcmdattr 子例程来创建命令数据库中的新条目。

在使用 setkst 命令将整个数据库发送到内核安全性表之前,或者在重新引导系统之前,对特权命令数据库进行的更改不会影响安全性注意事项。

参数

描述
命令 命令名。 该值应该是系统上命令的完整路径。 除非 Type 参数为 SEC_COMMIT,否则必须指定此参数。
属性 指定要写入的属性。 在 usersec.h 文件中定义了以下可能的属性:
S_ACCESSAUTHS
访问权限。 属性类型为 SEC_LIST ,并且是以 null 分隔的授权名称列表。 可以指定 16 个权限。 具有任何一个权限的用户都可以运行该命令。 除了系统上可用的用户定义和系统定义的权限外,还可以指定以下三个特殊值:
ALLOW_OWNER
允许命令所有者在不检查访问权限的情况下运行命令。
ALLOW_GROUP
允许命令组在不检查访问权限的情况下运行命令。
ALLOW_ALL
允许每个用户在不检查访问权限的情况下运行该命令。
服务 (AUTHPRIVS)
授权特权。 属性类型为 SEC_LIST。 特权授权和授权特权对指示在执行与父进程所拥有的授权相对应的命令期间的进程特权。 授权及其相应特权以等号 (=) 分隔; 个别特权以加号 (+) 分隔; 授权和特权对以逗号 (,) 分隔,如下图所示:
auth=priv+priv+...,auth=priv+priv...,...
授权/特权对的数量限制为十六个。
服务 (AUTHROLES)
角色或角色列表,具有这些角色的用户必须经过认证才能允许执行命令。 属性类型为 SEC_LIST
INNATEPRIVS
先天特权。 这是在运行命令时分配给进程的特权的空分隔列表。 属性类型为 SEC_LIST
S_INHERITPRIVS
可继承的特权。 这是传递给子进程特权的以空分隔的特权列表。 属性类型为 SEC_LIST
用户标识
运行命令时要采用的有效用户标识。 属性类型为 SEC_INT
环境标识
运行命令时要采用的有效组标识。 属性类型为 SEC_INT
(RUID)
运行命令时要采用的实际用户标识。 属性类型为 SEC_INT
VALUE 根据 AttributeType 参数的值指定缓冲区,指向缓冲区的指针或指向指针的指针。 请参阅 Type 参数以获取更多详细信息。
TYPE 指定属性的类型。 在 usersec.h 文件中定义了以下有效类型:
SEC_INT
属性的格式为整数。
SEC_CHAR
属性的格式是以 null 结束的字符串。 用户应提供字符指针。
SEC_LIST
属性的格式是一系列并置字符串,每个字符串都以 null 结束。 序列中的最后一个字符串由两个连续的空字符终止。 对于 putcmdattr 子例程,用户应该提供一个字符指针。
SEC_COMMIT
对于 putcmdattr 子例程,它本身指定的值指示要将对指定命令的更改落实到永久存储器。 将忽略 属性 参数。 如果未指定命令,那么会将对所有已修改命令的更改落实到永久存储器。
SEC_DELETE
如果指定了 Attribute 参数,那么将从特权命令数据库中删除相应的属性。 如果未指定 Attribute 参数,那么将从特权命令数据库中删除整个命令定义。
SEC_NEW
当使用 putcmdattr 子例程指定特权命令数据库时,在该数据库中创建新命令。

安全性

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

返回值

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

错误代码

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

描述
EINVAL Command 参数为 NULLType 参数不是 SEC_COMMIT
EINVAL Command 参数为 defaultALL
EINVAL Attribute 参数不包含其中一个已定义的属性,或者为 NULL
EINVAL Type 参数不包含其中一个定义的值。
EINVAL Value 参数不指向有效缓冲区或此类型属性的有效数据。
ENOENT Command 参数指定的命令不存在。
EPERM 不允许该操作。