攻克Ubuntu “Permission denied”难题全攻略

2024-12-14

一、常见报错场景

图片1.jpg

(一)ssh 登录报错

在使用 Ubuntu 系统时,通过 ssh 登录常常会遇到 “Permission denied” 报错的情况哦。如果是以 root 身份登录,比如在 Windows 系统的 cmd 窗口用 root 身份登录 Ubuntu 系统,可能会出现 “拒绝密码:Permission denied, please try again” 这样的提示呢。这往往是因为默认情况下,Ubuntu 禁用了 root 账户的 SSH 远程登录,出于安全方面的考虑啦。这时候要想成功登录,就需要进行一系列的设置操作哦。首先,得确认 Ubuntu 系统上有没有安装 ssh 服务,如果没有的话,要先执行 “sudo apt install openssh-server” 命令来安装 ssh 服务哦。接着,要修改 ssh 配置文件,设置为允许 root 远程登录,在 Windows 的 cmd 上输入命令 “ssh sky@[Ubuntu 系统的 ip 地址]”(这里的 sky 是普通用户名哦,ip 地址可以通过 “ifconfig -a” 命令查看),然后输入 “sudo vi /etc/ssh/sshd_config”,找到 “# PermitRootLogin prohibie-password” 这一行,复制粘贴后在下一行去掉注释 “#”,修改为 “PermitRootLogin yes”,按 “esc” 键,再输入 “:wq” 回车,退出并保存配置文件呀。之后呢,还需要修改 root 密码,在 Windows 的 cmd 上输入 “sudo passwd root” 命令,按提示输入新的密码,再次输入确认密码,看到 “passwd: password updated successfully” 提示,就说明密码设置成功啦。最后一步可别忘咯,在 Windows 的 cmd 上输入 “reboot” 命令,让 Ubuntu 系统重启一下,这样再用 root 账户 ssh 登录,一般就能成功登录上去啦。而对于普通用户登录的情况,如果在登录进去后执行一些命令时出现 “Permission denied” 报错,有可能是验证公钥等方面出了问题呀。比如说,要确认公钥有没有正确添加到 “~/.ssh/authorized_keys” 文件中哦。要是没添加正确或者缺失了,就可能导致权限验证不通过,进而出现登录报错的情况呢。另外,还得检查 SSH 配置有没有正确保存,以及 SSH 服务有没有成功重启,还有防火墙或者网络方面是否正常,这些因素也都可能影响到普通用户通过 ssh 登录 Ubuntu 系统时的权限验证情况哦。

(二)文件操作报错

在 Ubuntu 系统中对文件进行操作时,“Permission denied” 这个报错也挺常见的呢。比如在进行文件复制操作的时候呀,要是当前用户对源文件或者目标文件夹的权限不足,就会弹出这个提示啦。像你想把一个文件从某个文件夹复制到另一个文件夹,结果系统提示 “Permission denied”,很可能就是你所使用的用户没有对目标文件夹的写入权限哦。在读写文件方面,要是以普通用户身份去读取或者修改一些只有管理员权限才能操作的文件,同样也会遇到这个报错呢。例如系统中的某些配置文件,普通用户想去修改里面的内容,权限不够就只能看着 “Permission denied” 干瞪眼啦。还有删除文件的时候哦,如果不是文件的所有者,也没有相应的删除权限,当你试图删除该文件时,系统也会毫不留情地给出 “Permission denied” 的提示哟。另外,执行脚本文件时也可能出现这种情况哦。假如一个脚本文件所在的文件夹权限设置比较严格,当前用户没有执行该文件的权限,那执行的时候就会报错 “Permission denied” 啦。这时候一般可以通过执行 “sudo chmod -R 777 [某一目录]” 这样的命令来处理哦(这里的 “-R” 是指级联应用到目录里的所有子目录和文件,“777” 是所有用户都拥有最高权限,不过这种设置比较 “暴力” 啦,要是有需要的话,可以根据实际情况进行相应更精细的授权操作哦),给对应的文件或者文件夹赋予合适的权限,这样就能正常操作文件,避免 “Permission denied” 报错的出现啦。

二、原因深度剖析

(一)ssh 登录方面

