Sudo: Difference between revisions

From Leo's Notes
This page was last edited on 12 September 2019, at 03:35.
m Text replacement - "Category:Linux{{Navbox Linux}}" to "{{Navbox Linux}}Category:Linux"
→sudo: sorry, you must have a tty to run sudo: WP content http://leo.steamr.com/2011/05/sudo-sorry-you-must-have-a-tty-to-run-sudo/
Line 38: Line 38:


=== sudo: sorry, you must have a tty to run sudo ===
=== sudo: sorry, you must have a tty to run sudo ===
If you get the error while trying to run {{code|sudo}} through a script or a non-interactive shell:
{{highlight|lang=text|code=
sudo: sorry, you must have a tty to run sudo
}}
Ensure that you do not require a TTY in your {{code|/etc/sudoers}} configuration. Either comment out or use {{code|!requiretty}}.
{{highlight|lang=text|code=
## In /etc/sudoers
## From
Defaults  requiretty
## To one of:
Defaults    !requiretty
# Defaults  requiretty
}}


Ensure that you do not require tty. Either comment out or use !requiretty .
'''A one-liner to fix this:'''
{{highlight|lang=terminal|code=
{{highlight|lang=terminal|code=
# cat /etc/sudoers
# sed -i s'/Defaults requiretty/#Defaults requiretty'/g /etc/sudoers
Defaults  ! requiretty
}}
}}


If you just want to run a command as another user, you could also try {{code|su}} instead. For example:
As a side note, if you just want to run a command as another user, you could also try {{code|su}} instead. For example:
{{highlight|lang=terminal|code=
{{highlight|lang=terminal|code=
# su $username -c 'whoami'
# su $username -c 'whoami'

Revision as of 03:35, 12 September 2019

Overview

In a nutshell, sudo permissions are defined in /etc/sudoers and /etc/sudoers.d/. Permissions are defined like so:

%groupname workstation=/bin/command
username workstation=/bin/command
username workstation=(run-as user) /bin/command

Replace any of the above with ALL to have it match anyone. eg:

ALL ALL=ALL

You can use NOPASSWD: /bin/command to have it not prompt for the user's password.

You can verify whether your changes worked by listing sudo access:

# sudo -l

Configure sudo to include /etc/sudoers.d/

Additional sudo configs can be placed in /etc/sudoers.d/. Files placed here must have the permissions set to 0440.

For example:

# cd /etc/sudoers.d
# echo "gandalf ALL=(root) NOPASSWD: /usr/sbin/dmidecode" > run_dmidecode
# chmod 0440 run_dmidecode

Ensure the #includedir directive is defined in /etc/sudoers.

Troubleshooting

sudo: sorry, you must have a tty to run sudo

If you get the error while trying to run sudo through a script or a non-interactive shell:

sudo: sorry, you must have a tty to run sudo

Ensure that you do not require a TTY in your /etc/sudoers configuration. Either comment out or use !requiretty.

## In /etc/sudoers
## From 
Defaults   requiretty

## To one of:
Defaults     !requiretty
# Defaults   requiretty

A one-liner to fix this:

# sed -i s'/Defaults requiretty/#Defaults requiretty'/g /etc/sudoers

As a side note, if you just want to run a command as another user, you could also try su instead. For example:

# su $username -c 'whoami'

sudo: no tty present and no askpass program specified

make sure you have NOPASSWD set in your sudoers file. Eg. The files should have a line like:

<USER> <host>=NOPASSWD:<command>