对于传统的安全性模型,超级用户拥有完全的超级用户特权,而其他的用户没有足够的权限解决他们自己的问题。有了基于角色的访问控制(RBAC),便可以取代传统的安全模型。
有了RBAC,可以将超级用户的能力分成不同的包,并将它们分别分配给分担管理任务的个体。当使用RBAC划分超级用户特权时,用户可以拥有不同程度的访问权限,可以控制对其他用户特权操作的授权。
RBAC包括了如下特性。
角色:一种特殊类型的用户账号,可以用来执行一套管理任务。
特征文件(profile):一种打包机制,用特殊的属性将授权和命令分组。例如,使用用户和组的ID。
授权:一种用来授予对受限功能的访问权限的权利。
下面我们来分别介绍它们。
7.3.1 角色管理概述
1.角色
实现RBAC功 能的第一步就是对准备指派给每个用户的角色进行定义。另外,不同资源的访问权限也必须与具体的角色名联系在一起。对于管理者来说,角色的变化,以及用户与 角色关系的调整都是不可避免的。因此,这种变化的角色和用户列表的实现方法应尽可能的简单。另外,单一的任务并不容易实现与单一角色的关联。
比如,一个被定义为“备份操作员”的角色会涉及到ufsdump命令的运行,而这又需要对磁带设备进行写访问操作。此时,备份操作员角色本身就决定了它对这种文件访问的必然性。因此,我们不需要单独为它定义一个新角色。
又如,一个“设备管理员”可能使用命令tapes来对磁带设备执行写访问操作。所以,这些写操作也不能定义为一个新的角色,它自然成为“设备管理员”角色的一部分。
如果一个用户承担某个角色,他的结果要么承担该角色的全部权限,要么就丧失该角色的全部权限。
在默认情况下,Solaris 支持3种不同的系统管理角色。
主管理员(PA,Primary Administrator):负责为其他用户分派权限,并负责系统的安全问题。
系统管理员(SA,System Administrator):负责与安全无关的日常管理工作。
操作员(Operator):执行备份和设备维护操作。
PA和SA之间的区别主要取决于本地的安全策略。例如,尽管默认的PA角色具备添加用户和修改口令的权限,而默认的SA角色并不具备修改口令的权限,但在很多地方,禁止SA的口令访问可能是不现实的。RBAC的一个最大的好处就是它可以按照本地的需求非常方便地分配权限。
2.权限配置文件(Profile)
特征文件是用于授权的一个或一组特定的命令。这些授权连接在一起形成某个角色,并随后与某个用户或某些不同的用户建立关联关系。它们之间的关系如图7-1所示。
我们可以为每个角色创建一个新的用户账号,这些账号拥有自己的主目录和口令。当执行特征文件中的命令时,用户必须使用su命令进入角色账户,因为这种角色用户是不允许直接登录的。
通过su命令访问角色账户与通过su命令访问普通账户的一个不同之处在于它们的审计功能,即在通过su命令访问某个角色时,它执行的所有操作,连同用户的原始UID都会被记入日志。这样,每个访问角色的用户操作都会被明确地记入日志并进行审计。
3.授权
所谓授权,就是赋予某个角色执行某项操作的特权,它是在/etc/security/auth_attr文件中定义的。授权的定义形式与Internet的域名非常相似,它的最左边为企业名称,随后是依次细化的软件包和功能内容。
例如,net.cassowary.*就是一个由厂商cassowary.net提供的任何功能授权。
在默认情况下,所有Solaris提供的软件包都是由前缀Solaris来加以识别的。比如,修改口令的授权就是Solaris.admin.usermgr.pswd,而不是com.sun.Solaris.admin.usermgr.pswd。
许多授权的划分都是十分细致的,它可能只允许读访问,而不允许写访问,反之也是如此。比如,主管理员(PA)可能拥有Solaris.admin.usermgr.read和Solaris.admin.usermgr.write的授权,因而可以对用户配置文件分别进行读访问和写访问操作。而系统管理员(SA)虽然可能拥有Solaris.admin.usermgr.read授权,但他并没有Solaris.admin.usermgr.write的授权,因此他可以读用户配置文件,但不能写。
下面是一些Solaris的基本授权:
Solaris.profmgr.read
Solaris.jobs.users, Solaris.mail.mailq
Solaris.admin.usermgr.read
Solaris.admin.logsvc.read
Solaris.admin.fsmgr.read
Solaris.admin.serialmgr.read
Solaris.admin.diskmgr.read
Solaris.admin.procmgr.user, Solaris.compsys.read
Solaris.admin.printer.read
Solaris.admin.prodreg.read
Solaris.admin.dcmgr.read, Solaris.snmp.read
Solaris.project.read, Solaris.admin.patchmg.read
Solaris.network.hosts.read, Solaris.compsys.read
Solaris.admin.volmgr.read
从这里我们看到,Solaris.admin已经定义了一些授权,它们包括文件系统管理(fsmgr)、日志系统管理(logsvc)、端口管理(serialmgr)和用户管理(usermgr)等。
我们还可以利用关键字grant将权限传递给其他用户。一旦关键字grant被附加在一个授权字符串的末尾,即表明该授权可以委托给其他用户。例如,如果Solaris.admin.usermgr. grant授权与Solaris.admin.usermgr.pswd授权配合在一起,则表示口令修改的操作可以由受委托的用户来执行。
4 角色、权限配置文件和授权的关联
如图7-2所示,授权和命令的定义关联起来构成了权限配置文件,该权限配置文件再分派给不同的角色用户来使用。
Solaris共有四个RBAC数据库用于角色的管理。
扩展的用户属性数据库(/etc/user_attr):将用户、角
色、授权和权限配置文件相关联。
授权属性数据库(/etc/security/auth_attr):定义了授权及其授权的属性,标识了相关的帮助文件。
权限配置文件数据库(/etc/security/prof_attr):定义权限配置文件,列出权限配置文件分配的授权,标识了相关的帮助文件。
权限执行属性数据库(/etc/security/exec_attr):定义了分配给一个权限配置文件的特权操作。
另外,policy.conf文件提供将应用于所有用户的默认属性。
RBAC的几个数据库的相互关系如图7-3所示。
例如,如果“打印机管理”权限配置文件被指定给一个用户或角色,则该用户或角色的user_attr 项包含关键字/值对:
profiles=Printer Management.
prof_attr 文件使用下行定义该配置文件(该文件也指定了帮助文件和授权):
Printer Management:::Manage printers, daemons,
/ spooling:help=RtPrntAdmin.html;auths=Solaris.admin.printer,
/ Solaris.admin.printer.modify,Solaris.admion.printer.delete
在exec_attr文件中,下行在“打印机管理”配置文件中给命令/usr/sbin/accept指定了一个有效的用户ID = lp:
Printer Management:suser:cmd:::/usr/sbin/accept:euid=lp
数据库user_attr是惟一需要的数据库,其他数据库的使用取决于实现哪种安全功能。
/etc/user_attr数据库补充了passwd和shadow数据库。它包含了扩展的用户属性,例如,授权和执行profile。它也帮助你将角色分配给一个用户。
一个角色是一种特殊类型的用户账号,允许一个用户执行一组管理任务。它与一个普通的用户账号类似,只是不通过登录窗口访问角色,只能用su命令来访问他们的角色。
举个user_attr数据库项的实例:
默认的user_attr数据库中的项在下面给出。
root::::type=normal;auths=Solaris.*,Solaris.grant;profiles=All
这一项为root分配了做任何事情的权限,使root可以使用系统中所有的命令。它还分配了两项授权。Solaris.*通配符授权为root分配了所有的Solaris授权。Solaris.grant授权使root可以给其他用户分配的任何Solaris授权的权利。
2.授权属性数据库(auth_attr)
授权就是对一种受限的访问给予的权限。它的表现形式是个字符串,标识着授权者和被授权者。
特定的特权程序能够查看授权,并确定用户是否能够执行受限功能。例如,一个要编辑另一个用户的crontab文件的用户需要有Solaris.jobs.admin授权。
所有的授权都被存储在/etc/security/auth_attr数据库中。当直接将授权分配给用户或角色时,授权被输入user_attr数据库中。也可以为执行profile指定授权,这些授权接下来就被分配给用户。
下面的例子给出了默认的auth_attr数据库的一部分。
Solaris.admin.usermgr.:::Users,Groups &Mailing Lists::help=UserMgrHeader.html
当授权在auth-attr数据库中定义时,就可以将其分配给一个user-attr数据库中的用户。下面的例子为用户duanf分配了授权Solaris.admin.usermgr.。
duanf::::type=normal;auths=Solaris.admin.usermgr.;roles=sysadmin;profiles=All
3.权限配置文件数据库(prof_attr)
有了权限配置文件,就可以使用特殊的属性将授权和命令分组,并将其分配给用户或角色。特殊的属性包括真正有效的UID和GID。最常见的属性是将真正有效的UID设置为root。权限配置被存储在prof_attr数据库中。
下面的例子给出了默认的prof_attr数据库的设备管理部分。所有以Solaris.device字符串开头的授权都被分配给设备管理配置文件。
Device Management:::Control Access to Removable Media:auths=Solaris.device.*;help=DevMgmt.html
在prof_attr数据库中定义的设备管理配置文件被分配给user_attr数据库中的advanced角色,如下所示:
advanced::::type=role;profiles=Device Management,PrinterManagement
而授权在auth_attr数据库中定义的则如下面的摘要所示:
Solaris.device.:::Device Allocation::help=DevAllocHeader.htm l
Solaris.device.allocate:::Allocate Device::help=DevAllocate.htm l
Solaris.device.config:::Configure Device Attributes::help=DevConfig.htm l
Solaris.device.grant:::Delegate Device Adm inistration::help=DevGrant.htm l
4.权限执行属性数据库(exec_attr)
与权限配置文件相联系的执行属性就是命令。命令能够使被赋予了配置文件的用户或角色运行特殊的安全属性。Exec_attr文件包括了与权限配置文件相关联的一个基本命令列表。
下面的例子给出了在prof_attr 数据库中定义的打印机管理配置文件。
Printer Management:::ControlAccess to Printer:help=PrinterMgmt.html
打印机管理配置文件有13 项执行属性,在exec_attr 数据库中为它指定了合适的安全属性,如下所示:
Printer Management:suser:cm d:::/etc/init.d/lp:euid=0
Printer Managem ent:suser:cm d:::/usr/bin/cancel:egid=0
Printer Managem ent:suser:cm d:::/usr/bin/lpset:euid=14
Printer Managem ent:suser:cm d:::/usr/bin/enable:euid=lp
Printer Managem ent:suser:cm d:::/usr/bin/disable:euid=lp
Printer Managem ent:suser:cm d:::/usr/sbin/accept:euid=lp
Printer Managem ent:suser:cm d:::/usr/sbin/reject:euid=lp
Printer Managem ent:suser:cm d:::/usr/sbin/lpadm in:egid=14
Printer Managem ent:suser:cm d:::/usr/sbin/lpfilter:euid=lp
Printer Managem ent:suser:cm d:::/usr/sbin/lpform s:euid=lp
Printer Managem ent:suser:cm d:::/usr/sbin/lpm ove:euid=lp
Printer Managem ent:suser:cm d:::/usr/sbin/lpshut:euid=lp
Printer Managem ent:suser:cm d:::/usr/sbin/lpusers:euid=lp
7.3.3 RBAC命令
以下这些RBAC命令可以用来对各种不同的RBAC数据库进行操作。
1.smexec
smexec命令可以用来创建、更新,以及删除exec_attr命令数据库的行。该命令在执行时必须提供如下三个选项之一:
add,添加一个数据库行;
delete,删除一个数据库行;
modify,更改一个数据库行。
为了执行smexec命令,用户必须具备Solaris.profmgr.execattr.write授权。根据不同的命令选项,smexec可以有两组参数:授权参数和指定参数。
授权参数对于每个选项都是通用的,它们用于指定如下特性:
-domain 管理的域
-hostname:port 执行操作的主机名和端口(默认端口是898)
-rolepassword 角色的认证口令
-password 用户口令(不是角色口令)
-rolename 角色名
-username 用户名
我们可以利用smexec add命令在exec_attr数据库添加行。在命令行中,可以指定如下参数:
-c 指定要添加的新命令名的完整路径
-g 指定执行该新命令的有效GID
-G 指定执行该新命令的实际GID
-n 指定与该命令相关联的特征文件名称
-t cmd 指定该操作为一个命令
-u 指定执行该新命令的有效UID
-U 指定执行该新命令的实际UID
下面是smexec add命令操作的一个例子:
# smexec add -hostname localhost -password xyz123 -username root -- -n
“Print Manager” -t cmd -c /usr/sbin/lpsched -u 0 -g 0
该命令为Printer Manager特征文件添加了一个启动打印服务的能力,它的有效UID和GID都是0(即root)。
我们可以利用smexec delete命令在exec_attr数据库删除行。在命令行中,可以指定如下参数:
-c 指定要删除的命令名的完整路径
-n 指定当前与该命令相关联的特征文件名称
-t cmd 指定该操作为一个命令
如果需要删除exec_attr数据库中lpsched的相应行,可以使用如下命令:
# smexec delete -hostname localhost -password xyz123 username root -- -n
“Print Manager” -t cmd -c /usr/sbin/lpsched
我们可以利用smexec modify命令修改exec_attr数据库中的行。在命令行中,可以指定如下参数:
-c 指定要修改的命令名的完整路径
-g 指定执行修改后命令的有效GID
-G 指定执行修改后命令的实际GID
-n 指定与该命令相关联的修改特征文件的名称
-t cmd 指定该操作是一个命令
-u 指定执行修改后命令的有效UID
-U 指定执行修改后命令的实际UID
以下是smexec modify命令的一个操作例子:
# smexec modify -hostname localhost -password xyz123 username root -- -n
“Print Manager” -t cmd -c /usr/some/new/path/lpsched -u 0 -g 0
该命令将Print Manager特征文件的启动打印服务的命令路径从/usr/sbin/lpsched修改为/usr/some/new/path/lpsched。
2.smmultiuser
smmultiuser命令用来执行批处理操作,诸如添加或删除大量的用户。当需要指定的所有用户数据已经存在于文件中时,该命令会非常有用。例如,一个备份系统可能需要建立一个类似于当前生产系统的设置(setup),此时,我们不仅可以直接复制文件系统,而且可以执行所有涉及新账户创建的操作,诸如主目录的创建等。另外,指定用户数据的文件也可以根据路径名的改变进行更新。例如,如果原始系统的主目录利用NFS被导出,并被挂接到新系统的lexport挂接点下,则相应的用户说明文件的数据也会在处理前执行相应的更新。或者,如果挂接点后来有所改变,系统的用户数据也同样可以利用smmultiuser命令进行修改。
与smexec命令一样,smmultiuser命令在执行时也必须选择如下三个选项:(1)add,添加多个输入项;(2)delete,删除一个或多个输入项;(3)modify,修改一组现有的输入项。为了利用Smmultiuser命令来修改口令,用户必须具备Solaris.profmgr.execattr.write授权。按照Solaris.profmgr.execattr.write授权命令的不同选项,它存在两组参数:授权参数和操作参数。
授权参数对于每个选项都是通用的,它们用于指定如下特性:
-domain 要被管理的域,它可以是本地数据库(file)、NIS(nis)、NIS+(nisplus)、DNS(dns)或LDAP(ldap)。例如,为了利用LDAP对主机foxtrot. cassowary.net进行管理,我们需要将该域指定为ldap://foxtrot/ cassowary.net
-hostname:port 执行操作的主机名和端口(默认端口是898)
-password 用户口令(不是角色口令)
-rolename 角色名
-rolepassword 角色的认证口令
-trust 在批模式下操作时需要用到
-username 用户名
在利用smmultiuser命令进行添加、删除和修改操作时,可以在命令中传递如下的参数:
-i 指定需要读取的输入文件。该文件包含要添加、修改和删除的所有数据项
-L 指定用于记录批作业中每个操作成败的日志文件名称
在下面的例子中,我们从/home/paul/newaccounts.txt中读取一组记录并添加到系统中:
# smmultiuser add –hostname localhost –p xyz123 username root -- -I
/home/paul/newaccounts.txt
3.smuser
smuser命令可以用来执行对用户账户的操作,无论是从本地用户数据库还是从NIS/NIS+检索数据,它和smmultiuser类似。但是该命令通常只用来添加单个用户,而不是在批模式下添加一组用户。除了添加、删除,以及修改用户条目,也可以检索并列出现存的用户数据。执行该命令时必须提供四个选项中的一个;add用于添加一个条目;delete用于删除一个条目;list用于列出所有现存的条目;modify用于更新一个条目。要使用Smuser的选项add,delete或modify,用户必须有Solaris.profmgr.execattr.write授权。但是,只需要Solaris.admin.usermgr.write授权就可以列出条目。
有两套参数可以传递给Smuser(取决于选择了哪个选项):授权参数和每个选项的具体参数。授权参数对每个选项都是通用的,它们确定了如下特征:
-domain 要被管理的域,它可以是本地数据库(file),NIS(nis),NIS+(nisplus),DNS(dns)或LDAP(ldap)。为了利用LDAP对主机foxtrot.cassowary. net进行管理,我们需要将该域指定为ldap://foxtrot/cassowary.net
-hostname:port 执行操作的主机名和端口(默认端口是898)
-password 用户口令(不是角色口令)
-rolename 角色名
-rolepassword 角色的认证口令
-username 用户名
在利用smuser add命令添加项时,它的参数与我们讨论的利用useradd命令添加用户的参数类似,以下是我们可以在命令行中传递的参数:
-c 指定账户的说明,例如:“Joe Bloggs”
-d 指定用户的主目录
-e 指定账户的有效日期
-f 指定账户过期前的非活动天数限制
-F 指定账户全名,该名称不允许与域中其他账户相同
-g 指定账户的GID
-n 指定账户的名称
-P 指定账户的口令
-s 指定默认Shell
-u 指定账户的UID
下面是smuser add命令的一个例子:
# smuser add –H localhost –p xyz123 –u root -- -F “Paul Watters” –n walrus –c “Paul A Watters Director” –p jimmy123 –g 10 –u 1025
该命令在系统中为Paul Watters添加了一个账户walrus,该账户的口令为jimmy123,账户UID为1025,GID为10。
当利用smuser delete命令删除账户时,我们只需要在命令行中通过-n参数来指定要删除的账户名称。例如,在下面的命令中,我们将从localhost中删除账户warus:
# smuser delete -H localhost -p xyz123 -u root -- -n walrus
smuser list命令可以用来显示一个不带任何参数的用户列表,该命令形式如下:
# smuser list -H localhost -p xyz123 -u root -
当利用smuser modify命令修改用户账户时,命令行的参数与smuser add命令的参数相同,命令中的任何新参数值都会导致相应字段的更新。例如,如果需要将某个用户的默认Shell修改为Korn shell,可以使用如下命令:
# smuser update -H localhost -p xyz123 -u root -- -n walrus -s /bin/ksh
4.smprofile
smprofile命令可以用来创建、列出、更新及删除prof_attr数据库中的特征文件,它们所对应的命令分别为smprofile add,smprofie list,smprofile modify和smprofile delete。命令所使用的授权参数和smuser及smexec命令的参数类似。在利用smprofile add来添加特征文件时,可以在命令行上传递如下参数:
-a 添加单一授权或一组授权
-d 为新的特征文件添加说明
-m 指明与该特征文件相关联的HTML帮助文件的路径
-n 指定该特征文件的名称
以下是smprofile add命令的一个例子:
# smprofile add -H localhost -p xyz123 -u root -- -n “Password Manager” \
-d “Change user passwords” -a Solaris.admin.usermgr.pswd \
-m PasswordManager.html
该命令为Password Manager添加了一个特征文件,使它拥有Solaris.admin.usermgr.pswd授权,可以执行口令修改的操作。
当我们希望利用smprofile list列出特征文件的列表时,只要不在命令行中指定-n参数就可以了。如果指定-n参数,则意味着指定列出的特征文件名字。下面是smprofile list命令的一个例子:
# smprofile list -H localhost -p xyz123 -u root -
当利用smprofile modify命令来修改特征文件时,命令行的参数与smprofile add命令的参数相同,命令中的任何新参数值都会导致相应字段的更新。下面是smprofile modify命令的一个例子:
# smprofile modify -H localhost -p xyz123 -u root -- \
-n “Password Manager” -d “Modify user passwords”
该例子通过-d参数修改了Password Manager特征文件的说明文字内容。
为了利用smprofile delete命令来删除某个特征文件,我们可以在命令行利用-n参数来指定要删除的特征文件名称。下面是smprofile delete命令的一个例子:
# smprofile add -H localhost -p xyz123 -u root -- \
-n “Password Manager”
5.smrole
smrole命令可以执行有关角色账户的操作,它通常只是用来添加单个角色,而不是以批模式的方式来添加一组角色。Smrole命令除了执行添加、删除和修改角色账户的操作外,还可以对现有角色数据执行提取和列出操作。为此,该命令在执行时必须指定如下四个选项之一:(1)add,添加一个角色账户;(2)delete,删除一个角色账户;(3)list,列出现有的所有角色账户;(4)modify,修改某个现有角色账户。为了执行smrole add,delete或modify操作,用户必须拥有Solaris.role.write授权。但是,如果只是执行smrole list操作,则用户只需要Solaris.admin.usermgr.read授权。根据不同的命令选项,Smrole命令共有两种参数:授权参数和指定参数。Smrole命令的授权参数与smuser命令的授权参数相同。
在利用smrole add命令添加角色时,可以在命令行中传递如下参数:
-c 指定角色账户的说明,例如“System Manager”
-d 指定角色账户的主目录
-G 指明该角色账户的辅助GID,因为这里的基本GID总是sysadmin
-n 指定角色的名称
-P 指定账户的口令
-s 指定默认Shell
-u 指定账户的UID
下面是一个使用smrole add命令的例子:
# smrole add -H localhost -p xyz123 -u root -- -F ”System Manager” \
-n bofh -P abc123 -G 10 -u 666
这个命令在系统中为System Manager添加了一个名为bofh的账户,该账户的口令为abc123,账户UID为666,辅助GID为10。
当利用smrole delete命令删除角色账户时,我们只需要在命令行中通过-n参数指定要删除的角色账户名称即可。例如,在下面的命令中,我们将从localhost中删除角色账户bofh:
# smrole delete -H localhost -p xyz123 -u root -- -n bofh
smrole list命令可以用来显示一个不带任何参数的角色列表,该命令如下:
# smrole list -H localhost -p xyz123 -u root --
当我们利用smrole modify命令修改角色账户时,命令行的参数与smrole add命令的参数相同,命令中的任何新参数值都会导致相应字段的更新。例如,如果需要将某个角色的默认Shell修改为Bourne Shell,则可以使用如下命令:
# smrole update -H localhost -p xyz123 -u root -- -n walrus -s /bin/sh
#########################
另外在
/usr/sadm/bin目录下运行smc可以开启Solaris Management Console这个强大的图形管理工具