在 ssh 登录时出现 “Permission denied” 报错,背后有着多种内在原因呢。一方面,OpenSSH 版本的限制可能会禁用某些哈希算法的签名算法呀。比如说,随着安全标准的不断更新,一些老旧或者安全性存在隐患的哈希算法被弃用了,如果系统的 OpenSSH 版本遵循了这样的规则,而客户端使用的登录验证方式涉及到这些被禁用的算法,就可能导致权限验证不通过,进而出现 “Permission denied” 的报错情况哦。再就是禁止 root 账户远程登录这个常见因素啦。Ubuntu 出于安全方面的考量,默认是禁用 root 账户通过 SSH 远程登录的哦。像我们在 Windows 系统的 cmd 窗口尝试用 root 身份登录 Ubuntu 系统时,很容易就会收到 “拒绝密码:Permission denied, please try again” 这样的提示呢。这时候要想顺利登录,就得按照正确的步骤去修改配置啦,先确认 Ubuntu 系统上有没有安装 ssh 服务,要是没有的话,要执行 “sudo apt install openssh-server” 命令来安装哦。接着修改 ssh 配置文件,在里面找到 “# PermitRootLogin prohibie-password” 这一行,复制粘贴后在下一行去掉注释 “#”,修改为 “PermitRootLogin yes”,按 “esc” 键,再输入 “:wq” 回车,退出并保存配置文件,然后修改 root 密码,在 Windows 的 cmd 上输入 “sudo passwd root” 命令,按提示输入新密码并再次确认,看到 “passwd: password updated successfully” 提示,就说明密码设置成功啦,最后可别忘了输入 “reboot” 命令让 Ubuntu 系统重启一下哦,这样后续用 root 账户 ssh 登录,一般就能成功啦。还有用户名大小写的问题也不容忽视呀。Ubuntu 系统是区分用户名大小写的哦,如果在登录时输入的用户名大小写和系统中实际设置的不一致,那在验证用户名这一环节就可能出错,从而导致权限验证失败,弹出 “Permission denied” 的报错呢。另外呀,对于普通用户登录的情况,如果在登录进去后执行一些命令时出现这个报错,验证公钥方面出问题也是常见原因之一哦。要确认公钥有没有正确添加到 “~/.ssh/authorized_keys” 文件中呢,要是没添加正确或者缺失了,就会使得权限验证通不过,出现登录报错啦。同时,SSH 配置有没有正确保存、SSH 服务有没有成功重启,以及防火墙或者网络方面是否正常,这些因素同样会影响普通用户通过 ssh 登录 Ubuntu 系统时的权限验证情况哦,任何一个环节出了岔子,都可能导致那恼人的 “Permission denied” 报错出现呢。

(二)文件操作方面

在文件操作中提示权限不足报错,根源也是多种多样的哦。首先呢,普通用户没有对应文件夹或命令的操作权限是很常见的情况呀。Ubuntu 系统里,不同的用户有着不同的权限范围,普通用户对于一些系统级别的文件夹或者特定的命令,默认是没有操作权限的哦。比如,普通用户想去修改系统中的某些关键配置文件,可这些文件只有管理员权限才能操作呀,那普通用户去操作的时候,就只能无奈地看着系统弹出 “Permission denied” 报错啦。又比如在进行文件复制操作时,要是当前使用的普通用户对源文件或者目标文件夹的权限不足,像没有对目标文件夹的写入权限,那在复制文件的时候就会被系统拒绝,然后给出这个报错提示呢。其次呀,文件本身缺少可执行权限也会导致不能进行相应操作哦。比如说一个脚本文件,它所在的文件夹权限设置比较严格,而当前用户没有执行该文件的权限,那在执行这个脚本文件的时候,系统就会毫不客气地报错 “Permission denied” 啦。这时候可以通过执行 “sudo chmod -R 777 [某一目录]” 这样的命令来处理哦(这里的 “-R” 是指级联应用到目录里的所有子目录和文件,“777” 是所有用户都拥有最高权限,不过这种设置比较 “暴力” 啦,要是有需要的话,可以根据实际情况进行相应更精细的授权操作哦),给对应的文件或者文件夹赋予合适的权限,这样就能正常操作文件,避免出现这个报错啦。再者呢,文件的所有者和所属群组的权限设置也很关键哦。如果不是文件的所有者,也没有相应的权限,当试图对文件进行删除、修改等操作时,同样会收到 “Permission denied” 的提示哟。比如在多人共用的 Ubuntu 系统环境里,某个用户创建的文件,只有他自己或者被赋予了相应权限的其他用户才能进行特定操作,其他人要是贸然操作,就会被权限规则给 “拦住”,出现报错啦。

