规划工作流安全性和用户管理 (SharePoint Foundation 2010)

 

适用于: SharePoint Foundation 2010

上一次修改主题: 2011-03-09

在 Microsoft SharePoint Foundation 2010 中向用户部署工作流之前,管理员可能会担心安全问题,如信息泄露或特权提升。本文重点介绍了工作流行为中与安全有关的一些方面,并提出了供管理员和工作流开发者在计划配置和开发工作流时考虑的其他问题。

本文内容:

列表管理者、管理员和开发人员的角色及职责

下面是一些常见的工作流操作和相关职责,其中对管理员和开发人员在运行工作流时的角色进行了说明。

工作流开发人员

开发工作流计划和模板   工作流开发人员负责对程序集(包含将在 SharePoint 项目中运行的业务逻辑)进行编码。此程序集称为工作流计划。工作流开发人员也负责将工作流表单和程序集打包到工作流功能或工作流模板中。

网站管理员

管理管理中心工作流设置   网站管理员可以控制常规工作流设置,如针对 SharePoint 管理中心网站的任务警报结果和外部参与者设置。

部署工作流功能   网站管理员可在网站集中安装工作流功能,使其可用于关联。

列表管理员(具有管理列表或网站设计者权限的任何用户)

添加工作流   列表管理员必须根据列表或内容类型的业务需要将工作流模板与列表或内容类型关联(将工作流模板添加到列表或内容类型)。此关联使工作流模板可供最终用户使用,然后最终用户便可选择默认的值和设置。

移除工作流   列表管理员可从列表或内容类型中移除工作流关联,或禁止新实例运行。

终止工作流   如果工作流实例失败,列表管理员可使用“工作流状态”页上的“终止此工作流”链接来停止正在运行的工作流实例(如在工作流实例产生错误或不启动时)。

以管理员的身份运行工作流

应知道的最重要的安全概念是工作流通过有关服务器计算机和域的身份应用程序池设置在 SharePoint Foundation 2010 中作为系统帐户的一部分运行。这意味着,在 SharePoint Foundation 2010 中,工作流具有管理员权限。在服务器中,工作流与应用程序池具有相同的权限,应用程序池通常具有管理员权限。这些权限使工作流可以执行普通用户无法执行的操作,如向特定位置或记录中心传送文档,或向系统中添加用户帐户。

工作流具有管理员权限这一设置不能更改。工作流计划(即工作流代码)负责检测用户操作并根据这些操作继续或回滚更改,或者模拟用户以便模仿该用户的权限。

管理员在部署工作流时必须了解工作流将要执行的操作,这样他们便可以评估与工作流中的权限提升关联的可能风险,并可帮助工作流开发人员减少安全方面的担心。

工作流配置设置

SharePoint Foundation 2010 有一些配置设置必须由管理员根据其安全需要进行设置。

启动工作流所需的权限

除了防止在代码中进行权限提升外,列表管理员还可以在关联过程中限制启动工作流所需的权限级别。管理员可以选择以下两种权限级别之一来启动特定工作流关联:“编辑项目”或“管理列表”。

关联工作流的默认设置是允许具有“编辑项目”权限的用户手动启动工作流。这意味着列表中具有“编辑项目”权限的任何通过身份验证的 SharePoint Foundation 2010 用户都可以启动此工作流关联的实例。如果管理员在工作流创建期间选择了需要用户具有“管理列表”权限才能启动工作流的选项,则只有列表管理员可以启动此关联的实例。

由于工作流是为标准参与者使用而设计的,因此大多数工作流都不要求对“管理列表”权限进行限制。但是,管理员可将此设置用于文档处置工作流之类的工作流,在这些工作流中管理员只希望特定用户执行处置操作。

管理中心设置

通过单击“应用程序管理”并在“Web 应用程序”部分单击“管理 Web 应用程序”,可在“管理中心”页上找到以下设置。在“Web 应用程序”页上选择要配置的 Web 应用程序,并在功能区的“管理”组中单击“常规设置”,然后选择“工作流”。“工作流设置”页将打开,并显示以下设置:

  • 用户定义的工作流

  • 工作流任务通知

启用用户定义的工作流

默认情况下,会为 Web 应用程序中的所有网站启用用户定义的工作流,如“工作流设置”页上的“用户定义的工作流”部分所示。选择此选项后,用户便可在工作流编辑器(如 SharePoint Designer 2010 工作流编辑器)中定义工作流。定义这些工作流的用户必须在要向其部署工作流的网站中具有“管理列表”权限。

面向无网站访问权限的用户的任务通知

在“工作流设置”页上的“工作流任务通知”部分,您可以设置相关选项来向无网站访问权限的用户发送有关待定工作流任务的通知。

-
内部用户

