Solaris Management Console GUI 是管理 RBAC 的首选方法。
请勿尝试同时使用命令行和图形用户界面来管理 RBAC。这样可能会导致对配置所做的更改出现冲突,从而使得行为不可预测。这两种工具都可以管理 RBAC,但是不能同时使用二者。
要更改角色属性,您必须已承担主管理员角色或已切换到超级用户。角色属性包括口令、权限配置文件和授权。
使用以下方法之一更改角色属性。
使用 Solaris Management Console 中的“用户”工具。
要启动该控制台,请参见如何在 Solaris Management Console 中承担角色。请按照左侧窗格中的说明在“管理角色”中修改角色。有关更详细的信息,请参见联机帮助。
使用 rolemod 命令。
$ rolemod -c comment -P profile-list rolename |
描述角色功能的新注释。
角色具有的配置文件的列表。此列表将替换当前的配置文件列表。
要修改的现有本地角色的名称。
有关更多命令选项,请参见 rolemod(1M) 手册页。
使用包含 modify 子命令的 smrole 命令。
此命令可修改 NIS、NIS+ 或 LDAP 等分布式名称服务中的角色的属性。此命令将作为 Solaris Management Console 服务器的客户机运行。
$ /usr/sadm/bin/smrole -D domain-name \ -r admin-role -l <Type admin-role password> \ modify -- -n rolename -r username -u username |
要管理的域的名称。
可以修改角色的管理角色的名称。管理角色必须具有 solaris.role.assign 授权。如果要修改已承担的角色,则该角色必须具有 solaris.role.delegate 授权。
admin-role 的口令输入提示。
验证选项和子命令选项之间必需的分隔符。
新角色的名称。
无法再承担 rolename 的用户的名称。
现在可以承担 rolename 的用户的名称。
有关更多命令选项,请参见 smrole(1M) 手册页。
在本示例中,将修改 operadm 角色以使其具有介质恢复权限配置文件。
$ rolemod -c "Handles printers, backup, AND restore" \ -P "Printer Management,Media Backup,Media Restore,All" operadm |
在以下示例中,将修改 operadm 角色以添加介质恢复权限配置文件。
$ /usr/sadm/bin/smrole -r primaryadm -l <Type primaryadm password> \ modify -- -n operadm -c "Handles printers, backup, AND restore" \ -p "Media Restore" |
在以下示例中,将更改 clockmgr 角色。ID 为 108 的 NIS 用户无法再承担该角色。ID 为 110 的 NIS 用户可以承担 clockmgr 角色。
$ /usr/sadm/bin/smrole -D nis:/examplehost/example.domain \ -r primaryadm -l <Type primaryadm password> \ modify -- -n clockmgr -r 108 -u 110 |
权限配置文件是一种角色属性。如果 prof_attr 数据库不包含满足您需求的权限配置文件,则应创建或更改权限配置文件。要了解有关权限配置文件的更多信息,请参见RBAC 权限配置文件。
要创建或更改权限配置文件,您必须已承担主管理员的角色或已切换到超级用户。
使用以下方法之一更改角色的属性。
使用 Solaris Management Console 中的“用户”工具。
要启动该控制台,请参见如何在 Solaris Management Console 中承担角色。请按照左侧窗格中的说明在“权限”中创建或更改权限配置文件。有关更详细的信息,请参见联机帮助。
使用此命令可以添加、修改、列出或删除权限配置文件。此命令可在文件以及 NIS、NIS+ 或 LDAP 等分布式名称服务中运行。smprofile 命令将作为 Solaris Management Console 服务器的客户机运行。
$ /usr/sadm/bin/smprofile -D domain-name \ -r admin-role -l <Type admin-role password> \ add | modify -- -n profile-name \ -d description -m help-file -p supplementary-profile |
要管理的域的名称。
可以修改角色的管理角色的名称。管理角色必须具有 solaris.role.assign 授权。如果要修改已承担的角色,则该角色必须具有 solaris.role.delegate 授权。
admin-role 的口令输入提示。
验证选项和子命令选项之间必需的分隔符。
新配置文件的名称。
配置文件的简短说明。
已创建并放置在 /usr/lib/help/profiles/locale/C 目录中的 HTML 帮助文件的名称。
此权限配置文件中包括的现有权限配置文件的名称。您可以指定多个 -p supplementary-profile 选项。
有关更多命令选项,请参见 smprofile(1M) 手册页。
在以下示例中,网络管理权限配置文件充当网络安全权限配置文件的补充配置文件。包含网络安全配置文件的角色现在可以配置网络和主机,而且还可以运行与安全相关的命令。
$ /usr/sadm/bin/smprofile -D nisplus:/example.host/example.domain \ -r primaryadm -l <Type primaryadm password> \ modify -- -n "Network Security" \ -d "Manage network and host configuration and security" \ -m RtNetConfSec.html -p "Network Management" |
运行此命令之前,管理员创建了一个新的帮助文件 RtNetConfSec.html,并将其放置在 /usr/lib/help/profiles/locale/C 目录中。
下表列出了名为“生成管理员”的假设的权限配置文件的样例数据。此权限配置文件包括子目录 /usr/local/swctrl/bin 中的命令。这些命令的有效 UID 为 0。生成管理员权限配置文件适用于管理软件开发的生成和版本控制的管理员。
选项卡 |
字段 |
示例 |
---|---|---|
一般 |
名称 |
生成管理员 |
|
说明 |
用于管理软件生成和版本控制。 |
|
帮助文件名称 |
BuildAdmin.html |
命令 |
添加目录 |
单击“添加目录”,在对话框中键入 /usr/local/swctrl/bin,然后单击“确定”。 |
|
命令遭拒/许可的命令 |
将 /usr/local/swctrl/bin 移动到“许可的命令”列。 |
|
设置安全性属性 |
选择 /usr/local/swctrl/bin,单击“设置安全性属性”,然后将“有效 UID”设置为 root。 |
授权 |
排除的授权/包括的授权 |
无授权。 |
辅助权限 |
排除的权限/包括的权限 |
无补充权限配置文件。 |
角色的权限配置文件是否按功能从高到低的顺序在 GUI 中列出?
例如,如果 All 权限配置文件位于列表顶部,则不会运行具有安全性属性的命令。包含具有安全性属性的命令的配置文件在列表中必须位于 All 权限配置文件的前面。
角色的权限配置文件中是否多次列出了某个命令?如果是这样,第一个命令实例是否具有所需的全部安全性属性?
例如,某个命令可以要求该命令特定选项的特权。为使要求特权的选项成功运行,列表中的最高权限配置文件的第一个命令实例必须具有指定的特权。
角色的权限配置文件中的命令是否具有相应的安全性属性?
例如,如果策略为 suser,则某些命令要求 uid=0 而非 euid=0 才能成功运行。
名称服务高速缓存 svc:/system/name-service-cache 是否已重新启动?
nscd 守护进程可以具有很长的生存时间间隔。通过重新启动此守护进程,可使用当前数据更新该名称服务。
用户属性包括口令、权限配置文件和授权。为用户提供管理功能的最安全的方法是将角色指定给用户。有关说明,请参见直接指定安全属性时的安全注意事项。
要更改用户属性,您必须已承担主管理员角色或已切换到超级用户。
使用以下方法之一更改用户的 RBAC 属性。
使用 Solaris Management Console 中的“用户”工具。
要启动该控制台,请参见如何在 Solaris Management Console 中承担角色。请按照左侧窗格中的说明在“用户帐户”中修改用户。有关更详细的信息,请参见联机帮助。
为用户直接指定授权、特权或权限配置文件并不是一个好的做法。首选方法是将角色指定给用户。然后,用户承担角色以执行特权操作。
此命令可修改本地名称服务中定义的用户的属性。
$ usermod -R rolename username |
现有本地角色的名称。
要修改的现有本地用户的名称。
有关更多命令选项,请参见 usermod(1M) 手册页。
此命令可修改 NIS、NIS+ 或 LDAP 等分布式名称服务中的用户的属性。此命令将作为 Solaris Management Console 服务器的客户机运行。
$ /usr/sadm/bin/smuser -D domain-name \ -r admin-role -l <Type admin-role password> \ modify -- -n username -a rolename |
要管理的域的名称。
可以修改角色的管理角色的名称。管理角色必须具有 solaris.role.assign 授权。如果要修改已承担的角色,则该角色必须具有 solaris.role.delegate 授权。
admin-role 的口令输入提示。
验证选项和子命令选项之间必需的分隔符。
指定了 rolename 的用户的名称。
将指定给 username 的角色的名称。您可以指定多个 -a rolename 选项。
有关更多命令选项,请参见 smuser(1M) 手册页。
在本示例中,用户 jdoe 现在可以承担系统管理员的角色。
$ usermod -R sysadmin jdoe |
在本示例中,为用户 jdoe 指定了两个角色:系统管理员和操作员。由于该用户和这两个角色是在本地定义的,因此不必使用 -D 选项。
$ /usr/sadm/bin/smuser -r primaryadm -l <Type primaryadm password> \ modify -- -n jdoe -a sysadmin -a operadm |
在以下示例中,该用户是在 NIS 名称服务中定义的。因此,需要使用 -D 选项。两个角色是在名称服务中定义的。角色 root 是在本地定义的。
$ /usr/sadm/bin/smuser -D nis:/examplehost/example.domain \ -r primaryadm -l <Type primaryadm password> \ modify -- -n jdoe -a sysadmin -a operadm -a root |
传统应用程序是一个命令或一组命令。先针对权限配置文件中的每个命令设置安全性属性。然后,在角色中包括该权限配置文件。承担该角色的用户便可以运行具有安全性属性的传统应用程序。
要将传统应用程序添加到 Solaris Management Console,请参见《系统管理指南:基本管理》中的“向 Solaris Management Console 中添加工具”。
要更改权限配置文件中命令的安全性属性,您必须已承担主管理员角色或已切换到超级用户。
使用 Solaris Management Console 中的“用户”工具。
要启动该控制台,请参见如何在 Solaris Management Console 中承担角色。请按照左侧窗格中的说明在“权限”中修改权限配置文件。有关更详细的信息,请参见联机帮助。
向实现传统应用程序的命令添加安全性属性。
向传统应用程序添加安全性属性的方式与为任何命令添加安全性属性的方式相同。您必须将具有安全性属性的命令添加到权限配置文件。对于传统命令,请为命令指定 euid=0 或 uid=0 安全性属性。有关该过程的详细信息,请参见如何创建或更改权限配置文件。
将传统应用程序添加到权限配置文件后,在角色的配置文件列表中包括该权限配置文件。
要向角色添加权限配置文件,请参见如何更改角色的属性。
如果某个脚本中的命令需要设置 setuid 位或 setgid 位才能成功运行,则将必须在权限配置文件中为该脚本的可执行脚本和命令添加安全性属性。然后,在角色中包括该权限配置文件,并将该角色指定给用户。当用户承担该角色并执行该脚本时,此命令便会以安全性属性运行。
要将安全性属性添加到命令或 shell 脚本,请参见如何创建或更改权限配置文件。
要检查脚本授权,需要添加一项基于 auths 命令的测试。有关此命令的详细信息,请参见 auths(1) 手册页。
例如,以下行会测试用户是否具有作为 $1 参数提供的授权:
if [ `/usr/bin/auths|/usr/xpg4/bin/grep $1` ]; then echo Auth granted else echo Auth denied fi |
要使测试更加完整,应在测试中包括检查其他使用通配符的授权的逻辑。例如,要测试用户是否具有 solaris.admin.usermgr.write 授权,需要检查以下字符串:
solaris.admin.usermgr.write
solaris.admin.usermgr.*
solaris.admin.*
solaris.*
如果您要编写程序,请使用函数 getauthattr() 对授权进行测试。