Likely root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes 的解决办法

在使用K8s/K3s管理ELK日志系统时,博主遇到了Elasticsearch启动报错'Likelyrootcause:java.nio.file.AccessDeniedException:/usr/share/elasticsearch/data/nodes'。问题根源在于宿主机目录权限。解决方案包括在宿主机创建Elasticsearch用户和目录,并调整权限。具体步骤为:1) 创建用户;2) 创建目录;3) 分配权限。通过修改目录权限成功解决了问题。注意在生产环境中避免使用777权限。

问题概述

关于这个问题,博主是在通过K8s/K3s管理器构建ELK日志采集、存储、展示时遇到的一个问题,在构建Elasticsearch时,启动报错

“ Likely root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes

拒绝访问,

如下图:

解决办法

关于这个问题有刚看到还真有点打脑阔,

根据错误内容,在容器内部倒腾了一番,还是不行,

盯着这个提示内容,穷尽了办法,后边换了个思路,“ 是不是宿主机的目录权限问题

 后面按照定位宿主机的目录权限来处理,果然,

解决步骤如下:

1、创建一个Elasticsearch用户,

        输入指令 “ useradd elk ”

2、创建一个Elasticsearch存储的文件夹目录

        输入指令 “ mkdir /home/elasticsearch ”

3、给当前目录分配以elk权限,并加入到elk分组

        输入指令 “ chown elk elasticsearch/chown elk:elk elasticsearch ”

也可以根据获取的用户属性,通过用户的标识号来进行授权也是可以的,

获取用户属性,输入指令 “ cat /etc/passwd ”,如下图:

拿到用户唯一标识号,再执行指令进行授权 ,“ chown 1001 elasticsearch ”

当然,在测试环境中,注意是测试环境中,可以直接用777标识号进行授权,但是在生产环境中这种方式是不可取的,


好了,关于 Likely root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes 的解决办法 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。 
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。


