putcmdattrs 子例程

用途

修改特权命令数据库中的多个命令属性。

安全库libc.a)

语法

#include <usersec.h>

int putcmdattrs(Command, Attributes, Count)
    char *Command;
    dbattr_t *Attributes;
    int Count;

描述

putcmdattrs子程序修改特权命令数据库中的一个或多个属性。 如果数据库未打开,那么此子例程将执行隐式打开以进行读取和写入。 命令参数指定的命令必须包含命令的完整路径,并存在于特权命令数据库中。

putcmdattrs子程序仅用于修改数据库中现有命令的属性。 要创建或删除命令条目,请使用putcmdattr子程序。 通过putcmdattrs子程序更改的数据必须通过调用putcmdattr子程序显式提交,并在类型参数中指定 SEC_COMMIT。 在所有数据提交之前,只有进程中的getcmdattrgetcmdattrs子程序会返回修改后的数据。 在使用setkst命令将整个数据库发送到内核安全表或重启系统之前,对特权命令数据库所做的更改不会影响安全考虑。

属性参数包含要更新的每个属性的信息。 在成功调用putcmdattrs子程序时,必须检查属性参数中指定的每个值,以确定属性参数是否已成功写入。 dbattr_t 数据结构包含以下字段:

名称 描述 类型
S_ACCESSAUTHS 访问权限,以空分隔的权限名称列表。 可以指定 16 个权限。 具有任何一个权限的用户都可以运行该命令。 除了系统上可用的用户定义和系统定义的权限外,还可以指定以下三个特殊值:
ALLOW_OWNER
允许命令所有者在不检查访问权限的情况下运行命令。
ALLOW_GROUP
允许命令组在不检查访问权限的情况下运行命令。
ALLOW_ALL
允许每个用户在不检查访问权限的情况下运行该命令。
SEC_LIST
S_AUTHPRIVS 授权特权。 特权授权和授权特权对指示在执行与父进程所拥有的授权相对应的命令期间的进程特权。 授权及其相应权限之间用等号(=)分隔;单个权限之间用加号(+)分隔。该属性属于SEC_LIST类型,值是一个空分隔列表,因此授权和权限对之间用一个空字符 (\0) 分隔,如下图所示:
 auth=priv+priv+...\0auth=priv+priv+...\0...\0\0
授权和特权对的数量限制为十六个。
SEC_LIST
S_AUTHROLES 角色或角色列表,拥有这些角色的用户必须通过身份验证才能执行命令。 SEC_LIST
S_INNATEPRIVS 先天特权。 这是在运行命令时分配给进程的特权的空分隔列表。 SEC_LIST
S_INHERITPRIVS 可继承的特权。 这是分配给子进程的特权的空分隔列表。 SEC_LIST
S_EUID 运行命令时要采用的有效用户标识。 SEC_INT
S_EGID 运行命令时要采用的有效用户标识。 SEC_INT
S_RUID 运行命令时要采用的实际用户标识。 SEC_INT
注:上述所有字段都与 attr_name属性相对应。
描述
attr_idx 该属性由putcmdattrs子程序内部使用。
attr_type 要更新的属性的类型。
attr _flag 请求更新目标属性的结果。 成功完成时,将返回值 0。 否则,返回值为非零。
  包含用于更新所请求属性的值的并集。
attr_domain putcmdattrs子程序将忽略该字段。
The following union members that correspond to the definitions of the attr_char, attr_int, attr_long and attr_llong macros in the usersec.h file respectively.
描述
au_char 指向要写入SEC_CHARSEC_LIST类型属性值的字符指针。
au_int 要写入SEC_INT类型属性的整数值。
au_long 要写入SEC_LONG类型属性的长值。
au_llong 要写入SEC_LLONG类型属性的长数值。

参数

描述
命令 指定要更新其属性的命令名。
属性 指向由 0 个或多个dbattr_t类型元素组成的数组的指针。 命令属性列表在usersec.h头文件中定义。
COUNT 属性参数中数组元素的个数。

安全性

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

返回值

如果命令参数指定的命令存在于特权命令数据库中,则putcmdattrs子例程返回 0,即使属性参数中的任何属性都未成功更新。 成功后,必须检查Attributes参数中每个元素的attr_flag属性,以确定是否已成功更新。 如果失败,则返回值为-1,并设置errno值来指示错误。

错误代码

如果putcmdattrs子例程返回-1,则可以设置下列errno值之一:
描述
EINVAL 命令参数为NULL默认值ALL
EINVAL Count 参数小于零。
EINVAL 属性参数为空计数 参数大于零。
EINVAL Attributes 参数未指向所请求属性的有效数据。
ENOENT 命令参数中指定的命令不存在。
EPERM 不允许该操作。
如果putcmdattrs子程序更新属性失败,相应属性元素的attr_flag字段将返回以下错误之一:
描述
EACCES 调用者对特权命令数据库没有写访问权。
EINVAL 属性"条目中的attr_name字段不是公认的命令属性。
EINVAL 属性 条目中的attr_type字段包含无效类型。
EINVAL 属性 "条目中的attr_un字段未指向有效缓冲区或此类属性的有效数据。