Golang : Force your program to run with root permissions
Problem:
Because of security requirements, you need to create programs that can only be executed with the proper root
permissions. For example, if a non-root user tries to execute the executable, instead of running as usual......the program will not prompt for the root password and will also display a warning message that it is only meant for those with root
privilege before exiting.
How do to that?
Solution:
On Mac/Unix/Linux operating systems, there is a program call id
that is used to return the user identity. For example, if you have the root
privilege, executing the command sudo id -u
will return 0 instead of 501
$id -u
501
$sudo id -u
0
We will incorporate this id -u
command into our simple Golang program to check for the root
privilege. Try executing the following program with and without sudo
to see the differences.
Here you go!
package main
import (
"log"
"os/exec"
"strconv"
)
func main() {
cmd := exec.Command("id", "-u")
output, err := cmd.Output()
if err != nil {
log.Fatal(err)
}
// output has trailing \n
// need to remove the \n
// otherwise it will cause error for strconv.Atoi
// log.Println(output[:len(output)-1])
// 0 = root, 501 = non-root user
i, err := strconv.Atoi(string(output[:len(output)-1]))
if err != nil {
log.Fatal(err)
}
if i == 0 {
log.Println("Awesome! You are now running this program with root permissions!")
} else {
log.Fatal("This program must be run as root! (sudo)")
}
}
Output:
$ ./checksudo
2017/04/22 16:23:10 This program must be run as root! (sudo)
$ sudo ./checksudo
Password:
2017/04/22 16:23:16 Awesome! You are now running this program with root permissions!
References:
https://www.socketloop.com/tutorials/execute-shell-command-golang
https://adamscheller.com/systems-administration/check-if-bash-script-is-run-with-root-permissions/
See also : Golang : Remove characters from string example
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+20k Golang : GORM create record or insert new record into database example
+72.7k Golang : How to return HTTP status code?
+8.1k Golang : Create and shuffle deck of cards example
+5k Linux/MacOSX : Search for files by filename and extension with find command
+3.7k Chrome : How to block socketloop.com links in Google SERP?
+14.2k Golang : Get current time from the Internet time server(ntp) example
+14.9k Golang : Generate QR codes for Google Authenticator App and fix "Cannot interpret QR code" error
+3.8k Golang : How to pass data between controllers with JSON Web Token
+61.4k Golang : Convert HTTP Response body to string
+18.3k Golang : Compare floating-point numbers
+13.2k Golang : Overwrite previous output with count down timer
+4.3k Golang : How to deal with configuration data?