ubuntu 上传服务器文件提示: Permission denied
最近在ubuntu 服务器部署应用时,用scp命令刚执行就报错“Permission denied”,一开始以为是密码输错了,反复验证后才发现是目标目录权限没配置对。
后来,发现原因无非就那几种——权限不足、用户归属不对、SSH配置限制等。
这篇把从基础排查到处理的几种方法全讲透,每种都附实操命令和避坑点,希望能够帮助大家避坑。
原因分析
Ubuntu的权限机制很严格,上传文件报错大概率是以下3种原因,排查时按这个顺序来,能快速定位问题:
- 目标目录权限不足:要上传文件的目录(比如/var/www)当前用户没有写入权限,这是最常见的原因;
- 文件/目录归属错误:目标目录的所有者是root,而你用普通用户(比如ubuntu)上传,即使权限显示“755”也无法写入;
- SSH服务配置限制:通过SSH上传(scp/sftp)时,SSH配置文件禁止了该用户的写入权限,或限制了上传目录。
快速排查技巧:先执行
ls -ld 目标目录路径(比如ls -ld /var/www),查看目录的权限和所有者,第一时间判断是权限还是归属问题。
解决方法:赋予目录权限
一般情况是操作的数据目录没有写权限,主要原因:
- 当前登录用户非 root 用户,无该目录写权限
- 当前数据目录被限制了写权限
# 建议先切换到 root 用户
su -
# 如果切换到root用户可以正常上传,则不需要执行以下步骤
# 给目录授权写权限
sudo chmod 777 <数据目录>常见问题
Q1. 改了目标目录权限后,还是提示 Permission denied?
场景:执行 sudo chmod g+w /var/www/html 后,上传还是提示权限被拒。
原因:
① 没有重启 SSH 或 FTP 服务,权限修改未生效;
② 本地终端没有重新登录,用户组权限未刷新。
解决:
① 如果是 SSH/SCP 上传,关闭当前终端,重新通过 SSH 登录服务器;
② 如果是 FTP 上传,重启 FTP 服务(如 sudo systemctl restart vsftpd);
③ 再次执行 ls -ld 确认权限已修改成功。
Q2. 用 root 用户上传也提示权限被拒,怎么回事?
场景:用 scp /local/file root@192.168.1.100:/root 上传,即使是 root 用户也提示权限被拒。
原因:Ubuntu 默认禁用 root 用户的 SSH 登录,导致 root 无法通过 SCP/SFTP 登录上传。
解决:
① 优先用普通用户上传(给普通用户目标目录权限,更安全);
② 若必须用 root,临时开启 root SSH 登录(不推荐):
# 编辑 SSH 配置文件
sudo nano /etc/ssh/sshd_config
# 找到 PermitRootLogin 配置项,改为 yes
PermitRootLogin yes
# 重启 SSH 服务
sudo systemctl restart sshd 上传完成后建议改回 PermitRootLogin no,关闭 root 登录。
Q3. 上传文件成功,但服务器上看不到文件?
场景:SCP 命令执行后显示 100% 传输完成,但登录服务器后在目标目录找不到文件。
原因:
① 上传时目标目录路径写错了(比如多写了一个空格或字母);
② 服务器开启了 AppArmor,限制了文件写入后的可见性。
解决:
① 重新核对 SCP 命令中的远程目录路径,确保和服务器上的路径一致;② 检查 AppArmor 状态并临时关闭(测试用):
# 查看 AppArmor 状态
sudo aa-status
# 临时关闭针对 apache2 的限制(如果目标目录是 web 目录)
sudo aa-complain /etc/apparmor.d/usr.sbin.apache2关闭后再上传,若能看到文件,说明是 AppArmor 限制,需修改配置文件放行(具体参考 AppArmor 官方文档)。
总结
Ubuntu 上传服务器文件的权限问题,看似复杂,其实核心就是“谁有权限操作哪个目录”。
欢迎在评论区留言交流
版权声明
未经授权,禁止转载本文章。
如需转载请保留原文链接并注明出处。即视为默认获得授权。
未保留原文链接未注明出处或删除链接将视为侵权,必追究法律责任!
本文原文链接: https://fiveyoboy.com/articles/ubuntu-upload-err-1/
备用原文链接: https://blog.fiveyoboy.com/articles/ubuntu-upload-err-1/