非root应用无法在/run创建UNIX socket,用户套接字应存于何处?
关于非root用户创建UNIX套接字的路径问题
/run目录的权限说明
/run(旧版为/var/run)并非仅适用于systemd/init启动的服务,但它的默认权限为root:root且仅开放所有者的读写执行权限,普通用户无写入权限,这就是你遇到错误码13(权限拒绝)的原因。
用户级应用的UNIX套接字推荐位置
根据FHS及现代Linux规范,推荐以下几种路径:
- 用户专属运行时目录:使用环境变量
$XDG_RUNTIME_DIR对应的路径(通常为/run/user/<你的UID>/)。该目录由systemd在用户登录时自动创建,权限为当前用户独有,且会在用户注销时自动清理,是用户级应用存放套接字的首选规范路径。 - 多用户共享场景:如果需要多个用户访问该套接字,可请求root在
/var/run下创建专属子目录(比如/var/run/myapp/),并将目录权限设置为应用所属用户或组可读写。 - 临时/测试场景:也可以放在用户家目录下的自定义目录(如
~/tmp/),但这种方式不符合规范,且不会自动清理临时文件,仅适合本地测试使用。
内容的提问来源于stack exchange,提问作者Nidhoegger
相关产品推荐
相关产品推荐

