跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris 管理:安全服务 Oracle Solaris 11 Information Library (简体中文) |
RBAC 的初始配置包括创建可以承担特定角色的用户,创建角色并将这些角色指定给相应的用户。
使用以下任务列表可在站点上规划并初步实现 RBAC。一些任务是按顺序排序的。
|
RBAC 可以作为组织管理其信息资源方式的组成部分。进行规划时,需要全面了解 RBAC 功能以及组织的安全要求。
注 - 在 /etc/security/policy.conf 文件中指定缺省权限。
请阅读基于角色的访问控制(概述)。使用 RBAC 来管理系统与使用常规的 UNIX 管理做法大不相同。要在开始实现之前熟悉 RBAC 概念,请参见第 10 章。
您组织的安全策略应详细说明系统面临的潜在威胁,衡量每种威胁的风险并提供应对这些威胁的策略。通过 RBAC 隔离与安全相关的任务可以作为该策略的一部分。尽管可以按原样使用安装的 RBAC 配置,但可能需要对其进行定制,使其支持您的安全策略。
根据安全需要,选择如何使用 RBAC,如下所述:
root 作为角色-缺省情况下提供该方法。它可以防止任何用户以 root 身份登录。相反,用户必须在承担 root 角色之前通过为他们指定的登录信息进行登录。
独立角色-此方法创建基于提供的权限配置文件的角色。可以根据职责级别、任务范围和任务类型指定角色。例如,System Administrator(系统管理员)角色可以执行超级用户可执行的许多任务,而 Network IPsec Management(网络 IPsec 管理)角色可以管理 IPsec。
您还可以将安全职责与其他职责分隔开。User Management(用户管理)角色可以创建用户,而 User Security(用户安全)角色可以指定安全属性(例如角色和权限配置文件)。但 User Security(用户安全)角色无法创建用户,User Management(用户管理)角色无法将权限配置文件指定给用户。
没有 root 角色-此方法需要您更改系统的缺省配置。在此配置中,知道 root 口令的任何用户都可以登录和修改系统。您无法区分充当超级用户的用户。
请查看建议的角色的功能及其缺省权限配置文件。通过缺省的权限配置文件,管理员可以使用单个配置文件配置建议的角色。
要进一步检查权限配置文件,请执行以下操作之一:
要获取系统上可用的权限配置文件,请使用 getent prof_attr 命令。
在本指南中,请参阅权限配置文件以了解某些典型权限配置文件的摘要。
请在站点上查找可能从受限制访问中受益的其他应用程序或应用程序系列。合适的 RBAC 候选对象包括:影响安全的应用程序、可能导致服务被拒绝的应用程序,或需要对管理员进行特殊培训的应用程序。您可以定制角色和权限配置文件,以处理组织的安全要求。
检查现有权限配置文件是否可以处理此任务,或是否需要创建单独的权限配置文件。
确定是否应将此任务的权限配置文件指定给现有角色,或是否应创建新角色。如果使用现有角色,请检查该角色的原始权限配置文件是否适用于已指定给该角色的用户。对新的权限配置文件进行排序,以便命令能够使用所需的特权执行。有关排序的信息,请参见搜索指定安全属性的顺序。
根据 least privilege(最小特权)原则,应将用户指定给适合该用户信任级别的角色。如果禁止用户执行用户无需执行的任务,可以减少潜在的问题。
可以在本地以及 LDAP 系统信息库中创建角色。
开始之前
要创建角色并指定其初始口令,必须为您指定 User Management(用户管理)权限配置文件。要将安全属性指定给角色,必须为您指定 User Security(用户安全)权限配置文件。
有关更多信息,请参见如何获取管理权限。
该命令的 RBAC 参数如下所示:
# roleadd [-e expire] [-f inactive] [-s shell] [-m] [-S repository] \ [-A authorization-list] -K key=value] rolename
角色到期的日期。使用该选项可以创建临时角色。
连续两次使用同一角色之间的时间间隔所允许的最大天数。当超出 inactive 值时,无法使用该角色。缺省值为 0,没有失效日期。
在缺省位置为 rolename 创建起始目录。
rolename 的登录 shell。此 shell 必须是配置文件 shell。有关配置文件 shell 的列表,请参见 pfexec(1) 手册页。
提示 - 如 ls /usr/bin/pf*sh 中一样,您还可以列出系统 /usr/bin 目录中的配置文件 shell。
files 或 ldap 之一。缺省值为本地文件。
是一个或多个授权(以逗号分隔)。有关授权的列表,请参见 /etc/security/auth_attr 文件。
key=value 对。可以重复该选项。提供以下密钥:audit_flags、 auths、profiles、project、 defaultpriv、limitpriv、lock_after_retries 和 roleauth。有关设置值所需的密钥、密钥值以及授权的信息,请参见 user_attr(4) 手册页。
新角色的名称。有关可接受的字符串的限制,请参见 roleadd(1M) 手册页。
提示 - 当角色的名称反映权限配置文件的名称时,就可以轻松地了解该角色的目的。例如,将 Audit Review(审计查看)权限配置文件指定给 auditreview 角色时,以使得该角色可以读取、过滤和归档审计记录。
例如,以下命令可以创建一个本地 User Administrator(用户管理员)角色和一个起始目录。
# roleadd -c "User Administrator role, local" -s /usr/bin/pfbash \ -m -K profiles="User Security,User Management" useradm 80 blocks # ls /export/home/useradm local.cshrc local.login local.profile
# passwd -r files useradmPassword: <Type useradm password> Confirm Password: <Retype useradm password> #
注 - 通常,可以将一种角色帐户指定给多个用户。因此,管理员通常都会创建一个角色口令,并单独为用户提供角色口令。
示例 9-7 在 LDAP 系统信息库中创建 User Administrator(用户管理员)角色
在以下示例中,管理员站点使用 LDAP 系统信息库。通过运行以下命令,管理员可以在 LDAP 中创建一个 User Administrator(用户管理员)角色。
# roleadd -c "User Administrator role, LDAP" -s /usr/bin/pfbash \ -m -S ldap -K profiles="User Security,User Management" useradm
示例 9-8 创建角色以实现职责分离
在以下示例中,管理员站点使用 LDAP 系统信息库。通过运行以下命令,管理员可以创建两个角色。usermgt 角色可以创建用户,为其提供起始目录,指定初始口令以及执行其他非安全任务。usersec 角色无法创建用户,但可以更改用户口令以及其他 RBAC 属性。
# roleadd -c "User Management role, LDAP" -s /usr/bin/pfbash \ -m -S ldap -K profiles="User Management" usermgt # roleadd -c "User Security role, LDAP" -s /usr/bin/pfbash \ -m -S ldap -K profiles="User Security" usersec
示例 9-9 创建 Device and File Security(设备和文件安全)角色
在以下示例中,管理员将为此系统创建 Device and File Security(设备和文件安全)角色:
# roleadd -c "Device and File System Security admin, local" -s /usr/bin/pfbash \ -m -K profiles="Device Security,File System Security" devflsec
此过程会将角色指定给用户、重新启动名称高速缓存守护进程,然后说明用户如何承担该角色。
开始之前
您已添加了一个角色并为该角色指定了一个口令,如如何创建角色中所述。
要修改用户的大部分安全属性,必须为您指定 User Security(用户安全)权限配置文件。只有超级用户才能修改用户的审计标志。要修改其他属性,必须为您指定 User Management(用户管理)权限配置文件。
有关更多信息,请参见如何获取管理权限。
usermod [-S repository] [RBAC-arguments] login
例如,将角色给本地用户。
# usermod -R +useradm jdoe-local
有关 usermod 命令的选项的信息,请参见 usermod(1M) 手册页或如何创建角色中步骤 2 的介绍。
# svcadm restart system/name-service-cache
示例 9-10 创建和指定角色以管理加密
在以下示例中,LDAP 网络的管理员会创建一个角色以管理加密框架,并将该角色指定给 UID 1111。管理员重新启动 nscd 守护进程以使指定生效。
# roleadd -c "Cryptographic Services manager" \ -g 14 -m -u 104 -s /usr/bin/pfksh \ -S ldap -K profiles="Crypto Management" cryptmgt # passwd cryptmgt New Password: <Type cryptmgt password> Confirm password: <Retype cryptmgt password> # usermod -u 1111 -R +cryptmgt # svcadm restart system/name-service-cache
具有 UID 1111 的用户将登录,然后承担该角色并显示指定的安全属性。
% su - cryptmgt Password: <Type cryptmgt password> Confirm Password: <Retype cryptmgt password> $ profiles -l Crypto Management /usr/bin/kmfcfg euid=0 /usr/sbin/cryptoadm euid=0 /usr/sfw/bin/CA.pl euid=0 /usr/sfw/bin/openssl euid=0 $
有关加密框架的信息,请参见第 11 章。要管理该框架,请参见管理加密框架(任务列表)。
可以审计角色执行的操作。审计记录中包括承担角色的用户的登录名、角色名和角色执行的操作。116:AUE_PFEXEC:execve(2) with pfexec enabled:ps,ex,ua,as 审计事件捕获角色操作。通过预选 as、ex、ps 或 ua 类之一,来审计角色操作。
开始之前
要配置审计,必须为您指定 Audit Configuration(审计配置)权限配置文件。要启用或刷新审计服务,必须为您指定 Audit Control(审计控制)权限配置文件。
有关规划信息,请参见第 27 章。
有关更多信息,请参见如何获取管理权限。
# auditconfig -getflags
如果预选 as、ex、ps 或 ua 类之一,将审计角色操作。否则,请将其中一个类添加到现有类中。
# auditconfig -setflags existing preselections,as
# auditconfig -setflags as
在该示例中,管理员选择了 as 类。该类包括其他审计事件。要查看一个类中包括的审计事件,请使用 auditrecord 命令,如示例 28-25 中所示。
# audit -s
当提供的权限配置文件不包含所需的安全属性集合时,您可以创建或更改权限配置文件。要了解有关权限配置文件的更多信息,请参见RBAC 权限配置文件。
创建新的权限配置文件的最简单方法是复制并修改现有的权限配置文件。
开始之前
要创建或更改权限配置文件,必须为您指定 File Security(文件安全)权限配置文件。
有关更多信息,请参见如何获取管理权限。
# profiles [-S repository] existing-profile-name
此时会提示您输入新名称。现有权限配置文件的内容会被复制到新的配置文件中。
添加或删除补充权限配置文件、授权以及其他安全属性,如以下示例中所示。
示例 9-11 通过现有的配置文件创建新的权限配置文件
在以下示例中,管理员在 LDAP 系统信息库中定制 Console User(控制台用户)权限配置文件。
# profiles -S ldap Console User New name: ExampleCo Console User ExampleCo Console User > Description > Manage MyCompany Systems as the Console User Help > ExCoConsUser.html
管理员设置此权限配置文件的 roleauth 属性。
roleauth=yes
示例 9-12 从权限配置文件中删除基本特权
在以下示例中,详尽测试后,安全管理员从分配有 SunRayUser 权限配置文件的所有用户中删除基本特权。防止这些用户使用 proc_session 特权。即,这些用户无法检查用户当前会话之外的任何进程。
$ profiles -K defaultpriv=basic,!proc_session SunRayUser
示例 9-13 从权限配置文件的限制特权集中删除特权
在以下示例中,详尽测试后,安全管理员从分配有 SunRayUser 权限配置文件的所有用户中删除限制特权。此删除行为可防止这些用户查看其他用户的进程。
$ profiles -K limitpriv=all,!proc_session SunRayUser
示例 9-14 将特权添加到命令中
在以下示例中,安全管理员在权限配置文件添加某应用程序的特权。此应用程序能够识别特权。
# profiles -p SiteApp profiles:SiteApp> set desc="Site application" profiles:SiteApp> add cmd=/opt/site-app/bin/site-cmd profiles:SiteApp:site-cmd> add privs=proc_fork,proc_taskid profiles:SiteApp:site-cmd> end profiles:SiteApp> exit
要进行验证,管理员可以选择 site-cmd。
# profiles -p SiteApp "select cmd=/opt/site-app/bin/site-cmd; info;end" Found profile in files repository. id=/opt/site-app/bin/site-cmd privs=proc_fork,proc_taskid
另请参见
要排除安全属性分配故障,请参见如何排除 RBAC 和特权指定故障。有关背景的信息,请参见搜索指定安全属性的顺序。
传统应用程序是一个命令或一组命令。先针对权限配置文件中的每个命令设置安全属性。然后,在角色中包括该权限配置文件。承担该角色的用户便可以运行具有安全属性的传统应用程序。
开始之前
要创建权限配置文件,必须为您指定 Information Security(信息安全)或 Rights Management(权限管理)权限配置文件。要指定权限配置文件,必须为您指定 User Security(用户安全)权限配置文件。
向传统应用程序添加安全属性的方式与为任何命令添加安全属性的方式相同。您必须将具有安全属性的命令添加到权限配置文件。对于传统命令,请为命令指定 euid=0 或 uid=0 安全属性。有关该过程的详细信息,请参见如何创建或更改权限配置文件。
有关步骤,请参见如何创建或更改权限配置文件。
有关示例,请参见示例 9-14。
要为角色指定权限配置文件,请参见示例 9-10。
示例 9-15 向脚本中的命令添加安全属性
如果某个脚本中的命令需要设置 setuid 位或 setgid 位才能成功运行,则必须在权限配置文件中为该脚本的可执行脚本和命令添加安全属性。然后,在角色中包括该权限配置文件,并将该角色指定给用户。当用户承担该角色并执行该脚本时,此命令便会以安全属性运行。
示例 9-16 检查脚本或程序中的授权
要检查脚本授权,需要添加一项基于 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() 对授权进行测试。
对于用户或角色的进程为何没有使用指定的安全属性运行,存在以下几种影响因素。
安全属性拼写错误。拼写错误的授权失败而不会有提示。
用户或角色未使用包括指定的命名服务。
您所需的指定并不是该属性的第一个指定。
搜索并随后在验证时指定用户或角色安全属性的顺序决定了哪些指定能够成功。授权是例外。在搜索期间,会累积指定给用户或角色的授权。与之相反,权限配置文件中的特权指定和安全属性的指定与搜索紧密相关。将使用第一个指定,而后续指定都将被忽略。
命令不在配置文件 shell 中运行。
开始之前
您必须是 root 角色。
nscd 守护进程可以具有很长的生存时间间隔。通过重新启动此守护进程,可使用当前数据更新该命名服务。
将安全属性用作 userattr -v 命令的值。例如,以下命令指明了对用户 jdoe 指定的安全属性以及执行指定操作的位置:
# userattr -v audit_flags jdoe Modifications to the system defaults user_attr: fw:no # userattr -v auths jdoe Assigned authorizations solaris.admin.wusb.read,solaris.device.cdrw,solaris.device.mount.removable, solaris.mail.mailq,solaris.profmgr.read,solaris.smf.manage.audit, solaris.smf.value.audit # userattr -v audit_flags jdoe Modifications to audit preselection mask # userattr -v auths jdoe Assigned authorizations # userattr -v defaultpriv jdoe Modifications to basic user privileges # userattr -v limitpriv jdoe Modifications to limit privileges # userattr -v lock_after_retries jdoe Automatic lockout attribute # userattr -v profiles jdoe Assigned rights profiles user_attr: Audit Review,Stop # userattr roles jdoe Assigned roles user_attr : cryptomgt,infosec
例如,为能够成功运行,某些命令要求 uid=0,而非 euid=0。一些命令的各个方面都需要授权。
请使用 userattr 命令。
该列表中最早权限配置文件中的属性值即为用户可以使用的值。如果此值不正确,请在该权限配置文件中更改该值,或者对配置文件的列表重新进行排序。
对于特权命令,请检查是否在 defaultpriv 关键字中指定了特权。该指定是对特定命令的特权的补充。
如果属性已指定给一个角色,则该用户只有承担该角色才能获取安全属性。如果属性已指定给多个角色,则列表中最早角色的指定是有效指定。如果此值不正确,请将正确的值指定给列表中的第一个角色,或者对角色指定重新进行排序。
注 - 一些命令的各个方面都需要授权。最佳做法是指定包括管理命令的权限配置文件,而非直接指定特权。
查看包括管理命令的权限配置文件。如果存在包括授权的权限配置文件,请将该权限配置文件指定给用户,而不是简单的指定特权。将该权限配置文件放在所有包括该命令的其他权限配置文件之前。
必须在配置文件 shell 中执行管理命令。要更正用户错误,可以将配置文件 shell 指定为用户的登录 shell。或者,您可以提醒用户在配置文件 shell 中运行管理命令。
特别是,检查用户的 defaultpriv 和 limitpriv 属性的值。
权限配置文件列表中最早的值即为用户可以使用的值。如果此值不正确,请在该权限配置文件中更改该值,或者对配置文件的列表重新进行排序。
特别是,检查配置文件的 defaultpriv 和 limitpriv 属性的值。
如果该命令已指定给某角色,则用户只有承担该角色才能获取安全属性。如果属性已指定给多个角色,则列表中最早角色的指定是有效指定。如果此值不正确,请将正确的值指定给列表中的第一个角色,或者对角色指定重新进行排序。
管理命令需要特权才能成功运行。一些命令的各个方面都需要授权。最佳做法是指定包括管理命令的权限配置文件。
特别是,检查角色的 defaultpriv 和 limitpriv 属性的值。
权限配置文件列表中最早的值即为用户可以使用的值。如果此值不正确,请在该权限配置文件中更改该值,或者对配置文件的列表重新进行排序。