应用程序和脚本执行一个命令或一系列命令。要指定权限,请为权限配置文件中的每个命令设置安全属性,例如设置 ID 或特权。应用程序可检查授权(如果适用)。
运行需要权限的脚本-如何运行具有特权命令的 Shell 脚本
使非 root 用户能够运行可识别特权的应用程序-Example 4–1
使非 root 用户能够运行归 root 所有的应用程序-Example 4–2
检查脚本中的授权-Example 4–3
要运行特权 shell 脚本,需要向脚本以及脚本中的命令添加特权。然后,相应权限配置文件必须包含指定有特权的命令。
开始之前
您必须承担 root 角色。有关详细信息,请参见使用所指定的管理权限。
#!/bin/pfsh # Copyright (c) 2013 by Oracle
通过运行没有特权的脚本,ppriv 命令的 debug 选项可列出缺少的特权。
% ppriv -eD script-full-path
有关详细信息,请参见如何确定程序所需的特权。
将 shell 脚本、该 shell 脚本中的命令以及所需的安全属性添加到权限配置文件中。请参见如何创建权限配置文件。
有关示例,请参见为用户指定权限。
% pfexec script-full-path
% su - rolename Password: xxxxxxxx # script-full-path
由于传统应用程序不识别特权,管理员需要在权限配置文件中将 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() 对授权进行测试。