Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bash scripts requiring sudo password

Tags:

bash

sudo

I'm creating a Bash installer script which compiles and installs some libraries for both OSX and Linux. Because some commands in my script ("make install", "apt-get install", "port install", etc) require sudo, I need the user to supply the password.

Currently the user gets asked for the password whenever the first sudo command is about to execute, but because this is often after a compile stage, there is always some time between starting the script and having to enter the password.

I would like to put the password entry + check at the beginning of the script. Also I am curious if this is really an ok way of installing system libraries.

Alternatively I could install the libraries in a local sandbox location which doesn't require sudo, but then I'll have to tell apt-get and macports where to install their libraries other then the default /usr/local/ and /opt/local, and I'm not sure how to do that nor if that's a clever idea at all.

like image 694
Thijs Koerselman Avatar asked Oct 20 '10 09:10

Thijs Koerselman


People also ask

How do I get rid of sudo asking for password?

First you might want to consider to disable sudo password only for a selected administrative command(s). To do so you need to edit the /etc/sudoers sudo configuration command using the sudo visudo editor. At this point executing the systemctl and reboot commands will not require sudo password.

Why does sudo keep asking for password?

If your timestamp_timeout is zero, sudo always prompts for a password. This feature can be enabled only by the superuser, however. Ordinary users can achieve the same behavior with sudo -k, which forces sudo to prompt for a password on your next sudo command.

Does bash require sudo?

Bash Scripting: Require script to be run as root (or with sudo) - Server Fault. Stack Overflow for Teams – Start collaborating and sharing organizational knowledge.

How do I give a sudo permission to a script?

To give root privileges to a user while executing a shell script, we can use the sudo bash command with the shebang. This will run the shell script as a root user. Example: #!/usr/bin/sudo bash ....


2 Answers

To get the password, just put sudo echo "Thanks." at the start of the script.

But I would prefer this solution:

if [[ $UID != 0 ]]; then     echo "Please run this script with sudo:"     echo "sudo $0 $*"     exit 1 fi 
like image 68
Aaron Digulla Avatar answered Oct 14 '22 10:10

Aaron Digulla


For those who don't want to elevate the entire script (to limit risks by only using sudo within the script where needed) the first part of the accepted answer sudo echo "Thanks" works but won't respond to sudo password failure by exiting the script. To accomplish this, scripts that include sudo commands and want to ensure sudo access before it's used could start with

if [[ ! $(sudo echo 0) ]]; then exit; fi 

The caveat is that you are relying on the existence of a sudoers timeout that will last the duration of your script to suppress the rest of the prompts.

like image 42
Travis R Avatar answered Oct 14 '22 12:10

Travis R