You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS7虚拟机误执行chown -R <user> /var/后SSH无法连接求助

误执行chown -R <user> /var/导致SSH无法连接的问题分析与解决方法

问题原因

你把整个/var/目录递归改成普通用户权限的操作直接搞崩了SSH服务的运行环境。CentOS里/var/下存放了大量系统服务依赖的关键文件和目录:

  • SSH服务(sshd)需要读写/var/run/sshd/目录下的PID文件来维持运行状态,这个目录原本属于root:root;
  • sshd还要往/var/log/secure写入登录日志,这个文件的属主也是root;
  • 另外/var/lib/sshd/、/var/empty/sshd/这些目录是sshd的专属工作目录,分别属于sshd:sshd和root:root。

当这些资源的属主被改成普通用户后,sshd进程(通常以root或sshd用户身份运行)没有权限访问它们,要么直接启动失败,要么运行中崩溃,自然就没法接受你的SSH连接了。

解决步骤

因为你没法访问物理机,只能通过虚拟机的远程控制台(比如云服务商提供的Web VNC控制台、虚拟化平台的控制台登录入口)来操作,这是唯一能绕过SSH直接登录系统的方式。

步骤1:通过远程控制台登录系统

用root账号登录控制台——本地控制台登录不受SSH服务状态影响,只要系统能正常启动,root账号就能登录。

步骤2:先恢复SSH服务的关键权限

先把sshd依赖的几个核心目录/文件权限改回来,让SSH能先恢复工作:

  1. 修复/var/run/sshd/目录:
    chown root:root /var/run/sshd/
    chmod 700 /var/run/sshd/
    
  2. 修复SSH日志文件:
    chown root:root /var/log/secure
    chmod 600 /var/log/secure
    
  3. 修复sshd专属工作目录:
    chown sshd:sshd /var/lib/sshd/
    chmod 700 /var/lib/sshd/
    chown root:root /var/empty/sshd/
    chmod 700 /var/empty/sshd/
    
  4. 重启sshd服务:
    systemctl restart sshd
    

这时候你可以尝试用SSH重新连接虚拟机,应该能成功了。

步骤3:彻底恢复/var/目录的系统默认权限

上面的操作只是让SSH恢复,但/var/下还有很多其他系统服务(比如日志服务rsyslog、定时任务crond)的文件权限也被改了,长期运行会出问题。最稳妥的方式是用rpm命令修复所有系统包的文件属主和权限:

执行以下命令批量修复(会遍历所有已安装的RPM包,耗时可能较长,但能彻底恢复默认权限):

for pkg in $(rpm -qa); do
    rpm --setperms $pkg
    rpm --setugids $pkg
done

执行完后,重启一下系统确保所有服务都能正常运行:

reboot

后续建议

以后修改目录权限一定要谨慎,尤其是系统目录。如果只是想让普通用户能编辑/var/www/,正确的做法是:

# 把目录属主改成你的用户,同时保留apache组权限
chown -R <your-user>:apache /var/www/
# 或者设置组用户的读写权限
chmod -R g+rw /var/www/

内容的提问来源于stack exchange,提问作者firion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:33:54