解决“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=的账户是否对该文件夹有权限。
和朋友共用文件夹的方法请参考为朋友创建服务器账户。