solr入门之solr安全控制的研究和实践(二)

Permission Attributes(权限属性)

每个用户又一个或者几个权限组成,每个权限由几个定义过可以做哪些事的属性组成.

下面有一些不能被修改的预定义权限:

Pre-defined Permissions

有一些预定义的权限。这些固定的默认值,不能修改,无法添加新属性。要使用这些属性,只需定义一个角色,包括这个权限, 然后给一个用户分配角色。

security-edit:

该许可允许编辑安全配置,这意味着任何更新的操作修改security.json 通过api将被允许.

security-read:

该许可允许阅读安全配置,这意味着任何行动来读取security.json 通过api将被允许。

schema-edit:

该许可允许编辑集合的schema使用schema API .

请注意,这个 schema edit 权限 是适用于全部集合的.

如果要只能编辑指定的集合的schema,应该去创建一个自定义的权限.

schema-read:

该许可允许读取集合的schema使用schema API .

请注意,这个 schema edit 权限 是适用于全部集合的.

如果要只能读取指定的集合的schema,应该去创建一个自定义的权限.

config-edit:

该权限允许去编辑集合的配置信息使用 config API ,request Parameters API

或者其他能够修改configoverlay.json的API.

注意,这个权限允许去修改全部的集合的配置信息.

如果要只能编辑指定的集合的配置信息,应该创建一个新的权限。

config-read:

该权限允许去查看集合的配置信息使用 config API ,request Parameters API

或者其他能够修改configoverlay.json的API.

注意,这个权限允许去查看全部的集合的配置信息.

如果要只能查看指定的集合的配置信息,应该创建一个新的权限。

collection-admin-edit:

该许可允许使用 Collections API 来修改集合的配置.

注意,这个权限允许去编辑所有的集合.

如果要只能编辑指定的集合,应该创建一个自定义的权限.

具体来说,下列的Collection API 将被允许:

CREATE

RELOAD

SPLITSHARD

CREATESHARD

DELETESHARD

CREATEALIAS

DELETEALIAS

DELETE

DELETEREPLICA

ADDREPLICA

CLUSTERPROP

MIGRATE

ADDROLE

REMOVEROLE

ADDREPLICAPROP

DELETEREPLICAPROP

BALANCESHARDUNIQUE

REBALANCELEADERS

collection-admin-read:

该许可允许使用 Collections API 来查看集合的配置.

注意,这个权限允许去查看所有的集合.

如果要只能查看指定的集合,应该创建一个自定义的权限.

具体来说,下列的Collection API 将被允许:

LIST

OVERSEERSTATUS

CLUSTERSTATUS

REQUESTSTATUS

update:

这个权限允许去执行任何更新操作对于所有的集合.

包含发送文档索引(使用 一个 update request handler)

read:

这个权限允许执行任何读取操作对于所有集合

包含使用搜索处理器的查询(使用 request handlers)

像 /select, /get, /browse, /tvrh, /terms, /clustering,

/elevate, /export, /spell, /clustering,  /sql.

all:

任何经过solr的请求

Authorization API(权限操作 API)

API Endpoint

/admin/authorization:

需要一组命令去创建权限,映射权限到角色,映射角色到用户

Manage Permissions(权限管理)

三个命令来进行权限管理:

set-permission:

创建一个新的权限,覆盖现有的权限定义,或者分配一个预定义权限给角色

update-permission:

更新已有的权限定义的一些属性

delete-permission:

删除一个权限

=====

如果你不使用上面预定义的权限,那么需要去创建一个权限.

下面几个属性可以用于你自定义的权限.

name:

权限的名字。这个名字将被用于更新或删除权限。

collection:

这个权限将被应用于集合或者所有集合.

当这个路径是被允许的特定集合时,像当设置权限允许使用Schema API,省略集合的属性

将允许去定义 路径 and/or 方法 对于所有的集合.

然而,当路径是non-collection-specific,像这样 Collection API 这个集合的值必须为null

path:

