Linux下Erlang+Cowboy服务器启动eacces权限错误解决求助
解决Cowboy服务器启动的EACCES权限问题
1. 检查证书与密钥文件的权限
先定位test_app_app.erl第19行中加载证书/密钥的路径(比如Certbot生成的证书通常在/etc/letsencrypt/live/your-domain/目录下),执行以下操作:
- 查看文件权限:
ls -l /etc/letsencrypt/live/your-domain/fullchain.pem /etc/letsencrypt/live/your-domain/privkey.pem - 确保运行Erlang服务器的用户对这些文件有读权限:
- 若用普通用户运行,给证书文件添加读权限:
sudo chmod o+r /etc/letsencrypt/live/your-domain/*.pem - 或者将运行用户加入证书所在组(通常是
ssl-cert):sudo usermod -aG ssl-cert your-user
- 若用普通用户运行,给证书文件添加读权限:
2. 检查端口绑定权限
如果Cowboy绑定了443、80这类低于1024的端口,普通用户默认无权限绑定,可选解决方式:
- 临时用root启动(不推荐生产环境):
sudo ./your-server-start-script - 给Erlang二进制文件添加端口绑定权限(推荐生产):
sudo setcap 'cap_net_bind_service=+ep' /path/to/erlang/beam.smp - 修改配置让Cowboy绑定8443这类高位端口,再通过Nginx反向代理到443。
3. 验证代码中的文件路径
检查test_app_app.erl第19行的代码,确认证书/密钥的读取路径正确,无拼写错误,例如:
{ok, Cert} = file:read_file("/etc/letsencrypt/live/your-domain/fullchain.pem"), {ok, Key} = file:read_file("/etc/letsencrypt/live/your-domain/privkey.pem"),
确保路径真实存在,且运行用户能访问。
4. 检查证书父目录权限
Certbot生成的证书目录权限可能较严格,需保证父目录有执行权限:sudo chmod o+x /etc/letsencrypt /etc/letsencrypt/live /etc/letsencrypt/archive
内容的提问来源于stack exchange,提问作者gabrielikpaetuk
相关产品推荐
相关产品推荐

