Restore Executable Permission To Chmod Command In Linux

栏目: IT技术 · 发布时间: 3年前

内容简介:I came across an“I will copy the chmod binary from other systems?”, you might reply. Well, you are given only one system. So you can’t copy the chmod binary from other systems. You may reply again,Please don’t try to remove execute permission of chmod comm

I came across an interesting discussion thread on Twitter. It is about an Interview question. The question is – What do you do if the executable permission of Chmod command is removed accidentally? As you may know, the chmod (stands for Ch ange mod e) command is used to set or change the access permissions of a file or directory in Unix-like systems. So if the executable permission of chmod is removed, you can’t assign the permissions to any programs, including the chmod command itself. You are sitting in an interview panel and the interviewer just asked this question. So, how do you restore executable permission to chmod command in Linux?

“I will copy the chmod binary from other systems?”, you might reply. Well, you are given only one system. So you can’t copy the chmod binary from other systems. You may reply again, “I’ll set the execute bit from perl.”. The interviewer says “There are no interpreters on your machine.”. There is also no Internet/Phone connection, hence you can’t contact anyone for help either. In such a dire situation, how do you restore the executable permission of Chmod command? If you already know the answer, a big thumbs up to your intelligence. If you are not a critical thinker (like me!), please read on.

Warning:

Please don’t try to remove execute permission of chmod command in a production system. Try this in a VM or test machine. It is just for educational purpose.

What do you do if you accidentally removed the executable permission of Chmod command?

Let us say you accidentally run the following command:

# chmod -x $(which chmod)

Here, the -x flag will remove the executable permission of the given program. In our case, it is chmod.

You are very curious and you really don’t know what will this command do. Now you lost the executable permission of chmod command. There is no way to restore the chmod executable permission again. If you try to set permission the following command:

# chmod +x $(which chmod)

You will get the following error message:

bash: /usr/bin/chmod: Permission denied

Restore Executable Permission To Chmod Command In Linux

Even if you log out and try from other sudo users, you can’t assign permissions using chmod command:

<strong>$ sudo chmod +x $(which chmod)</strong>
sudo: chmod: command not found

How do you restore the chmod permissions back to its original? Well, it is easier than you think.

Restore Executable Permission To Chmod Command In Linux

There are a few ways to restore the execute permission to chmod. Here, I have given 7 methods.

Method 1 – Copy contents of chmod binary to other working binaries

Please remember we removed the executable permission of chmod command only, but not other commands’ permission. Right? Yes! The other commands still have the executable permission. So, we can fix this issue by copying the contents of the chmod command to any other executable command, for example “mkdir”, and restore the chmod executable permission back to its original.

Before copying, let us take a backup of mkdir command using command:

# cp /usr/bin/mkdir /usr/bin/mkdir.bak

Next copy the contents of /usr/bin/chmod to /usr/chmod/mkdir using “cat” command:

# cat /usr/bin/chmod > /usr/bin/mkdir

Now, the mkdir command has became as chmod command (because we copied the contents of chmod to mkdir binary).

And then, restore the executable permission of actual chmod binary using command:

# mkdir +x /usr/bin/chmod

Alternatively, you can copy the contents of mkdir back to the chmod binary:

# mv /usr/bin/mkdir /usr/bin/chmod

Finally, restore the original mkdir command from backup:

# mv /usr/bin/mkdir.bak /usr/bin/mkdir

Restore Executable Permission To Chmod Command In Linux

Done! We successfully restored the execute permission to chmod command.

Check if the executable permissions are restored with “ls” command:

# ls -l /usr/bin/chmod

Or,

# ls -l $(which chmod)
<strong>-r-xr-xr-x</strong> 1 root root 63864 May 27 07:16 /usr/bin/chmod

Note the letters “x” in the above output. It indicates execute permission.

You can also verify it by assigning executable permissions to any other programs with chmod like below:

# chmod +x ostechnix.sh
# ls -l
total 0
<strong>-rwxr-xr-x</strong> 1 root root 0 May 27 07:43 ostechnix.sh

This is the easiest method since you don’t have to memorize anything. We simply copied the contents of chmod to other commands using cat command and then restored the execute permission.

