找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4439

积分

0

好友

580

主题
发表于 3 小时前 | 查看: 4| 回复: 0

前两天有个哥们在群里发了个救命信号,说手滑把 chmod 命令的权限改成了 000,整个人都麻了。
这事儿听起来像段子,但真遇上了,那可是要命的操作——chmod 没了执行权限,你就没法再用 chmod 去改权限,这不就成死循环了吗?

Linux 社区求助帖:chmod 权限误改 000 如何恢复

为什么会出现这种致命操作

说白了,就是手快脑子没跟上。很多人在服务器上批量改权限的时候,习惯性地敲 chmod -R 000 /some/path,结果路径没写对,或者直接手抖把 /usr/bin/chmod 给改了。
还有一种情况是写脚本的时候,变量没赋值好,导致 chmod 把自己给废了。
这种事儿在凌晨三点加班改配置的时候特别容易发生,困得眼睛都睁不开,手指头在键盘上乱飞,等反应过来的时候,chmod 已经躺平了。
更要命的是,很多公司的生产环境还没有快照备份,这一下就真的是叫天天不应了。

几种实战恢复方案

方案一:用 Perl 救场

Linux 系统里一般都自带 Perl,而 Perl 可以直接调用系统调用来修改文件权限。
这招算是最快的:

perl -e 'chmod 0755, "/usr/bin/chmod"'

一行命令搞定,chmod 立马复活。
这个方法的原理是绕过 chmod 命令本身,直接通过 Perl 的 chmod 函数去操作文件系统。

方案二:Python 也能顶上

如果服务器上有 Python(现在哪台服务器没 Python 啊),那就更简单了:

python -c "import os; os.chmod('/usr/bin/chmod', 0o755)"

或者 Python 3:

python3 -c "import os; os.chmod('/usr/bin/chmod', 0o755)"

这个方法和 Perl 一个道理,都是通过编程语言的系统调用接口来改权限。

方案三:从其他机器拷贝

如果你有另一台相同系统的机器,可以直接把正常的 chmod 拷过来:

scp user@other-server:/usr/bin/chmod /tmp/chmod
/tmp/chmod 755 /usr/bin/chmod

注意要先拷到 /tmp 目录,因为 /tmp 一般都有执行权限。
这招适合有多台服务器的场景,但要确保系统版本一致,不然可能会有兼容性问题。

方案四:用 busybox 救命

有些精简系统会装 busybox,它自带了一套独立的工具集:

busybox chmod 755 /usr/bin/chmod

busybox 就像是 Linux 工具箱的备胎,关键时刻能救命。

方案五:LD_PRELOAD 黑科技

这个方法比较硬核,适合实在没办法的情况。
可以写个共享库来劫持系统调用:

// fix_chmod.c
#include <sys/stat.h>
int chmod(const char *path, mode_t mode) {
    return syscall(90, "/usr/bin/chmod", 0755);
}

编译后用 LD_PRELOAD 加载,但这个方法太复杂,一般不推荐。

方案六:LiveCD 大法

实在不行就用 LiveCD 或 U盘启动盘进系统,挂载硬盘后直接改:

mount /dev/sda1 /mnt
chmod 755 /mnt/usr/bin/chmod

这招最稳,但需要物理接触服务器,云服务器就比较麻烦了。

如何避免再次踩坑

这种低级错误其实完全可以避免。  

首先,操作生产环境之前一定要先在测试环境验证,别直接在线上瞎搞。  

其次,写脚本的时候多加几层检查,尤其是涉及到权限修改的操作,最好加个二次确认。  

还有就是养成备份的习惯,不管是快照还是定期备份,关键时刻能救命。很多人觉得备份麻烦,但真出事了才知道,那点时间成本根本不算什么。  

另外,操作敏感命令的时候,可以给自己设置个别名,比如把 chmod -R 改成需要确认的版本,或者干脆用 chmod -c 让它输出修改信息,这样至少能及时发现问题。  

最重要的是,别在状态不好的时候操作服务器。困了就睡觉,别硬撑着改配置,手滑一次可能就是一个通宵的代价。  

更多运维实战案例,可以来 云栈社区 一起探讨。




上一篇:聊聊Intel的Clear Linux:性能怪兽还是劝退狂魔?
下一篇:Powershell比Linux shell好得多?如何从实际场景反驳
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-24 23:03 , Processed in 0.697374 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表