执行chmod命令导致sudo权限失效及用户账户无法访问的问题排查请求
执行chmod命令导致sudo权限失效及用户账户无法访问的问题排查请求
兄弟,你这情况我在社区里见太多次了——乱改权限尤其是递归777简直是系统杀手!先帮你拆解下你执行的两个命令,找找问题根源:
先看你执行的两个命令
第一个命令:
sudo chmod 777 . -r
这命令参数顺序完全错了!chmod的正确用法是「选项在前,然后是权限,最后才是目标文件/目录」。你把-r放在最后,shell会把它当成第二个要改权限的文件/目录,而不是你可能想写的递归选项(递归是大写的-R)。如果当时你所在的目录里刚好有个叫-r的文件/文件夹,它会被改成777;如果没有,这个命令其实会报错,但你可能没注意到错误输出。第二个命令:
sudo chmod -R 777 .
这个语法本身没问题,但致命的点在于你操作的这个目录是不是挂载了系统关键内容?
分析你遇到的两个核心问题
为什么第二次sudo不用输密码?
这个其实可能是sudo的正常行为——sudo默认会缓存你的密码5分钟左右,在缓存有效期内重复执行sudo不需要再输密码。但如果之后彻底无法用sudo甚至root都登不上,那肯定是系统核心文件的权限被搞坏了。
为什么所有用户(包括root)都没法访问了?
最可能的两个原因:
- 如果你操作的
/mnt/ssd5/Datasets/是用户主目录的挂载点(比如多个用户的/home实际挂在这里),递归设777会直接毁掉用户主目录里的敏感文件权限:- 比如
~/.ssh目录要是变成777,SSH会直接拒绝登录(因为权限太宽松,不符合安全要求); - 用户的
~/.bashrc、~/.profile这些启动文件权限太松,会导致shell登录时直接报错,根本进不去会话;
- 比如
- 更糟的情况:如果
/mnt/ssd5是根目录/的绑定挂载(比如你之前用mount --bind / /mnt/ssd5把根目录挂到这里),那递归777等于直接改了整个系统的文件权限——像/etc/passwd、/etc/shadow、/usr/bin/sudo这些核心文件权限乱了,sudo直接失效,root也没法正常登录。
现在怎么救?
你现在肯定没法正常登录服务器了,只能通过单用户模式或者救援模式启动:
- 开机时进入单用户模式(不同发行版操作不一样:比如Ubuntu是在GRUB菜单按
e,把ro改成rw init=/bin/bash;CentOS是同样按e,在末尾加init=/bin/bash); - 先把根分区挂载成可读写模式(如果没自动挂的话,执行
mount -o remount,rw /); - 先修复sudo相关的核心权限:
- 检查
/etc/sudoers的权限:必须是-r--r-----(也就是440),所有者是root:root,不对的话执行:chmod 440 /etc/sudoers && chown root:root /etc/sudoers; - 检查
/usr/bin/sudo的权限:应该是-rwsr-xr-x(4755),不对就执行:chmod 4755 /usr/bin/sudo && chown root:root /usr/bin/sudo;
- 检查
- 如果是用户主目录的问题:
- 把用户主目录权限改回700:
chmod 700 /home/你的用户名; - 修复
.ssh目录的权限:chmod 700 /home/你的用户名/.ssh && chmod 600 /home/你的用户名/.ssh/authorized_keys && chown -R 你的用户名:你的用户名 /home/你的用户名/.ssh;
- 把用户主目录权限改回700:
- 如果是整个根目录的权限都乱了——那基本没救了,要么从备份恢复,要么重装系统吧,手动修复所有文件权限几乎是不可能完成的任务。
备注:内容来源于stack exchange,提问作者Kağan Aytekin
相关产品推荐
相关产品推荐

