在Linux中还原Chmod命令的可执行权限
如果我们不小心删除了Chmod命令的可执行权限,我们会怎么做?
让我们说你意外运行以下命令:
# chmod -x $(which chmod)
其中-X标志将删除给定程序的可执行许可。
在我们的情况下,它是CHMOD。
你很好奇,你真的不知道这个命令会做什么。
现在我们丢失了Chmod命令的可执行权限。
无法再次恢复CHMod可执行权限。
如果我们尝试设置以下命令:
# chmod +x $(which chmod)
我们将收到以下错误消息:
bash: /usr/bin/chmod: Permission denied
即使我们从其他sudo用户退出并尝试,我们也无法使用chmod命令分配权限:
$sudo chmod +x $(which chmod) sudo: chmod: command not found
如何将CHMOD权限恢复为原件?
好吧,它比你想象的更容易。
在Linux中还原Chmod命令的可执行权限
有几种方法可以将执行权限恢复为chmod。
其中我给了7种方法。
方法1 - 将CHMOD二进制文件的内容复制到其他工作二进制文件
请记住,我们删除了Chmod命令的可执行权限,但不是其他命令权限。
正确的?
是的!其他命令仍然具有可执行权限。
因此,我们可以通过将chmod命令的内容复制到任何其他可执行命令,例如"mkdir",并将CHMod可执行权限还原回其原件来修复此问题。
在复制之前,让我们使用命令备份mkdir命令:
# cp /usr/bin/mkdir /usr/bin/mkdir.bak
接下来使用"cat"命令将/usr/bin/chmod的内容复制/usr/bin/chmod到/usr/chmod/mkdir:
# cat /usr/bin/chmod > /usr/bin/mkdir
现在,MKDIR命令已成为CHMOD命令(因为我们将CHMOD的内容复制到MKDIR二进制文件)。
然后,使用命令恢复实际Chmod二进制二进制的可执行权限:
# mkdir +x /usr/bin/chmod
或者,我们可以将Mkdir的内容复制回Chmod二进制文件:
# mv /usr/bin/mkdir /usr/bin/chmod
最后,恢复备份的原始Mkdir命令:
# mv /usr/bin/mkdir.bak /usr/bin/mkdir
完毕!我们成功将执行权限恢复为chmod命令。
检查可执行权限是否恢复"ls"命令:
# ls -l /usr/bin/chmod
或者,
# ls -l $(which chmod) -r-xr-xr-x 1 root root 63864 Jan 27 07:16 /usr/bin/chmod
请注意上述输出中的字母"x"。
它表示执行权限。
我们还可以通过将可执行权限分配给具有以下内容的CHMOD的任何其他程序来验证:
# chmod +x theitroad.sh
# ls -l total 0 -rwxr-xr-x 1 root root 0 Jan 27 07:43 theitroad.sh
这是最简单的方法,因为我们不必记住任何内容。
我们只使用CAT命令将CHMOD的内容复制到其他命令,然后恢复执行权限。
我在Ubuntu 20.04服务器版中测试了它。
在其他Linux发行版中,CHMod二进制文件可以在/bin /目录下可用。
我们可以使用以下命令找到CHMod二进制位置:
$which chmod
方法2 - 使用CP命令
这是恢复Chmod可执行权限的另一种方法。
在此方法中,我们使用"cp"命令复制属性:
# cp --attributes-only --preserve=mode /proc/self/exe /usr/bin/chmod
方法3 - 使用GNU链接器/装载机(LD)
在此方法中,我们可以直接运行"LD"加载程序,并将其传递我们想要运行的命令如下:
# /lib64/ld-linux-x86-64.so.2 /usr/bin/chmod +x /usr/bin/chmod
如果使用32位系统,命令将是:
$/lib/ld-linux.so /usr/bin/chmod +x /usr/bin/chmod
加载器的路径可能非常取决于我们使用的Linux分发。
上述命令适用于Ubuntu及其衍生物。
在其他发行版中,路径可能不同:
# /lib/libc.musl-x86_64.so.1 /bin/chmod +x /bin/chmod
方法4 - 使用SetFacl
我们可以使用"setfacl"命令恢复Chmod可执行权限。
首先,为具有读取和执行权限的用户修改CHMOD二进制文件的ACL:
# setfacl -m u::rx /usr/bin/chmod
然后,将Chmod权限恢复回其原始文件:
# chmod +x $(which chmod)
最后,删除CHMOD的所有ACL条目。
这是可选的。
# setfacl -b /usr/bin/chmod
如果setfacl命令不可用,请安装"ACL"包。
例如,运行以下命令以在Debian,Ubuntu及其衍生产品上安装ACL:
# apt install acl
方法5 - 使用rsync
rsync不仅适用于系统之间的复制或者备份文件和目录。
它也可用于为文件分配权限。
首先,让我们将CHMod二进制文件复制到/TMP位置,同时为所有人分配可执行权限,例如:用户,组和其他人:
# rsync /usr/bin/chmod /tmp/chmod --chmod=ugo+x
接下来,检查可执行权限是否已分配给CHMOD:
$ls -l /tmp/chmod
示例输出:
-r-xr-xr-x 1 root root 63864 Jan 27 10:01 /tmp/chmod
如果权限可以确定,只需用/tmp/chmod文件覆盖原始文件:
# mv /tmp/chmod /usr/bin
方法6 - 使用BusyBox
最近的一些Linux发行版默认安装了"BusyBox"。
从BusyBox手册页,
BusyBox将许多常见UNIX实用程序的微小版本组合成一个小型可执行文件。
它为我们通常在GNU Coreutils,Util-Linux等中找到的大多数公用设施提供最少的替代品。
Busybox中的实用程序通常具有比其全功能GNU表兄弟更少的选项;但是,包括的选项提供了预期的功能,并表现得非常类似于他们的GNU对应物。
要恢复Chmod执行BusyBox的权限,运行:
# busybox chmod +x /usr/bin/chmod
方法7 - 使用Perl
只需在系统上使用Perl,我们可以使用命令修复Chmod的执行权限:
# perl -e 'chmod 0755, "/usr/bin/chmod"'