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能先恢复工作:
- 修复
/var/run/sshd/目录:chown root:root /var/run/sshd/ chmod 700 /var/run/sshd/ - 修复SSH日志文件:
chown root:root /var/log/secure chmod 600 /var/log/secure - 修复
sshd专属工作目录:chown sshd:sshd /var/lib/sshd/ chmod 700 /var/lib/sshd/ chown root:root /var/empty/sshd/ chmod 700 /var/empty/sshd/ - 重启
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
相关产品推荐
相关产品推荐

