While following the Linux Upskill challenge, I came across some unexpected behaviour: issuing sudo <command>
didn’t prompt me for a password. No problem I thought; I simply need to set a password for my account. While I’m thinking of it, let’s update the password for root too, after all our ec2 instance isn’t using a firewall yet.
su - root
passwd root
passwd ubuntu
exit
Passwords duly set, the password wasn’t prompted:
Let’s check I’m in the sudo
group:
So there must be some config that means I’m not prompted for a password. Let’s look at the etc/sudoers
file:
cat /etc/sudoers
There’s nothing in there that is obviously preventing the password prompt. This question on Stack Overflow suggests that the problem may be a file in /etc/sudoers.d
. Let’s look for all instance of NOPASSWD
grep -rl NOPASSWD /etc/sudoers.d
Output
/etc/sudoers.d/90-cloud-init-users
Let’s look at the file (note the lazy history expansion):
more $(!!)
Output
# User rules for ubuntu
ubuntu ALL=(ALL) NOPASSWD:ALL
This line means I’ll never be prompted for a password. Let’s fix that by commenting it out.
su - root
vi /etc/sudoers.d/90-cloud-init-users
Oh! The file isn’t writeable. I could use visudo
to edit it, but that is defaulting to use nano
. Ugh, no thanks.
Instead, let’s check, and fix the file permissions
ls -l /etc/sudoers.d/90-cloud-init-users
It’s owned by root, but root cannot write to it. Let’s temporarily make the file writeable:
chmod 640 /etc/sudoers.d/90-cloud-init-users
Now we can edit it, and return the permissions
vi /etc/sudoers.d/90-cloud-init-users
chmod 440 /etc/sudoers.d/90-cloud-init-users
exit # exit the root acct, we don't need it any more
and test that we are being prompted for the password correctly:
sudo apt update