三、解决方法汇总

(一)ssh 登录报错解决

1. 修改配置文件

当遇到 ssh 登录 “Permission denied” 报错时,若因默认禁用 root 账户远程登录导致,可通过修改 ssh 配置文件来解决哦。首先,使用命令 “sudo vi /etc/ssh/sshd_config” 打开配置文件(需有相应权限操作哈),接着在文件里找到 “# PermitRootLogin prohibie-password” 这一行,将其复制粘贴后,在下一行去掉 “#” 注释,把内容修改为 “PermitRootLogin yes”,然后按下 “esc” 键,再输入 “:wq” 并回车,这样就完成了配置文件的修改与保存啦。不过要注意哦,修改完配置文件后,最好检查一下 Ubuntu 系统上的 ssh 服务有没有正常运行呀,如果没安装的话,要先执行 “sudo apt install openssh-server” 命令来安装呢。之后还得修改 root 密码,在命令行输入 “sudo passwd root”,按提示输入新密码,再次输入确认密码,看到 “passwd: password updated successfully” 提示,就说明密码设置成功咯。最后可别忘记输入 “reboot” 命令让 Ubuntu 系统重启一下呀,如此这般,再用 root 账户进行 ssh 登录,一般就能顺利登录上去啦。

2. 密钥相关处理

要是因为密钥算法不匹配等情况导致 ssh 登录报错,那可以按下面的方法来处理哦。首先,生成合适的密钥,比如可以使用 “ssh-keygen -t ed25519 -C "your_email@example.com"” 命令来生成 ed25519 密钥呀(这里的邮箱可以填写自己常用的哦,方便识别等用途)。生成密钥后,接着要把私钥添加到身份验证代理中,使用 “ssh-add” 命令就可以啦。然后呢,还需要将 “~/.ssh/id_ed25519.pub” 的文本添加到对应的用户配置的 SSH keys 中哦,像在 gerrit 或 git 用户配置里添加的话,具体操作大概是先 “cat ~/.ssh/id_ed25519.pub” 查看内容,再到相应平台点击设置按钮、SSH Public Keys 按钮,接着点击 Add key 按钮,把公钥信息添加进去并保存就行啦。此外呀,还可以在 “~/.ssh/config” 配置文件中指定认证选项,来明确指定认证文件哦(虽然不是必须的啦),例如可以这样写 “Host your.gerrit.host IdentityFile ~/.ssh/id_ed25519”,按照这些步骤处理密钥相关问题,有望解决因密钥导致的 ssh 登录 “Permission denied” 报错情况哟。

(二)文件操作报错解决

1. 权限修改

在 Ubuntu 系统里对文件操作出现 “Permission denied” 报错时,通过修改权限常常能解决问题哦。比如使用 “sudo chmod -R 777 目录名” 这样的命令呀(这里的 “-R” 表示级联应用到目录里的所有子目录和文件呢,“777” 意味着所有用户都拥有最高权限哦,但这种设置比较 “粗放” 啦,要是对权限有更精细要求的话,可以根据实际情况进行调整哈)。举个例子呀,当你向一个文件夹(比如叫 myResources)粘贴文件的时候,出现 “Permission denied” 提示,很可能就是权限没设好,这时候就可以执行 “sudo chmod -R 777 myResources” 命令来赋予权限哦,这样一般就能正常进行文件操作啦。不过在操作的时候要谨慎一些呀,避免给一些重要且敏感的系统文件夹随意赋予过高权限,以防出现安全隐患等问题呢。

2. 特定文件授权

有时候是针对特定类型文件缺少相应权限才出现 “Permission denied” 报错哦,那就要进行特定文件授权操作啦。比如对于.sh 文件,如果想让其可以被执行,就可以使用 “chmod u+x .sh” 这样的命令呢(这里 “u” 表示当前用户,“+x” 就是添加可执行权限哦,“.sh” 表示对所有.sh 后缀的文件进行操作啦)。像有个脚本文件所在的文件夹权限设置比较严格,当前用户没有执行该文件的权限,那执行的时候就