关于Solr身份验证的一些主题和文章&授权,但我不能让它工作(我喜欢的方式)。
我按照这些教程/信息来源: https://cwiki.apache.org/confluence/display/solr/Authentication+and+Authorization+Plugins 和 https://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>"
无济于事
答案 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]