请求处理器的名称,像 /update or /select  .支持通配符,去允许全部的路径(想 /update/*)

method:

这个参数用来控制HTTP的请求方法.

你可以只允许GET请求,或者有一个的角色,允许PUT和POST请求。

该方法允许这个属性的值GET、POST、PUT、DELETE和HEAD。

params:

请求参数的名称和值。

如果所有请求参数都被允许的,这个属性可以省略.

如果定义,只会限制访问提供的值。

例如,这个属性可以用来限制操作的作用是只允许执行Collection API。

如果这个角色应该只被允许执行LIST或CLUSTERSTATUS列表请求,您将定义如下

"params": {

"action": [LIST, CLUSTERSTATUS]

}

before:

此属性允许权限排序。此属性的值为

这个新的许可权限应放在security.json。

role:

角色(s)的名字给这个许可。

这个名字将被用于用户id映射到角色授予这些权限。

意思是可以通配符(*),这意味着任何用户都可用,但没有用户并不好。

下面将创建一个新的名为collection-mgr的权限,允许创建集合和 查看集合列表。

许可将被放置在"读的许可。还请注意,我们已经定义了“集合为空,

这是因为请求Collections API永远不会与特定集合有关。

curl --user solr:SolrRocks -H ‘Content-type:application/json‘ -d ‘{

"set-permission": {"name":"collection-mgr",

"collection": null,

"path":"/admin/collections",

"params":{"action":[LIST, CREATE]},

"before": "read",

"role": "admin"}

}‘ http://localhost:8983/solr/admin/authorization

Map Roles to Users

A single command allows roles to be mapped to users

一行命令允许映射角色到用户

set-user-role: 映射一个用户到一个权限

删除用户的权限,您应该将角色设置为null。没有命令来删除一个用户角色。

这个命令提供仅仅是用户ID和用户应该有一个或多个角色。

例如,下面将授予用户“solr”“admin”和“dev”的角色,

并删除所有的角色用户ID“harry”:

Enabling SSL(启用SSL)

SolrCloud和单节点Solr都可以加密通信对于连接,和SolrCloud的节点,使用SSL。

本节描述启用SSL Jetty服务器使用一个自签名证书的例子。

SSL证书和密钥的介绍,请参阅

http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/.

主要包含以下及部分内容

基本的SSL设置

Generate a self-signed certificate and a key

● 生成一个自签名证书和一个密钥

● 证书和密钥转换为PEM格式使用cURL

● 设置通用SSL相关系统的属性

● 单节点运行Solr使用SSL

SolrCloud

●配置 Zookeeper

●使用SSL运行SolrCloud

客户端操作的例子

创建一个SolrCloud Collection 使用bin / solr

使用cURL查看 solrCloud集群状态

使用post.jar建立文档索引

使用cURL查询

使用CloudSolrClient索引一个文档

Basic SSL Setup

Generate a self-signed certificate and a key

生成一个自签名证书和一个key,进行身份验证,在服务器和连接之间,我们将使用JDK keytool命令和创建一个单独的密钥存储库。

这个密钥库也将用作下面一个信任存储库。

可以使用的密钥存储库的JDK的目的,和使用单独的信任存储库,但是这些选项不覆盖。

运行下面的命令在server/ etc /目录中的binary Solr分布。

假设您有JDK keytool工具在你的路径,openssl也在你的路径。

https://www.openssl.org/related/binaries.

“-ext SAN=…“keytool选项允许您指定的所有DNS名称和/或IP地址允许在主机名验证(但见下文如何跳过主机名验证Solr节点之间,你不需要在这里指定所有主机)。

除了本地主机127.0.0.1,这个例子包括局域网IP地址192.168.1.3 Solr的机器节点上运行:

keytool -genkeypair -alias solr-ssl -keyalg RSA -keysize 2048 -keypass secret

-storepass secret -validity 9999 -keystore solr-ssl.keystore.jks -ext

SAN=DNS:localhost,IP:192.168.1.3,IP:127.0.0.1 -dname "CN=localhost,

OU=Organizational Unit, O=Organization, L=Location, ST=State, C=Country"

上面的命令将创建一个名为solr-ssl.keystore.jks 的keystore文件,在当前目录中。

Convert the certificate and key to PEM format for use with cURL

cURL不能够使用JKS格式化的密钥存储库,所以JKS密钥存储库需要转换成PEM格式,   使cURL能够理解。

首先将使用keytool JKS密钥存储库到PKCS12格式

keytool -importkeystore -srckeystore solr-ssl.keystore.jks -destkeystore

solr-ssl.keystore.p12 -srcstoretype jks -deststoretype pkcs12

keytool应用程序将提示您创建一个目的地keystore密码和密钥存储库  密码,设置创建密钥存储库时(“secret ”在上面的示例中)。

接下来将PKCS12格式密钥存储库,包括证书和密钥,使用openssl命令转为PEM格式

openssl pkcs12 -in solr-ssl.keystore.p12 -out solr-ssl.pem

如果你想使用cURL在OS X Yosemite(10.10),

您需要创建一个certificate-only版本的PEM 格式,如下:

openssl pkcs12 -nokeys -in solr-ssl.keystore.p12 -out solr-ssl.cacert.pem

Set common SSL related system properties

Solr开始脚本已经设置SSL-related Java系统属性传递给JVM。

为了激活SSL设置,取消和更新这组属性开始在bin / solr.in.sh SOLR_SSL_ *。

(或bin\solr.in.cmd在 windows中)。注意,如果你设置了solr作为服务在linux中使用

这个概述中 Taking Solr to Production,在 /var/solr/solr.in.sh中进行这些更改

bin/solr.in.sh example SOLR_SSL_* configuration

SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.jks

SOLR_SSL_KEY_STORE_PASSWORD=secret

SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.jks

SOLR_SSL_TRUST_STORE_PASSWORD=secret

# Require clients to authenticate

SOLR_SSL_NEED_CLIENT_AUTH=false

# Enable clients to authenticate (but not require)

SOLR_SSL_WANT_CLIENT_AUTH=false

When you start Solr, the bin/solr script includes the settings in bin/solr.in.sh and will pass these SSL-related system properties to the JVM.

当你启动Solr,bin/Solr脚本包括在bin/solr.in.sh中的设置。

并将这些SSL-related系统属性传递给JVM。

注意连接设置:

使SOLR_SSL_NEED_CLIENT_AUTH或SOLR_SSL_WANT_CLIENT_AUTH

但并不在同一时间。他们是相互排斥的,jetty将选择其中一个,可能不是你希望的

同样的,当你启动Solr,bin/Solr.cmd脚本包括在bin/solr.in.sh.cmd中的设置。

并将这些SSL-related系统属性传递给JVM。

bin\solr.in.cmd example SOLR_SSL_* configuration

set SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.jks

set SOLR_SSL_KEY_STORE_PASSWORD=secret

set SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.jks

set SOLR_SSL_TRUST_STORE_PASSWORD=secret

REM Require clients to authenticate

set SOLR_SSL_NEED_CLIENT_AUTH=false

REM Enable clients to authenticate (but not require)

set SOLR_SSL_WANT_CLIENT_AUTH=false

Run Single Node Solr using SSL

使用如下所示的命令启动Solr;默认情况下连接不需要身份验证

*nix command

bin/solr -p 8984

Windows command

bin\solr.cmd -p 8984

SolrCloud

本节描述如何运行一个两节点集群SolrCloud,没有初始化集合和一个单节点外的zookeeper。下面的命令假设您已经创建了密钥存储库。

Configure ZooKeeper

在你开始任何SolrCloud节点之前,您必须配置您的solr集群属性在zookeeper,

以便Solr节点知道通过SSL通信。

本节假设您已经创建了,开始单节点的外部zookeeper在本地主机端口2181上

—see Setting Up an External ZooKeeper Ensemble

urlScheme整个集群范围的属性需要被设置为https,在任何Solr节点启动之前。

这个下面这个例子使用的zkcli工具 二进制Solr分布:

*nix command

server/scripts/cloud-scripts/zkcli.sh -zkhost localhost:2181 -cmd clusterprop

-name urlScheme -val https

Windows command

server\scripts\cloud-scripts\zkcli.bat -zkhost localhost:2181 -cmd clusterprop

-name urlScheme -val https

如果你有设置集群zookeeper使用chroot Solr,确保您的zkcli使用正确的zkhost字符串,

例如-zkhost localhost:2181 / solr。

Run SolrCloud with SSL

Create Solr home directories for two nodes

创建两个副本的server/solr /目录将作为solr home 目录,对于两个SolrCloud节点:

*nix commands

mkdir cloud

cp -r server/solr cloud/node1

cp -r server/solr cloud/node2

Windows commands

mkdir cloud

xcopy /E server\solr cloud\node1\

xcopy /E server\solr cloud\node2\

Start the first Solr node

接下来,开始第一个Solr节点在端口8984上。

首先一定要停止单机服务如果你开始工作时通过一节在这个页面。

*nix command

bin/solr -cloud -s cloud/node1 -z localhost:2181 -p 8984

Windows command

bin\solr.cmd -cloud -s cloud\node1 -z localhost:2181 -p 8984

注意使用-s 选项设置为node1 的 Solr home目录的位置。

如果你创建SSL密钥没有DNS名称/ IP地址,在将运行Solr节点,你可以告诉Solr跳过

主机名称校验对于 inter-solr-node(节点间)通讯,设置 solr.ssl.checkPeerName 系统

属性为false;

*nix command

bin/solr -cloud -s cloud/node1 -z localhost:2181 -p 8984

-Dsolr.ssl.checkPeerName=false

Windows command

bin\solr.cmd -cloud -s cloud\node1 -z localhost:2181 -p 8984

-Dsolr.ssl.checkPeerName=false

Start the second Solr node

最后,在端口7574上启动第二个Solr节点——再一次,

跳过主机名验证,添加 -Dsolr.ssl.checkPeerName = false;

*nix command

bin/solr -cloud -s cloud/node2 -z localhost:2181 -p 7574

Windows command

bin\solr.cmd -cloud -s cloud\node2 -z localhost:2181 -p 7574

Example Client Actions

Create a SolrCloud collection using bin/solr

创建一个2-shard,replicationFactor = 1 名称为mycollection 使用默认的配置文件

(data_driven_schema_configs):

*nix command

bin/solr create -c mycollection -shards 2

Windows command

bin\solr.cmd create -c mycollection -shards 2

创建操作将通过SOLR_SSL_ *  属性 开始你包含的文件去solrJ代码使用创建这个集合。

Retrieve SolrCloud cluster status using cURL

能获取的集群状态(如果你没有启用客户端身份验证,移除 -E solr-ssl.pem:secret 选项):

curl -E solr-ssl.pem:secret --cacert solr-ssl.pem

"https://localhost:8984/solr/admin/collections?action=CLUSTERSTATUS&wt=json&indent=on"

你应该得到这样的响应:

{

"responseHeader":{

"status":0,

"QTime":2041},

"cluster":{

"collections":{

"mycollection":{

"shards":{

"shard1":{

"range":"80000000-ffffffff",

"state":"active",

"replicas":{"core_node1":{

"state":"active",

"base_url":"https://127.0.0.1:8984/solr",

"core":"mycollection_shard1_replica1",

"node_name":"127.0.0.1:8984_solr",

"leader":"true"}}},

"shard2":{

"range":"0-7fffffff",

"state":"active",

"replicas":{"core_node2":{

"state":"active",

"base_url":"https://127.0.0.1:7574/solr",

"core":"mycollection_shard2_replica1",

"node_name":"127.0.0.1:7574_solr",

"leader":"true"}}}},

"maxShardsPerNode":"1",

"router":{"name":"compositeId"},

"replicationFactor":"1"}},

"properties":{"urlScheme":"https"}}}

Index documents using post.jar

使用post.jar去索引一些实例文档到上文创建的solrcloud collection中

cd example/exampledocs

java -Djavax.net.ssl.keyStorePassword=secret

-Djavax.net.ssl.keyStore=../../server/etc/solr-ssl.keystore.jks

-Djavax.net.ssl.trustStore=../../server/etc/solr-ssl.keystore.jks

-Djavax.net.ssl.trustStorePassword=secret

-Durl=https://localhost:8984/solr/mycollection/update -jar post.jar *.xml

Query using cURL

使用cURL来查询上面创建的SolrCloud collection,从一个目录包含PEM格式上面创建证书和密钥(如 example/etc/)——如果你没有启用客户端身份验证(系统参数-Djetty.ssl.clientAuth = true),那么您可以删除-E solr-ss.pem:secret 选项:

curl -E solr-ssl.pem:secret --cacert solr-ssl.pem

"https://localhost:8984/solr/mycollection/select?q=*:*&wt=json&indent=on"

Index a document using CloudSolrClient

对于使用solrJ来连接,创建文档索引.在下列的代码中,javax.net.ssl.* 系统参数是在程序中进行设置的.但是 你能使用java 命令行来代替他 向上文 post.jar 例子.

System.setProperty("javax.net.ssl.keyStore", "/path/to/solr-ssl.keystore.jks");

System.setProperty("javax.net.ssl.keyStorePassword", "secret");

System.setProperty("javax.net.ssl.trustStore", "/path/to/solr-ssl.keystore.jks");

System.setProperty("javax.net.ssl.trustStorePassword", "secret");

String zkHost = "127.0.0.1:2181";

CloudSolrClient server = new CloudSolrClient(zkHost);

server.setDefaultCollection("mycollection");

SolrInputDocument doc = new SolrInputDocument();

doc.addField("id", "1234");

doc.addField("name", "A lovely summer holiday");

server.add(doc);

server.commit();

时间: 2024-08-29 10:46:43

solr入门之solr安全控制的研究和实践(二)的相关文章

solr入门之solr的拼写检查功能的应用级别尝试

今天主要是收集了些拼写检查方面的资料和 尝试使用一下拼写检查的功能--=遇到了不少问题 拼写检查的四种配置目前我只算是成功了半个吧 --------------------------------- 拼写检查功能,能在搜索时,提供一个较好用户体验,所以,主流的搜索引擎都有这个功能.在这之前,笔者先简单的说一下什么是拼写检查,其实很好理解,就是你输入的搜索词,可能是你输错了,也有可能在它的检索库里面根本不存在这个词,但是这时候它能给你返回,相似或相近的结果来帮助你校正. 举个例子,假如你在百度里面

solr入门之搭建具有安全控制和权限管理功能的SolrCloud集群

结合上次搭建项目和配置安全控制的经验,工程的搭建过程应该如下: 1.搭建zookeeper集群 2.配置solr的jetty启动配置 3.在solr启动配置中增加zk的acl配置信息 4.使用solr配置,启动solrcloud集群将 集群交给zookeeper管理 5.上传相关的配置文件,创建集合 6.上传安全配置文件 7.登录admin界面,查看集群状态及能否访问到zookeeper上的文件 8.添加数据到solrcloud中 9.配置客户端,使用solrj来操作solrcloud(摸索阶段

Solr入门和实践以及我对Solr的8点理解

友情提示Solr的内容还是比较多的,一篇文章只能讲解一部分.全面介绍,没兴趣,没时间,也没能力,回报还不大.本文只写点我认为比较重要的知识点,独特的个人想法.仅供参考哦,更多细节需要自己去琢磨. 概述Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎. 工作方式文档通过Http利用XML 加到一个搜索集

solr入门教程

Solr 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试;两个核心配置文件介绍;维护索引;查询索引,和在查询中可以应用的高亮显示.拼写检查.搜索建议.分组统计.拼音检索等功能的使用方法. 1. Solr 是什么? Solr它是一种开放源码的.基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中.Solr 提供了层面搜索(就是统计).命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式).它易于安装和配置,而且附带了一个基于HT

solr入门教程-较详细

Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试;两个核心配置文件介绍;维护索引;查询索引,和在查询中可以应用的高亮显示.拼写检查.搜索建议.分组统计.拼音检索等功能的使用方法. 版本 作者/修改人 日期 V1.0 gzk 2013-06-04       1. Solr 是什么? Solr它是一种开放源码的.基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中.Solr

solr入门学习笔记1 --- solr的安装启动

solr是apache一个基于lucene开发的的完整搜索引擎解决方案.lucene只提供了建立索引和搜索的API接口,相当于一个内核,没有提供实际可用的将外部数据转化为lucene索引的方案或接口.而solr则提供了这样的一个功能,用户只需做简单的配置,即可将外部数据如数据库.office文档.PDF.页面文件等转化为索引文件,然后就可以基于这些数据和solar封闭的查询接口进行数据搜索. solr使用HTTP的方式外外部程序进行交互.即用户做好配置之后,将之发布为一个web服务,其它程序可以

Solr - 入门

1. Solr 是什么? Solr它是一种开放源码的.基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中. Solr 提供了层面搜索(就是统计).命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式). 它易于安装和配置,而且附带了一个基于HTTP 的管理界面. 可以使用 Solr 的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要.Solr的特性包括: 高级的全文搜索功能 专为高通量的网络流量进行的优化 基于开放接口(XML和HTTP)的

Solr入门 Linux中 配置tomcat7 jdk 1.7

一.环境准备: 系统环境:CentOS 6.5 Tomcat 7.0.26 jdk-7u17-linux-x64.rpm solr-4.10.1.tgz 首先将软件包上传到/tmp目录下 1.  jdk安装 ]# rpm -ivh jdk-7u17-linux-x64.rpm Preparing...               ########################################### [100%] 1:jdk                   #########

Solr入门指南

本文转自http://chuanliang2007.spaces.live.com/blog/cns!E5B7AB2851A4C9D2!499.entry?wa=wsignin1.0 因为搜索引擎功能在门户社区中对提高用户体验有着重在门户社区中涉及大量须要搜索引擎的功能需求.眼下在实现搜索引擎的方案上有集中方案可供选择: 1. 基于Lucene自己进行封装实现站内搜索.工作量及扩展性都较大,不採用. 2. 调用Google.Baidu的API实现站内搜索.同第三方搜索引擎绑定太死.无法满足后期业