在 Oracle® Solaris 11.2 中确保用户和进程的安全

退出打印视图

更新时间: 2014 年 7 月
 
 

向应用程序和脚本指定权限

应用程序和脚本执行一个命令或一系列命令。要指定权限,请为权限配置文件中的每个命令设置安全属性,例如设置 ID 或特权。应用程序可检查授权(如果适用)。


注 -  如果脚本中的某个命令需要设置 setuid 位或 setgid 位才能成功运行,则必须在权限配置文件中为该脚本的可执行文件该命令添加安全属性。在配置文件 shell 中执行该脚本时,该命令将使用安全属性运行。

如何运行具有特权命令的 Shell 脚本

要运行特权 shell 脚本,需要向脚本以及脚本中的命令添加特权。然后,相应权限配置文件必须包含指定有特权的命令。

开始之前

您必须承担 root 角色。有关详细信息,请参见使用所指定的管理权限

  1. /bin/pfsh 或任何其他配置文件 shell 放在第一行来创建脚本。
    #!/bin/pfsh
    # Copyright (c) 2013 by Oracle
  2. 以一般用户身份运行脚本,确定脚本中的命令所需的特权。

    通过运行没有特权的脚本,ppriv 命令的 debug 选项可列出缺少的特权。

    % ppriv -eD script-full-path

    有关详细信息,请参见如何确定程序所需的特权

  3. 创建或修改脚本的权限配置文件。

    将 shell 脚本、该 shell 脚本中的命令以及所需的安全属性添加到权限配置文件中。请参见如何创建权限配置文件

  4. 将权限配置文件指定给可信用户或角色。

    有关示例,请参见为用户指定权限

  5. 要运行脚本,请执行以下操作之一:
    • 如果以用户方式将脚本指定给您,请打开配置文件 shell 并运行脚本。
      % pfexec script-full-path
    • 如果以角色方式将脚本指定给您,请承担该角色并运行脚本。
       % su - rolename
      Password: xxxxxxxx
      # script-full-path
示例 4-1  将安全属性指定给传统应用程序

由于传统应用程序不识别特权,管理员需要在权限配置文件中将 euid=0 安全属性指定给应用程序可执行文件。然后,管理员将权限配置文件指定给可信用户。

# profiles -p LegacyApp
profiles:LegacyApp> set desc="Legacy application"
profiles:LegacyApp> add cmd=/opt/legacy-app/bin/legacy-cmd
profiles:LegacyApp:legacy-cmd> set euid=0
profiles:LegacyApp:legacy-cmd> end
profiles:LegacyApp> exit
# profiles -p LegacyApp 'select cmd=/opt/legacy-app/bin/legacy-cmd;info;end'
	id=/opt/legacy-app/bin/legacy-cmd
	euid=0
# usermod -K profiles+="Legacy application" jdoe
示例 4-2  使用指定的权限运行应用程序

在本示例中,管理员将Example 5–7 中的权限配置文件指定给可信用户。用户在执行脚本时必须提供口令。

# usermod -K auth_profiles+="Site application" jdoe
示例 4-3  检查脚本或程序中的授权

要检查授权,请编写一个基于 auths 命令的测试。有关此命令的详细信息,请参见 auths(1) 手册页。

例如,以下行会测试用户是否具有作为 $1 参数提供的授权:

if [ `/usr/bin/auths|/usr/xpg4/bin/grep $1` ]; then
        echo Auth granted
else
        echo Auth denied
fi

    更加完整的测试包括某种逻辑来检查使用通配符的情况。例如,要测试用户是否具有 solaris.system.date 授权,需要检查以下字符串:

  • solaris.system.date

  • solaris.system.*

  • solaris.*

如果您要编写程序,请使用函数 getauthattr() 对授权进行测试。