Solr 5.3& Zookeeper安全认证&授权

时间:2015-10-21 15:38:41

标签: security authentication solr basic-authentication apache-zookeeper

关于Solr身份验证的一些主题和文章&授权,但我不能让它工作(我喜欢的方式)。

我按照这些教程/信息来源: https://cwiki.apache.org/confluence/display/solr/Authentication+and+Authorization+Pluginshttps://lucidworks.com/blog/2015/08/17/securing-solr-basic-auth-permission-rules/

然后我创建了这个security.json,我确认它在Zookeeper中是活动的:

    {
  "authentication":{
    "class":"solr.BasicAuthPlugin",
    "credentials":{
      "solr":"...",
      "admin":"...",
      "monitor":"...",
      "data_import":"..."},
    "":{"v":8}},
  "authorization":{
    "class":"solr.RuleBasedAuthorizationPlugin",
    "permissions":[
      {
        "name":"security-edit",
        "role":"adminRole"},
      {
        "name":"security-read",
        "role":"adminRole"},
      {
        "name":"schema-edit",
        "role":"adminRole"},
      {
        "name":"schema-read",
        "role":"collectionRole"},
      {
        "name":"config-edit",
        "role":"adminRole"},
      {
        "name":"config-read",
        "role":"collectionRole"},
      {
        "name":"collection-admin-edit",
        "role":"adminRole"},
      {
        "name":"collection-admin-read",
        "role":"collectionRole"},
      {
        "name":"update",
        "role":"dataImportRole"},
      {
        "name":"read",
        "role":"dataImportRole"}],
    "user-role":{
      "solr":[
        "adminRole",
        "collectionRole",
        "dataImportRole"],
      "admin":[
        "adminRole",
        "collectionRole",
        "dataImportRole"],
      "monitor":[
        "collectionRole",
        "dataImportRole"],
      "data_import":["dataImportRole"]}}}

我现在有一个security.json,它适用于来自命令行的curl请求:

curl "http://localhost:8983/solr/admin/authorization"

  

未经授权的请求,响应代码:401

curl --user solr:<pwd> "http://localhost:8983/solr/admin/authorization"

  

使用信息

的正常回复

到目前为止一切顺利。

现在我尝试从一个集合中选择一些东西,根据我的security.json,它不应该匿名工作,但它仍然有效

curl "http://localhost:8983/solr/outlets_shard1_replica1/select?q=*%3A*&wt=json&indent=true"

"responseHeader":{
    "status":0,
    "QTime":1,
    "params":{
      "indent":"true",
      "q":"*:*",
      "wt":"json"}},
  "response":{"numFound":2000,"start":0,"d.. }

这是让我烦恼的第一件事。我可能可以为/ select创建一些自定义路径权限,但是将权限分配给特定角色应该可以正确吗?但 [1]如何禁用所有匿名访问

继续,可能是相关的,令我困扰的是Solr Admin UI(http://solrurl:8983/solr/#)仍然可以访问。在以前的Solr安装中(使用tomcat)我记得即使这个接口也是安全的。似乎我仍然可以完全访问整个核心(重新加载工作),我也可以检查云配置。 [2]如何限制对Solr Admin UI的访问?

实际上似乎唯一安全的是所有/ solr / admin相关命令

这让我想到了第三件事我似乎无法弄清楚:如何配置solr.in.sh以便使用/ bin / solr命令传递solr身份验证

我看到 SOLR_AUTHENTICATION_CLIENT_CONFIGURER SOLR_AUTHENTICATION_OPTS 选项,但我不知道如何修改这些选项以将基本域身份验证提供给solr命令行。所以 [3]如何保持从命令行到Solr(和Zookeeper)授权的所有访问权限。认证吗

例如。 solr status现在返回

Found 1 Solr nodes:

Solr process 15931 running on port 8983

ERROR: Failed to get system information from http://localhost:8983/solr due to: org.apache.http.client.ClientProtocolException: Expected JSON response from server but received: <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Error 401 Unauthorized request, Response code: 401</title>
</head>
<body><h2>HTTP ERROR 401</h2>
<p>Problem accessing /solr/admin/collections. Reason:
<pre>    Unauthorized request, Response code: 401</pre></p><hr><i><small>Powered by Jetty://</small></i><hr/>

</body>
</html>

我已经用

进行了测试

SOLR_AUTHENTICATION_OPTS="-DinternalAuthCredentialsBasicAuthUsername=solr -DinternalAuthCredentialsBasicAuthPassword=<pass>"

无济于事

3 个答案:

答案 0 :(得分:1)

我也遇到了同样的问题,然后我查看了源代码。

RuleBasedAuthorizationPlugin中的读取权限定义为:

         read :{" +
         path:['/update/*', '/get']}," +

哪个永远不会奏效。

我提出了一个问题:

https://issues.apache.org/jira/browse/SOLR-8439

现在,要完全锁定您的管理员,您需要使用path =&#34; /&#34;来定义新权限,这将解决您的问题,如下所示:

curl --user solr:SolrRocks http://localhost:8983/solr/admin/authorization -H 'Content-type:application/json' -d '{
"set-permission" : {"name":"admin-ui",
                     "path":"/",
                     "before":"update",
                     "role":"admin"}}' 

答案 1 :(得分:0)

首先使用Solr教程中给出的默认用户/ Pw。

使用salt对密码进行哈希处理。 Solr在您创建新的经过身份验证的用户时提供明文密码的加密,但Lucidworks说明中的pw已经针对明文值加密:solrRocks(或类似) - 使用该帐户创建其他人,给他们适当的权限,然后删除solr:solrRocks帐户。

答案 2 :(得分:0)

您是否忘记将blockUnknown设置为true? security.json中的身份验证块应为:

"authentication":{
   "blockUnknown": true,
   "class":"solr.BasicAuthPlugin",
   "credentials":{"solr":"..."}
},

如果您没有设置它,它将允许所有匿名访问!这很奇怪,但这里是来源: 'blockUknown:true' means that unauthenticated requests are not allowed to pass through [1]