作       者:华    仔
联系作者:who.seek.me@java98k.vip
来        源:优快云 (Chinese Software Developer Network)
原        文:https://blog.youkuaiyun.com/Hello_World_QWP/article/details/125065338
版权声明:本文为博主原创文章,请在转载时务必注明博文出处!
uncaught exception in thread [main] ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes]; Likely root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90) at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106) at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111) at java.base/sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:438) at java.base/java.nio.file.Files.createDirectory(Files.java:699) at java.base/java.nio.file.Files.createAndCheckIsDirectory(Files.java:807) at java.base/java.nio.file.Files.createDirectories(Files.java:793) at org.elasticsearch.env.NodeEnvironment.lambda$new$0(NodeEnvironment.java:300) at org.elasticsearch.env.NodeEnvironment$NodeLock.<init>(NodeEnvironment.java:224) at org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:298) at org.elasticsearch.node.Node.<init>(Node.java:429) at org.elasticsearch.node.Node.<init>(Node.java:309) at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:234) at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:234) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:434) at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:169) at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:160) at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:77) at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:112) at org.elasticsearch.cli.Command.main(Command.java:77) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:125) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:80) For complete error details, refer to the log at /usr/share/elasticsearch/logs/docker-cluster.log
06-27
[root@192 elasticsearch]# docker logs 69 OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release. [2025-08-13T14:03:30,792][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [unknown] uncaught exception in thread [main] org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException: Failed to create node environment at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:140) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.5.4.jar:6.5.4] at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86) ~[elasticsearch-6.5.4.jar:6.5.4] Caused by: java.lang.IllegalStateException: Failed to create node environment at org.elasticsearch.node.Node.<init>(Node.java:299) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.node.Node.<init>(Node.java:265) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:212) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:212) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[elasticsearch-6.5.4.jar:6.5.4] ... 6 more Caused by: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes at sun.nio.fs.UnixException.translateToIOException(UnixException.java:90) ~[?:?] at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111) ~[?:?] at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116) ~[?:?] at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:385) ~[?:?] at java.nio.file.Files.createDirectory(Files.java:689) ~[?:?] at java.nio.file.Files.createAndCheckIsDirectory(Files.java:796) ~[?:?] at java.nio.file.Files.createDirectories(Files.java:782) ~[?:?] at org.elasticsearch.env.NodeEnvironment.lambda$new$0(NodeEnvironment.java:270) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.env.NodeEnvironment$NodeLock.<init>(NodeEnvironment.java:203) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:267) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.node.Node.<init>(Node.java:296) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.node.Node.<init>(Node.java:265) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:212) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:212) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[elasticsearch-6.5.4.jar:6.5.4] ... 6 more
最新发布
08-14
<think>嗯,用户遇到了Elasticsearch启动时因为权限不足导致的AccessDeniedException问题,特别是关于elasticsearch.keystore文件的权限问题。我需要仔细分析这个问题,并提供正确的解决方案。 首先,根据用户提供的引用内容,问题出现的原因主要是用root用户启动Elasticsearch,而Elasticsearch要求使用非root用户运行。比如引用[2]中提到,用户自定义了es用户,但启动时用了root,导致生成的文件权限不符,从而出现错误。所以,第一步应该是确保使用正确的用户来启动服务。 接下来,权限问题通常涉及文件和目录的所有权及访问权限。用户提到需要将目录的所有权更改为elasticsearch用户,比如使用chown命令,并且设置适当的权限,如chmod 755。参考引用[1]中的例子,他们通过sudo chown -R更改了目录的所有者,这可能是一个关键步骤。因此,需要指导用户检查相关目录和文件的所有权是否正确。 另外,elasticsearch.keystore文件的权限也很重要。如果该文件由root创建,而Elasticsearch试图以非root用户访问,就会导致权限被拒绝。可能需要手动调整该文件的权限,比如使用chmod 640,并确保所有者是elasticsearch用户。 还需要考虑SELinux或AppArmor等安全模块是否阻止了访问。有时候即使权限正确,这些安全策略也可能导致问题。临时禁用或调整策略可能有助于排查问题。 另外,配置文件中的路径设置是否正确?比如elasticsearch.yml中配置的数据目录、日志目录等,这些路径的权限是否正确?用户需要确认这些目录是否存在,并且Elasticsearch用户有读写权限。 此外,用户可能没有正确安装Elasticsearch,或者文件系统权限在安装过程中被错误设置。可能需要重新安装,并确保在安装过程中使用正确的用户权限。 总结步骤应该是:1. 创建专用用户;2. 调整文件和目录的所有权;3. 设置正确的权限;4. 检查安全模块;5. 使用专用用户启动服务。同时需要提醒用户不要使用root运行,并提供具体的命令示例,如chown和chmod的具体用法,以及如何启动服务的命令。 可能还需要考虑是否有其他文件或目录被遗漏,比如日志文件、数据存储路径等,是否都正确设置了权限。此外,在启动时使用调试模式或查看日志文件,可以帮助用户更准确地定位问题所在。 最后,确保提供的解决方案步骤清晰,命令准确无误,并且覆盖用户可能遇到的各种情况。同时,生成的相关问题需要围绕权限问题展开,帮助用户进一步理解和解决类似的问题。</think>### Elasticsearch权限不足问题解决方案 Elasticsearch启动时出现$AccessDeniedException$错误通常与文件系统权限配置不当有关,以下是分步解决方案: 1. **创建专用用户** ```bash sudo groupadd elasticsearch sudo useradd -g elasticsearch elasticsearch ``` 2. **调整文件所有权(关键步骤)** ```bash # 修改整个ES安装目录所有权 sudo chown -R elasticsearch:elasticsearch /path/to/elasticsearch # 特别注意配置文件目录(根据错误提示路径调整) sudo chown elasticsearch:elasticsearch /opt/shan/es/config/elasticsearch.keystore ``` *注意:此操作可解决90%的权限问题[^2]* 3. **设置文件权限** ```bash # 设置目录可执行权限 sudo chmod -R 755 /path/to/elasticsearch # 配置文件设置读写权限 sudo chmod 640 /opt/shan/es/config/elasticsearch.keystore ``` 4. **检查安全模块** ```bash # 临时禁用SELinux(测试用) setenforce 0 # 或添加安全策略 sudo semanage fcontext -a -t elasticsearch_config_t "/path/to/elasticsearch(/.*)?" ``` 5. **正确启动服务** ```bash # 切换用户后启动 sudo -u elasticsearch ./bin/elasticsearch ``` **注意**:永远不要使用$root$用户直接启动ES服务,这是引发权限问题的根本原因[^2]。若已错误使用root启动过,需要先清理旧文件: ```bash rm -f /path/to/config/elasticsearch.keystore ```
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TechBro华仔

日拱一卒无有尽,功不唐捐终入海

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值