目录权限非777时Java程序读取文件触发AccessDeniedException问题
问题原因与解决方法
核心问题:目录缺少执行权限
Linux系统中,要访问目录内的文件,目录本身必须具备执行权限(x)——这个权限的作用是允许用户进入目录并访问其中的文件/子目录,和文件的执行权限意义完全不同。
看你给出的目录权限:
drw-r----- 2 wfadmin wfgroup 4096 Dec 16 15:31 ignite
drw-r-----对应的权限数值是640,所有者wfadmin对该目录只有读(r)和写(w)权限,缺少关键的执行(x)权限,所以即便你是文件所有者,也无法访问目录内的truststore.jks文件。
而当你把目录改成777时,相当于给所有用户都开了rwx权限,自然能绕过这个限制,但这会带来严重的安全风险。
正确的权限设置
给ignite目录添加所有者的执行权限,同时保持安全的权限范围,执行以下命令:
chmod u+x /usr/WF/WF_PPRB/SSL/certs/ignite
修改后目录权限会变成drwxr-----(数值750),这样:
- 所有者
wfadmin拥有读、写、执行权限,能正常访问目录内的文件 - 同组用户
wfgroup拥有读和执行权限(按需调整) - 其他用户无任何权限,保持安全性
验证
修改权限后,再执行你的Java代码Files.readAllBytes(Paths.get("/usr/WF/WF_PPRB/SSL/certs/ignite/truststore.jks")),就能正常读取文件,不会再触发AccessDeniedException。
内容的提问来源于stack exchange,提问作者vladimir vyatkin
相关产品推荐
相关产品推荐

