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

退出打印视图

更新时间: 2014 年 7 月
 
 

关于授权

    授权存储在 /etc/security/auth_attr 文件中。要创建使用授权的应用程序,请执行以下步骤:

  1. 使用 getent 命令扫描 auth_attr 数据库中的条目,如下所示:

    % getent auth_attr | sort | more

    getent 命令会检索 auth_attr 数据库中的授权列表,并对名称类似的授权一起进行排序。将按照配置授权的顺序来检索授权。有关使用 getent 命令的信息,请参见 getent(1M) 手册页。

  2. 在程序开始时使用 chkauthattr(3C) 函数检查所需的授权。

      chkauthattr() 函数将在以下位置按顺序搜索授权:

    • policy.conf(4) 数据库中的 AUTHS_GRANTED 键-AUTHS_GRANTED 指示缺省情况下指定的授权。

    • policy.conf(4) 数据库中的 PROFS_GRANTED 键-PROFS_GRANTED 指示缺省情况下指定的权限配置文件。chkauthattr() 将针对指定授权检查这些权限配置文件。

    • user_attr(4) 数据库-此数据库存储为用户指定的安全属性。

    • prof_attr(4) 数据库-此数据库存储为用户指定的权限配置文件。

    chkauthattr() 在上述任何位置中都找不到权限授权,则将拒绝用户访问该程序。如果 chkauthattr() 函数遇到 Stop 配置文件,则将忽略其他授权和配置文件,包括 AUTHS_GRANTED、PROFS_GRANTED 以及在 /etc/security/policy.conf 中找到的那些。因此,可以使用 Stop 配置文件来覆盖使用 /etc/security/policy.conf 文件中的 PROFS_GRANTED 和 AUTHS_GRANTED 密钥列出的配置文件。

有关如何使用提供的安全属性,添加新的安全属性以及将它们指定给用户和进程的信息,请参见Chapter 3, Assigning Rights in Oracle Solaris, in Securing Users and Processes in Oracle Solaris 11.2


注 - 用户可以将条目添加到 auth_attr()exec_attr()prof_attr() 数据库。但是,Oracle Solaris 授权并未存储在这些数据库中。
示例 2-3  检查授权

以下代码段说明如何使用 chkauthattr() 函数检查用户的授权。在本例中,该程序将检查 solaris.job.admin 授权。如果用户具有此授权,则该用户可以读取或写入其他用户的文件。如果没有此授权,则用户只能对其拥有的文件执行操作。

/* Define override privileges */
priv_set_t *override_privs = priv_allocset();

/* Clear privilege set before adding privileges. */
priv_set(PRIV_OFF, PRIV_EFFECTIVE, PRIV_FILE_DAC_READ,
			priv_FILE_DAC_WRITE, NULL);

priv_addset(override_privs, PRIV_FILE_DAC_READ);
priv_addset(override_privs, PRIV_FILE_DAC_WRITE);

if (!chkauthattr("solaris.jobs.admin", username)) {
    /* turn off privileges */
    setppriv(PRIV_OFF, PRIV_EFFECTIVE, override_privs);
}
/* Authorized users continue to run with privileges */
/* Other users can read or write to their own files only */