Asp.net Core 2.0 Ubuntu部署路径访问被拒问题求助
解决Ubuntu上.NET应用CreateDirectory权限拒绝问题
这绝对是Windows转Linux部署的典型权限坑——毕竟俩系统的权限模型差得不是一星半点,我给你捋几个靠谱的解决步骤:
先搞清楚谁在跑你的Kestrel服务
核心第一步:确认你的Kestrel应用是以哪个用户身份运行的:
- 如果是用systemd托管的服务,执行
systemctl status your-app-name.service,看输出里的User字段,通常默认是www-data(和Nginx同用户),也可能是你自定义的用户。 - 要是还不确定,直接跑
ps aux | grep dotnet看进程的用户列就行。
给目标目录配置正确的权限
假设你要创建目录的路径是/var/your-app-storage,按下面的步骤来:
- 先创建父目录(如果还不存在):
sudo mkdir -p /var/your-app-storage - 把目录的所有权改成Kestrel运行的用户和组(比如www-data):
sudo chown -R www-data:www-data /var/your-app-storage - 设置合理的权限(用户读写执行,组读写,其他只读,既安全又满足需求):
sudo chmod -R 755 /var/your-app-storage
验证权限是否真的生效
可以模拟Kestrel用户来创建目录,确认权限没问题:
sudo -u www-data mkdir /var/your-app-storage/test-dir
如果这条命令不报错,说明权限已经配置对了,再重启你的应用试试。
额外排查点
- 检查代码里的路径:别用Windows的反斜杠
\,全部换成Linux的正斜杠/,确保绝对路径正确,或者相对路径是相对于应用的工作目录(systemd服务里的WorkingDirectory配置)。 - 要是还不行,看看AppArmor(Ubuntu默认的安全模块):临时关闭它测试
sudo systemctl stop apparmor,如果好了,就需要给你的应用添加AppArmor规则,允许访问目标目录。 - 确认你之前执行的权限命令是不是应用到了正确的路径——有时候路径输错了,白忙活半天。
内容的提问来源于stack exchange,提问作者Diego Alves
相关产品推荐
相关产品推荐