在 SharePoint Foundation 2010 中,可以解析目录服务中不是网站成员或没有该任务访问权限的内部用户的名称。在此情况下,管理员可在“工作流任务通知”部分选择“为没有网站访问权限的内部用户分配工作流任务后,是否向其发送通知”选项,设置此类用户是否通过电子邮件接收任务通知。此选项意味着在为用户分配工作流任务后,将向其发送通知。此选项在默认情况下启用,用户接收的电子邮件中包含一个单击后可请求网站访问权限的链接(管理员必须仍然授予访问权限)。此电子邮件还可能包含有关文档的信息。该信息可能包括文档标题以及来自工作流所有者的说明。如果担心发生与非网站成员的内部用户相关联的信息泄露,管理员可能要禁用“为没有网站访问权限的内部用户分配工作流任务后,是否向其发送通知”设置。
  • 外部用户

    对于不在目录服务中但分配了格式正确的 SMTP 电子邮件地址的外部用户,仍可为其分配工作流任务。由于外部用户很难访问文档,因此 SharePoint Foundation 2010 中包括一个设置“是否通过向外部用户发送文档副本,允许其参与工作流”,从而可通过附加了文档的电子邮件向外部用户发送任务通知。启用此选项后,任务将被分配给工作流所有者,外部用户便可通过向该所有者发送电子邮件来完成任务。

    默认情况下,将禁用“是否通过向外部用户发送文档副本,允许其参与工作流”选项。但在需要外部参与的情况下(例如审批涉及外部客户的业务文档时),此设置非常有用。启用此设置(选择“是”)的管理员必须验证工作流计划是否支持外部参与者设置。例如,在为外部用户创建任务时,自定义工作流必须在用于初始化任务的 SPWorkflowTaskProperties 对象的 OnBehalfEmail 属性中指定外部电子邮件地址。SharePoint Foundation 2010 中有若干个内置工作流支持此设置。

    要启用此功能的自定义工作流开发人员必须与管理员协作,确定在外部电子邮件中附加实际文档是否存在信息泄露的风险。在启用此设置时,管理员必须对益处和风险进行评估。

任务和工作流历史记录列表中的信息泄露

由于任务和历史记录列表项目可以包含有关用户及用户对文档所执行操作的数据,因此项目可能会泄露机密信息。例如,促销审批工作流可能会收集组织只希望工作流所有者和任务中的每位参与者查看的任务反馈。

任务和历史记录列表是网站中的典型列表。因此,默认情况下所有读者都可以查看任务和历史列表项目。管理员和开发人员必须确定不能泄露的信息并决定是否要帮助确保工作流所创建的任务及历史记录项目的安全。

可通过若干种方式来确保这些项目的安全。例如,管理员可以设置列表级别权限。如果泄露将为专用泄露,即并非公开可用,但可供特定人员组使用,则管理员可以新建任务或历史记录列表并为列表设置面向该组的权限。如果管理员不希望任何人查看工作流状态页上的历史记录事件,则可删除状态页从中提取信息的工作流历史记录列表的查看权限。对于无权查看历史记录列表本身或该列表中的任何项目的用户,在打开从该历史记录列表中提取数据的任何状态页时,都将收到“拒绝访问”错误。

如果需要更为精细的限制,工作流开发人员可在创建任务或历史记录项目时设置每个项目的权限。CreateTask 活动有一个 SpecialPermissions 属性,该属性只提供用于访问新建任务的指定权限。LogToHistoryList 活动没有此类属性,因此若要对历史记录列表项目设置每个项目的权限,管理员必须使用 SharePoint Foundation 2010 中的对象模型 (OM)。每个项目的权限会对性能造成不利影响,除非有必要否则不应使用。

不必以相同方式处理任务和历史记录项目。管理员可以混合并匹配列表权限和项目级别权限。

任务和工作流历史记录列表中的欺骗和篡改攻击

如果对任务或历史记录项目没有任何限制,则所有参与者都可以修改这些列表。这意味着恶意用户可以修改任务说明,向参与者提供不正确的说明或命令参与者点击恶意链接。为了更改某一进程的感知结果,恶意用户也可以添加虚假或不准确的历史记录事件,或者可以修改历史记录事件使其虚假或不准确。

正如前面所详述的,任务和历史记录列表是网站中的标准列表。默认情况下,对任务列表或历史记录列表没有任何权限限制。为了避免欺骗和篡改攻击,管理员必须确定存在的漏洞,同时限制对列表中列的访问(例如,使诸如任务说明之类的易受攻击的列成为只读列,从而只有工作流可在创建项目时对这些列进行设置)、对列表设置特殊权限或对列表中的项目设置项目级别权限。

工作流历史记录列表中的安全问题

工作流的一个主要优点是可以跟踪进度信息,以便查看进度。工作流历史记录列表是此信息的存储库,在此工作流状态页面可以搜索与工作流实例相关的数据并使此信息可供用户使用。用户可在历史记录列表中看到他们拥有访问权限的所有项目。

但是,由于工作流历史记录列表可跟踪信息,因此用户可能认为可将其用作事件的审计线索。实际情况并非如此:工作流历史记录不是一项安全功能。历史记录列表是标准的 SharePoint 列表,用于存储对任何用户均可见并且没有与之关联的特殊权限的事件。默认情况下,如果用户具有网站的编辑和添加权限,则可修改和添加事件。若要审核事件,请使用 SharePoint 的审核日志功能。只有管理员可以访问此日志,无需做其他任何工作便可使此日志免受篡改攻击。

