Linux 系统误将 chmod 权限改成 了 000,如何恢复?
- 326 个点赞 👍
在chmod已经没有执行权限的情况下,可以使用python的chmod()方法恢复chmod的权限,代码如下:
#!/usr/bin/python # -*- coding: UTF-8 -*- import os, sys, stat # 设置文件可以通过用户组执行 os.chmod("/bin/chmod", stat.S_IXGRP)
然后使用python+这个脚本的名称来运行授权
亲身经历过一次生产服务器被人误删了/bin目录,linux系统基础的命令都无法执行了,登录都不行了,还好我的ssh连接还没断开,就从其他服务器上复制了整个/bin目录上传了上去,然后再通过上述脚本先给chmod赋权,再使用chmod给/bin授权,故障得以解决。
以下是一些和权限相关的python方法
os.chmod(path, mode)
其中mode字段
stat.S_IXOTH: 其他用户有执行权0o001 stat.S_IWOTH: 其他用户有写权限0o002 stat.S_IROTH: 其他用户有读权限0o004 stat.S_IRWXO: 其他用户有全部权限(权限掩码)0o007 stat.S_IXGRP: 组用户有执行权限0o010 stat.S_IWGRP: 组用户有写权限0o020 stat.S_IRGRP: 组用户有读权限0o040 stat.S_IRWXG: 组用户有全部权限(权限掩码)0o070 stat.S_IXUSR: 拥有者具有执行权限0o100 stat.S_IWUSR: 拥有者具有写权限0o200 stat.S_IRUSR: 拥有者具有读权限0o400 stat.S_IRWXU: 拥有者有全部权限(权限掩码)0o700 stat.S_ISVTX: 目录里文件目录只有拥有者才可删除更改0o1000 stat.S_ISGID: 执行此文件其进程有效组为文件所在组0o2000 stat.S_ISUID: 执行此文件其进程有效用户为文件所有者0o4000
发布于 2023-10-19 16:23・IP 属地北京查看全文>>
看不到的内找我看 - 265 个点赞 👍
sudo busybox chmod 755 chmod
busybox 是 Linux 标配,含有大多数主流 Linux 命令,你可以把它的存在当作救急备份。简单功能都可以调用 busybox 完成。这也就意味着很多原始命令出故障的情况下都可以用 busybox 暂时替代。
没有 busybox 的话,记住读写权限对 root 用户不限制。所以这个文件单纯的只是没有了执行权限而已。简单思路是把其内容复制到一个可执行文件中。或者,用其它的改属性办法(比如脚本语言,或者 install 命令等等)。不过这些方法都比不上 busybox,因为你作为运维,应该确保 busybox 可用。
编辑于 2023-10-20 11:43・IP 属地湖北查看全文>>
pansz - 258 个点赞 👍
没有 chmod 程序不是还有 chmod() 系统调用么,直接写个 C 代码改一下就完事了:
#include <sys/stat.h> int main() { chmod("/usr/bin/chmod", 0755); }
编辑于 2023-11-14 10:31・IP 属地北京查看全文>>
Timothy Liu - 45 个点赞 👍
在现代的 Linux 系统上,应该可以简单粗暴的直接运行动态链接加载器 (也许需要稍微修改下面示例中 ld-linux.so 的文件名)。
/lib64/ld-linux-x86-64.so.2 /bin/chmod 0755 /bin/chmod
以上内容假设……
- GNU/Linux 系统
- 采用 GNU C Library (其它 libc 的话,得修改 ld-linux.so 的文件名)
- /bin/chmod 是采用动态链接的
- x86-64 (其它体系结构的话,得修改 ld-linux.so 的文件名,比如 /lib/ld-linux-aarch64.so.1)
重点。这方法不需要外部依赖 (busybox、Perl、Python、cp、cat、dd、install、C编译器、安装介质、别的机器……)。动态链接加载器是原本就依赖的;没有动态链接加载器的话,chmod 是跑不动的。
编辑于 2023-11-14 23:49・IP 属地北京查看全文>>
泥偶 - 0 个点赞 👍
测试一下知乎上回答的解决方案。
首先是 BusyBox 方案,系统上确实有 BusyBox,可以用 BusyBox 修复。
找一个有执行权限的文件把 chmod 的内容复制进去也是可以的,这个时候拿其他系统工具临时牺牲一下也不是不行:
libc、python、install 等方法也都是可行的
其实用几乎任何方式,本质上都是调用了 GNU C Library 里的 chmod 函数,具体可以去读 glibc 的 14.9.7 章。
发布于 2023-10-20 15:44・IP 属地美国查看全文>>
Extrawdw