2

TLDR: I am running Ubuntu 18.04 with i3 and I messed up my permissions. Whenever I run a command with sudo, I get this error message, sudo: /usr/local/bin/sudo must be owned by uid 0 and have the setuid bit set. I am trying to figure out if I need to fully re-install Ubuntu or if this can be fixed in a less drastic way.

What had happened was: I was trying to upgrade my npm version with nvm and the nvm command was not being recognized. I followed this stackoverflow post's instructions https://stackoverflow.com/questions/21215059/cant-use-nvm-from-root-or-sudo to copy the version of node I had active via nvm into the /usr/local. I ran the below. (Yes, I realize now that I should have investigated this series of commands before running them.)

n=$(which node); \
n=${n%/bin/node}; \
chmod -R 755 $n/bin/*; \
sudo cp -r $n/{bin,lib,share} /usr/local

I then got tons of errors saying chmod: changing permissions of '/usr/bin/*': Operation not permitted

After that I ran sudo nvm install-latest-npm and got the same error as I had before, sudo: nvm: command not found.

Then I tried running another command with sudo, and got the error sudo: /usr/local/bin/sudo must be owned by uid 0 and have the setuid bit set. I now get this error whenever I run anything with sudo.

I think this problem was caused by me running chmod -R 755 $n/bin/*; \ but I'm confused because the error message said permissions for /usr/bin were not changed.
I have a two-part question: 1) What caused this error? Am I correct that it was caused by the chmod -R command? 2) Can I fix this without completely reinstalling ubuntu? If so, how?

For context, I already read these two questions sudo: /usr/lib/sudo/sudoers.so must be owned by uid 0 and this /usr/bin/sudo must be owned by uid 0 and have the setuid bit set. However, I am not sure if the advice from the first question's answer applies to this situation, because the error message I receive is not referring specifically to /usr/lib/sudo/sudoers.so.

Thanks for reading!

2

1 Answer 1

2

must be owned by uid 0 and have the setuid bit set

  1. Check the current owner and permissions with ls -l /usr/bin/sudo. It should similar to:

    -rwsr-xr-x 1 root root 157192 2018-08-23 10:36:40 /usr/bin/sudo

  2. Run pkexec bash in a terminal to get a shell with root permissions.

  3. Fix ownership of the file:

    chown root:root /usr/bin/sudo
    
  4. Set the setuid bit:

    chmod u+s /usr/bin/sudo
    
  5. sudo should now be available for you to make further repairs.

6
  • Pretty good thinking! Back when I wrote my answer I didn't even know about pkexec. I sure do now! Great answer!
    – Terrance
    Jan 9, 2019 at 14:28
  • @xiota Thank you for this very thorough response. When I checked the current owner and permissions, it was extremely similar to what you showed, -rwsr-xr-x 1 root root 149080 Jan 17 2018 /usr/bin/sudo. However, when I ran pkexec bash, I got an error message, pkexec must be setuid root. Since I wasn't able to get a shell with root permissions, I am going to boot up in recovery mode and run the suggested commands from a shell in root mode there. I will let you know if that approach works.
    – ByteByByte
    Jan 10, 2019 at 3:22
  • While you are fixing sudo, you probably need to fix pkexec too.
    – xiota
    Jan 10, 2019 at 3:28
  • I ran the commands you listed from a root shell in recovery mode. Unfortunately, I still can't use sudo or pkexec outside of recovery mode, and I get the same error messages as I did previously. What should I do to fix pkexec? (I tried googling this but didn't find anything helpful)
    – ByteByByte
    Jan 10, 2019 at 3:54
  • probably whatever you did did too much damage, and you'll need to reinstall.
    – xiota
    Jan 10, 2019 at 4:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.