I tested it in Ubuntu 20.04 server edition. In other Linux distributions, the chmod binary file may available under /bin/ directory. You can find the chmod binary location using the following command:

$ which chmod

This is, however, not only the way. I did a quick Google search and found a few more methods. You may need to memorize the following commands.

Method 2 – Using cp command

This another way to restore executable permission to chmod.

In this method, we use “cp” command to copy the attributes:

# cp --attributes-only --preserve=mode /proc/self/exe /usr/bin/chmod

Method 3 – using GNU linker/loader (ld)

In this method, you can run the “ld” loader directly, and pass it the command you want to run like below:

# /lib64/ld-linux-x86-64.so.2 /usr/bin/chmod +x /usr/bin/chmod

If you use 32 bit systems, the command would be:

$ /lib/ld-linux.so /usr/bin/chmod +x /usr/bin/chmod

The path to loader might very depending upon the Linux distribution you use. The above commands are for Ubuntu and its derivatives. In other distros, the path might be different:

# /lib/libc.musl-x86_64.so.1 /bin/chmod +x /bin/chmod

Method 4 – Using setfacl

We can restore chmod executable permissions using “setfacl” command.

First, modify ACL of a chmod binary file for user with read and execute permissions:

# setfacl -m u::rx /usr/bin/chmod

Then, restore chmod permissions back to its original ones:

# chmod +x $(which chmod)

Finally, remove all ACL entries of chmod. This is optional.

# setfacl -b /usr/bin/chmod

If setfacl command is not available, install “acl” package. For example, run the following command to install acl on Debian, Ubuntu and its derivatives:

# apt install acl

Method 5 – Using rsync

Rsync is not just for copy or backup files and directories between systems. It can also be used to assign permissions for files as well.

First, let us copy the chmod binary file to /tmp location while assigning executable permissions to all, i.e. users, groups and others:

# rsync /usr/bin/chmod /tmp/chmod --chmod=ugo+x

Next, check if the executable permission is assigned to chmod:

$ ls -l /tmp/chmod

Sample output:

-r-xr-xr-x 1 root root 63864 May 27 10:01 /tmp/chmod

If the permissions are OK, simply overwrite the original file with /tmp/chmod file:

# mv /tmp/chmod /usr/bin

Method 6 – Using Busybox

Some recent Linux distributions have “Busybox” installed by default. From the Busybox man page,

BusyBox combines tiny versions of many common UNIX utilities into a single small executable. It provides minimalist replacements for most of the utilities you usually find in GNU coreutils, util-linux, etc. The utilities in BusyBox generally have fewer options than their full-featured GNU cousins; however, the options that are included provide the expected functionality and behave very much like their GNU counterparts.

To restore Chmod execute permission with busybox, run:

# busybox chmod +x /usr/bin/chmod

Method 7 – Using Perl

Just in case Perl is available on your system, you can fix Chmod’s execute permissions with command:

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

As you can see, this is a trivial problem which can be easily resolved by smart Linux users. If you’re a budding or intermediate Linux user, you probably never figure it out. These kind of questions might be asked to check the interviewee’s presence of mind and how he thinks out of the box. Thanks to the aforementioned Twitter thread, I learned something useful today. Hope it is useful to you too.


以上所述就是小编给大家介绍的《Restore Executable Permission To Chmod Command In Linux》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

鳥哥的Linux私房菜(第四版)

鳥哥的Linux私房菜(第四版)

鳥哥 / 碁峰資訊股份有限公司 / 2016-1-25 / TWD 980.00

本書前三版均蟬聯電腦專業書籍Linux暢銷排行榜Top1,為地表最暢銷的Linux中文書籍! 您是有意學習Linux的小菜鳥,卻不知如何下手?您是遨遊Linux的老鳥,想要一本資料豐富的工具書?本書絕對是最佳選擇! ※鳥哥傾囊相授,內容由淺入深 書中包含了鳥哥從完全不懂Linux到現在的所有歷程,鳥哥將這幾年來的所知所學傾囊相授,以最淺顯易懂的文字帶領您進入Linux的世界。 ......一起来看看 《鳥哥的Linux私房菜(第四版)》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具