为了更好地保护历史记录列表,管理员可以限制列表的编辑和添加权限,以便只有系统帐户管理员(例如,工作流管理员)和列表管理员可以添加项目。列表管理员必须具有添加权限才能记录“终止此工作流”事件。如果历史记录列表的编辑和添加权限受限,则仍必须向用户授予查看权限,用户才能查看状态信息。

声明性工作流的用户模拟步骤类型

用户模拟步骤类型可供创作工作流的人员而非工作流发起者来运行声明性工作流的某些部分。声明性表示无需编写任何代码即可用来创建工作流并为该工作流设置参数的模型。

在 SharePoint Foundation 2010 中,除非遇到模拟步骤,否则声明性工作流将始终在工作流发起者的用户上下文中运行。如果遇到模拟步骤,声明性工作流将在工作流关联者的上下文中运行。默认工作流任务通过在工作流运行时模拟启动工作流的用户来遵守 SharePoint 权限。此安排可在 SharePoint Foundation 2010 中保证安全,但会禁止许多情况,在这些情况下,权限级别高的工作流设计器希望创作可由权限级别低的用户成功完成的强大工作流。

借助安全、范围形式的特权提升,通过工作流可实现网站操作自动化。这可以减少 SharePoint 网站管理员的负担。在启用现有操作以模拟工作流发起者之外的某些人的发布和审批情况中,实现高安全性过程的自动化非常有用。

以下示例情况对用户模拟步骤类型进行了说明:

  • 发布到安全列表

    小王锁定了她的 SharePoint 网站的公开窗口的“页面”文档库。她设置了一个审批工作流,该工作流通过使用 Microsoft SharePoint Designer 2010 提交来自网站参与者的内容以供审批。小王将她的工作流操作置于一个模拟步骤中,这样工作流操作会始终将她(网站管理员)模拟为工作流的创作者。

    当小李(参与者)将内容草稿张贴到网站的“页面”库中并尝试发布该文章时,该操作会导致小王的审批工作流启动,这样便可审阅并审批张贴内容。在该工作流中,会以小李的身份将任务发送给审批者。即使小李没有审批页面的权限,审批者进行审阅和审批后,系统也会将张贴内容的裁决状态设置为“已批准”。

  • 向用户授予权限

    小安在 SharePoint Designer 2010 中设置了一个工作流,该工作流使用用户模拟操作“向组中添加用户”来授予其网站的设计权限。由于该工作流使用模拟范围,因此向组中添加用户的操作将始终以小安的身份执行。

    该工作流的其余部分允许参与者访问网站并完成一个表格,以记录他们对列表的访问请求。

    例如,尽管单独用户小赵和用户小李都没有小安网站的“管理列表”权限,但当小李记录请求时,小赵会收到任务;当他审批该任务时,系统会将小李添加到网站的 Designer 组中。

  • 模板和取得所有权

    小马在 SharePoint Designer 2010 中创建了若干个工作流并将其保存为模板,以便于在整个公司内重复使用,但他不久后就离开了公司。他的帐户被移除了,他的管理员状态被吊销了,现在小马创建的 SharePoint Designer 2010 工作流将由于缺少小马的权限而无法完成。

    父 SharePoint 网站管理员小伟可以干预每个工作流,而无需在 SharePoint Designer 2010 中重新创建工作流。小伟会获得每个损坏的模板中管理症状的所有权。完成此操作后,安全发布和访问权限授予将以小伟的名义而不是小马的名义进行,其他所有内容都不会更改。

下面是可以模拟的工作流操作:

  • 设置内容审批状态(作为所有者)

  • 创建列表项目(作为所有者)

  • 更新列表项目(作为所有者)

  • 删除列表项目(作为所有者)

  • 添加/移除/设置/继承列表项目权限(作为所有者)

作为 SharePoint 管理员,您必须考虑将模拟并入 SharePoint 网站上的工作流可能会对安全造成的影响。这不仅适用于新操作,而且适用于更新列表项目等现有操作。

例如,请考虑这样一个模型,工作流中的用户模拟操作仍可以发起者的身份运行。如果用户仅对网站集中的某个网站拥有管理员权限,该用户可能会恶意创建工作流,以获取对该网站的父网站的权限。该恶意用户只需说服管理员将文件上载到该恶意用户网站上的文档库中,从而开始工作流的攻击并威胁该网站的整个父网站的安全。

此风险促使了 SharePoint Designer 2010 中“用户模拟操作始终模拟其关联者”这一限制的形成。关联者 是将工作流与特定列表或网站关联的人员。在 SharePoint Foundation 2010 声明性工作流中,关联者与工作流创作者是同一个人;也就是在 SharePoint Designer 2010 中构建工作流的用户。但是,关联者也可以是关联声明性工作流模板的任何人。现在担心的问题是,由于在特权提升中使用了创作者/关联者的凭据,因此创作者/关联者被强制接受由于用户模拟步骤类型而发生的人和操作的责任。这要求创作者/关联者理解他们所设计或关联的工作流。因此,在创建工作流期间,SharePoint Designer 2010 在工作流创建页中为创作者/关联者提供了有关用户模拟步骤类型的警告消息。