How to solve this error `sudo: /usr/local/bin/sudo must be owned by uid 0 and have the setuid bit set` without reinstalling ubuntu?

5,210

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.

Share:
5,210

Related videos on Youtube

ByteByByte
Author by

ByteByByte

Updated on September 18, 2022

Comments

  • ByteByByte
    ByteByByte over 1 year

    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!

  • Terrance
    Terrance over 5 years
    Pretty good thinking! Back when I wrote my answer I didn't even know about pkexec. I sure do now! Great answer!
  • ByteByByte
    ByteByByte over 5 years
    @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.
  • xiota
    xiota over 5 years
    While you are fixing sudo, you probably need to fix pkexec too.
  • ByteByByte
    ByteByByte over 5 years
    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)
  • xiota
    xiota over 5 years
    probably whatever you did did too much damage, and you'll need to reinstall.
  • Paul Jurczak
    Paul Jurczak almost 4 years
    Thank you. pkexec bash is so much better than rebooting in maintenance mode!