2019-01-27 16:12:29 +02:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"os/exec"
|
|
|
|
"regexp"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
func GetOperatingSystem() (platform string, err error) {
|
|
|
|
out, err := exec.Command("bash", "-c", "cat /etc/os-release").Output()
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
} else {
|
|
|
|
output := strings.ToLower(string(out))
|
|
|
|
output = strings.Replace(output, `"`, "", -1)
|
|
|
|
output = strings.Replace(output, `_id`, "", -1) // version_id kills the regex
|
|
|
|
|
|
|
|
flagRe := regexp.MustCompile("id" + `=([^ \n]*)`)
|
|
|
|
vals := flagRe.FindStringSubmatch(output)
|
|
|
|
if len(vals) > 1 {
|
|
|
|
platform = vals[1]
|
|
|
|
}
|
|
|
|
|
|
|
|
platform += getPlatformVersion(output, platform)
|
|
|
|
}
|
|
|
|
|
|
|
|
return platform, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetBootLoader() (boot string, err error) {
|
|
|
|
out, err := exec.Command("grub-install", "--version").Output()
|
|
|
|
if err != nil {
|
|
|
|
out, err = exec.Command("bash", "-c", "ls /boot | grep grub").Output()
|
|
|
|
if err != nil {
|
|
|
|
out, err = exec.Command("bash", "-c", "ls /boot/boot | grep grub").Output()
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
output := strings.ToLower(string(out))
|
|
|
|
|
|
|
|
if strings.Contains(output, "grub2") {
|
|
|
|
boot = "grub2"
|
|
|
|
} else if strings.Contains(output, "grub") {
|
|
|
|
boot = "grub"
|
|
|
|
}
|
|
|
|
|
|
|
|
return boot, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetSystemLogManager() (syslog string, err error) {
|
2020-11-05 22:18:43 +01:00
|
|
|
out, err := exec.Command("bash", "-c", "sudo lsof +D /var/log | grep /var/log/syslog | cut -f1 -d' '").Output()
|
2019-01-27 16:12:29 +02:00
|
|
|
if err != nil {
|
|
|
|
out, err := exec.Command("bash", "-c", "service rsyslog status").Output()
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
output := strings.ToLower(string(out))
|
|
|
|
if strings.Contains(output, "active (running)") {
|
|
|
|
syslog = "rsyslog"
|
|
|
|
} else {
|
|
|
|
syslog = "syslog-ng"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
output := strings.ToLower(string(out))
|
|
|
|
if strings.Contains(output, "syslog-ng") {
|
|
|
|
syslog = "syslog-ng"
|
|
|
|
} else {
|
|
|
|
syslog = "rsyslog"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return syslog, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetLSM() (lsm string, err error) {
|
|
|
|
out, err := exec.Command("bash", "-c", "sudo apparmor_status").Output()
|
|
|
|
if err != nil {
|
|
|
|
out, err = exec.Command("bash", "-c", "sestatus").Output()
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
} else {
|
|
|
|
output := strings.ToLower(string(out))
|
|
|
|
space := regexp.MustCompile(`\s+`)
|
|
|
|
output = space.ReplaceAllString(output, " ")
|
|
|
|
if strings.Contains(output, "selinux status: enabled") {
|
|
|
|
lsm = "selinux"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
output := strings.ToLower(string(out))
|
|
|
|
if strings.Contains(output, "apparmor module is loaded") {
|
|
|
|
lsm = "apparmor"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return lsm, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func getPlatformVersion(output, platform string) string {
|
2019-05-30 00:04:10 +03:00
|
|
|
flagRe := regexp.MustCompile(`version[_id]*=([^ \n]*)`)
|
2019-01-27 16:12:29 +02:00
|
|
|
vals := flagRe.FindStringSubmatch(output)
|
|
|
|
if len(vals) > 1 {
|
|
|
|
switch platform {
|
|
|
|
case "rhel":
|
|
|
|
return vals[1][:1] // Get the major version only, examaple: 7.6 will return 7
|
2019-05-21 19:19:49 +03:00
|
|
|
case "ubuntu":
|
|
|
|
return vals[1][:2] // Get the major version only, examaple: 18.04 will return 18
|
2019-01-27 16:12:29 +02:00
|
|
|
default:
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return ""
|
|
|
|
}
|