I accidentally deleted the
sudoers file on Mac OS X; is there any way to recover it?
And once you've recovered it, how do you set it to mode 0440?
If I understand your problem correctly, then currently you don't have sudoers and you are trying to do sudo and it's not working. In this case, to get sudo working you can do the following :
- Create sudoers file in your home folder. You can find default content here sudoers
- Open the “/etc” folder in Finder (“Go” -> “Go to Folder…”).
- Now copy sudoers file from home folder's to /etc folder via Finder.
- Prompt will come asking for password.
- Enter correct password and you are done.
To check sudo is running fine
cd /etc and
sudo vim sudoers. You should able to view sudoers file via vim editor. Any read/write operation in /etc would require the sudo command.
I know this is a bit surprising that even after not having sudoers, via UI we can do operations in /etc. But it worked for me :)
Enable the root user using system preferences, and then create /etc/sudoers while logged in as the root user using
touch /etc/sudoers; chmod 440 /etc/sudoers
Note: Since the command is run as root in this case, and the group id of
/etc is 0, it should by default be owned by the correct user and group after re-creation, but if for some reason it isn't, run
chown root:wheel /etc/sudoers
After you have created
/etc/sudoers use visudo to insert this code into it:
# sudoers file. # # This file MUST be edited with the 'visudo' command as root. # Failure to use 'visudo' may result in syntax or file permission errors # that prevent sudo from running. # # See the sudoers man page for the details on how to write a sudoers file. # # Host alias specification # User alias specification # Cmnd alias specification # Defaults specification Defaults env_reset Defaults env_keep += "BLOCKSIZE" Defaults env_keep += "COLORFGBG COLORTERM" Defaults env_keep += "__CF_USER_TEXT_ENCODING" Defaults env_keep += "CHARSET LANG LANGUAGE LC_ALL LC_COLLATE LC_CTYPE" Defaults env_keep += "LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME" Defaults env_keep += "LINES COLUMNS" Defaults env_keep += "LSCOLORS" Defaults env_keep += "SSH_AUTH_SOCK" Defaults env_keep += "TZ" Defaults env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY" Defaults env_keep += "EDITOR VISUAL" # Runas alias specification # User privilege specification root ALL=(ALL) ALL %admin ALL=(ALL) ALL # Uncomment to allow people in group wheel to run all commands # %wheel ALL=(ALL) ALL # Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL # Samples # %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom # %users localhost=/sbin/shutdown -h now ALL ALL=(ALL) NOPASSWD:/opt/dplat/bin/Revision/CMUpdatePackage/Installer.app/Contents/MacOS/I nstaller ALL ALL=(ALL) NOPASSWD:/opt/dplat/bin/UpdatePackageInstaller.app/Contents/MacOS/UpdatePackage Installer
If you aren't an admin, you can boot the system into single-user-mode instead (if you don't know how to do this, just google it) and run:
mount -uw /
and you will be in the terminal with root privileges, and you will be able to run the above commands to set up
I'm assuming you are trying to run a
sudo command and it's giving you an error that
/etc/sudoers does not have the correct permissions?
If you have previously granted your account
Admin status, you should be able to fix the permissions through the GUI. Open the “/etc” folder in Finder (“Go” -> “Go to Folder…”), then open the
sudoers file properties. Click the lock. Grant the
read-only, and the
no access. The permissions should now be correct.
If you did not put yourself in the
admin group, you will need to reboot OSX into single user mode and perform the command
chmod 0440 /etc/sudoers.
The answers above cover the default contents of the file, how to move it into place with Finder and change it's permissions. However, sudo will complain unless the owner of the sudoers file is root. The only way to change the owner without sudo is via this command:
osascript -e 'do shell script "chown root:wheel /etc/sudoers" with administrator privileges'
I created a /tmp/sudoers file with content in John Militer answer and ran a variation of tmm1 command.
osascript -e 'do shell script "cat /tmp/sudoers > /etc/sudoers; chown root:wheel /etc/sudoers" with administrator privileges'