跳到主要内容
← 指南列表

解决“Permission denied”(文件权限)

在 Linux 中,Permission denied(权限被拒绝)的意思是“这个账户没有以这种方式处理该文件的权限”。大多数情况属于以下三种之一,按顺序检查很快就能解决。

如何读懂权限

ls -l
-rwxr-xr-- 1 kim botteam 1024 Oct  8 12:00 start.sh
  • 最前面的 -rwxr-xr-- 分为三组来读:所有者(rwx)/ 组(r-x)/ 其他所有人(r--)
  • r 读取,w 写入,x 执行(对文件夹来说是进入)
  • kim 是所有者,botteam 是组。

情况 1. 是用 sudo 创建的文件,您的账户无法修改(最常见)

用 sudo 创建或解压的文件,所有者会变成 root,用您的账户无法修改。请将所有者改为您的账户。

sudo chown -R $USER:$USER ~/your-folder

以后在自己的文件夹中操作时,养成不加 sudo 的习惯,就几乎不会出现这个问题。

情况 2. 脚本没有执行权限

如果执行 ./start.sh 时出现 Permission denied,请授予执行权限。

chmod +x start.sh

情况 3. 需要管理员权限的操作

安装程序(apt install)、修改系统配置文件(/etc/...)、开放 1024 以下的端口(80、443)都需要管理员权限。请在命令前加上 sudo。

sudo nano /etc/nginx/sites-available/example.com

SSH 密钥被拒绝时

如果密钥文件和文件夹的权限过于开放,出于安全考虑,SSH 不会使用该密钥。在服务器上执行:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

本地电脑(Linux、macOS)上的私钥也一样。(chmod 600 ~/.ssh/id_ed25519)

绝对不要这样做:chmod 777

chmod -R 777 的意思是“任何人都可以读、写、执行”。即使眼下错误消失了,进入服务器的其他程序或人也能随意更改您的文件。请用上面的方法(更改所有者、授予执行权限)解决。

如果仍然不行

  • 确认当前以哪个账户运行:whoami
  • 也检查上级文件夹的权限:namei -l ~/your-folder/filename(会一次性显示路径中所有文件夹的权限)
  • 如果是用 systemd 运行的程序,请确认服务文件中 User= 的账户是否对该文件夹有权限。

和朋友共用文件夹的方法请参考为朋友创建服务器账户。

如果问题仍未解决,请在 Discord 提交工单。