first
This commit is contained in:
257
DCIManager6/dci6-support/server_sec_info.go
Normal file
257
DCIManager6/dci6-support/server_sec_info.go
Normal file
@@ -0,0 +1,257 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"os/user"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// - Безопасность
|
||||
//
|
||||
// ALSE
|
||||
//
|
||||
// parsec
|
||||
// astra-mic-control status
|
||||
// astra-mac-control status
|
||||
//
|
||||
// astra-digsig-control status
|
||||
// astra-sudo-control status
|
||||
// astra-nochmodx-lock status
|
||||
// astra-interpreters-lock status
|
||||
// etc/sudoers %astra-admin ALL=(ALL:ALL) NOPASSWD: ALL %sudo ALL=(ALL:ALL) NOPASSWD: ALL
|
||||
// группу astra-admin
|
||||
|
||||
// TODO команды astra-... status нужно проверить в файлах директории /parsecfs/
|
||||
|
||||
func getSecSettingsAlse() (secSetALSE, []error) {
|
||||
var secSet secSetALSE
|
||||
var errs []error
|
||||
//apparmor
|
||||
// parsec
|
||||
runSystemd, err := os.ReadDir("/run/systemd/units")
|
||||
if err != nil {
|
||||
err = fmt.Errorf("Ошибка чтения директории /run/systemd/units: %s", err)
|
||||
errs = append(errs, err)
|
||||
err = nil
|
||||
}
|
||||
for _, run := range runSystemd {
|
||||
matchedPars, _ := regexp.Match("parsec", []byte(run.Name()))
|
||||
if matchedPars {
|
||||
secSet.Parsec = "active"
|
||||
}
|
||||
matchedApparm, _ := regexp.Match("apparmor", []byte(run.Name()))
|
||||
if matchedApparm {
|
||||
secSet.Apparmor = "active"
|
||||
}
|
||||
}
|
||||
// selinux
|
||||
if _, err := os.Stat("/etc/selinux/config"); errors.Is(err, os.ErrNotExist) {
|
||||
secSet.Selinux = "notexist"
|
||||
} else {
|
||||
seFile, err := os.ReadFile("/etc/selinux/config")
|
||||
if err != nil {
|
||||
err = fmt.Errorf("Ошибка. Файл selinux conf существует, но не может быть прочитан: %s", err)
|
||||
errs = append(errs, err)
|
||||
err = nil
|
||||
}
|
||||
sestatus := 0
|
||||
for _, sf := range strings.Split(string(seFile), "\n") {
|
||||
matchedConfig, _ := regexp.Match(sf, []byte("byteSELINUX=disabled"))
|
||||
if matchedConfig {
|
||||
secSet.Selinux = "disabled"
|
||||
sestatus = 1
|
||||
}
|
||||
}
|
||||
if sestatus == 0 {
|
||||
secSet.Selinux = "enabled"
|
||||
}
|
||||
}
|
||||
// astra-mic-control status
|
||||
cmd := exec.Command("astra-mic-control", "is-enabled")
|
||||
mic, err := cmd.Output()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("Ошибка выполнения astra-mic-control is-enabled : %s", err)
|
||||
errs = append(errs, err)
|
||||
err = nil
|
||||
}
|
||||
secSet.Mic = string(mic)
|
||||
// astra-mac-control status
|
||||
cmd = exec.Command("astra-mac-control", "is-enabled")
|
||||
mac, err := cmd.Output()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("Ошибка выполнения astra-mac-control is-enabled : %s", err)
|
||||
errs = append(errs, err)
|
||||
err = nil
|
||||
}
|
||||
secSet.Mac = string(mac)
|
||||
// astra-digsig-control status
|
||||
if _, err := os.Stat("/etc/digsig/digsig_initramfs.conf"); errors.Is(err, os.ErrNotExist) {
|
||||
secSet.Digsig = "file notexist"
|
||||
} else {
|
||||
f, err := os.ReadFile("/etc/digsig/digsig_initramfs.conf")
|
||||
if err != nil {
|
||||
err = fmt.Errorf("Ошибка. Файл digsig_initramfs.conf существует, но не может быть прочитан: %s", err)
|
||||
errs = append(errs, err)
|
||||
}
|
||||
i := 0
|
||||
for _, sf := range strings.Split(string(f), "\n") {
|
||||
matchedConfig, _ := regexp.Match(sf, []byte("DIGSIG_ELF_MODE=0"))
|
||||
if matchedConfig {
|
||||
secSet.Digsig = "disabled"
|
||||
i = 1
|
||||
}
|
||||
}
|
||||
if i == 0 {
|
||||
secSet.Digsig = "enabled"
|
||||
}
|
||||
}
|
||||
|
||||
// astra-sudo-control status
|
||||
cmd = exec.Command("astra-sudo-control", "is-enabled")
|
||||
sudo, err := cmd.Output()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("Ошибка выполнения astra-sudo-control is-enabled : %s", err)
|
||||
errs = append(errs, err)
|
||||
err = nil
|
||||
}
|
||||
secSet.Sudo = string(sudo)
|
||||
// astra-nochmodx-lock status
|
||||
cmd = exec.Command("astra-nochmodx-control", "is-enabled")
|
||||
nochmodx, err := cmd.Output()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("Ошибка выполнения astra-nochmodx-control is-enabled : %s", err)
|
||||
errs = append(errs, err)
|
||||
err = nil
|
||||
}
|
||||
secSet.Nochmodx = string(nochmodx)
|
||||
// astra-interpreters-lock status
|
||||
cmd = exec.Command("astra-nochmodx-control", "is-enabled")
|
||||
interpret, err := cmd.Output()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("Ошибка выполнения astra-interpreters-lock is-enabled : %s", err)
|
||||
errs = append(errs, err)
|
||||
err = nil
|
||||
}
|
||||
secSet.Interpret = string(interpret)
|
||||
// etc/sudoers %astra-admin ALL=(ALL:ALL) NOPASSWD: ALL %sudo ALL=(ALL:ALL) NOPASSWD: ALL
|
||||
if _, err = os.Stat("/etc/sudoers"); errors.Is(err, os.ErrNotExist) {
|
||||
secSet.SudoersAstraAdmin = "file notexist"
|
||||
} else {
|
||||
f, err := os.ReadFile("/etc/sudoers")
|
||||
if err != nil {
|
||||
err = fmt.Errorf("Ошибка чтения файла etc sudoers: %s", err)
|
||||
errs = append(errs, err)
|
||||
err = nil
|
||||
} else {
|
||||
i := 0
|
||||
for _, sf := range strings.Split(string(f), "\n") {
|
||||
matchedConfig, _ := regexp.Match(sf, []byte("%astra-admin ALL=(ALL:ALL) NOPASSWD: ALL"))
|
||||
if matchedConfig {
|
||||
secSet.SudoersAstraAdmin = "astra-admin nopass"
|
||||
i = 1
|
||||
}
|
||||
}
|
||||
if i == 0 {
|
||||
secSet.SudoersAstraAdmin = "astra-admin notnopass"
|
||||
}
|
||||
}
|
||||
}
|
||||
// etc/sudoers %sudo ALL=(ALL:ALL) NOPASSWD: ALL
|
||||
if _, err = os.Stat("/etc/sudoers"); errors.Is(err, os.ErrNotExist) {
|
||||
secSet.SudoersAstraAdmin = "file notexist"
|
||||
} else {
|
||||
f, err := os.ReadFile("/etc/sudoers")
|
||||
if err != nil {
|
||||
err = fmt.Errorf("Ошибка чтения файла etc sudoers: %s", err)
|
||||
errs = append(errs, err)
|
||||
err = nil
|
||||
} else {
|
||||
i := 0
|
||||
for _, sf := range strings.Split(string(f), "\n") {
|
||||
matchedConfig, _ := regexp.Match(sf, []byte("%sudo ALL=(ALL:ALL) NOPASSWD: ALL"))
|
||||
if matchedConfig {
|
||||
secSet.SudoersSudo = "sudo nopass"
|
||||
i = 1
|
||||
}
|
||||
}
|
||||
if i == 0 {
|
||||
secSet.SudoersSudo = "astra-admin notnopass"
|
||||
}
|
||||
}
|
||||
}
|
||||
// группу astra-admin
|
||||
curUser, err := user.Current()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("Ошибка получения данных о текущем пользователе: %s", err)
|
||||
errs = append(errs, err)
|
||||
err = nil
|
||||
}
|
||||
curUserGroups, err := curUser.GroupIds()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("Ошибка получения групп текущего пользователя: %s", err)
|
||||
errs = append(errs, err)
|
||||
err = nil
|
||||
}
|
||||
for _, grpId := range curUserGroups {
|
||||
grp, err := user.LookupGroupId(grpId)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("Ошибка получения информации о группе: %s", err)
|
||||
errs = append(errs, err)
|
||||
err = nil
|
||||
}
|
||||
if grp.Name == "astra-admin" {
|
||||
secSet.SudoersAstraAdmin = "astra-admin"
|
||||
}
|
||||
}
|
||||
return secSet, nil
|
||||
}
|
||||
|
||||
// Ubuntu apparmor
|
||||
|
||||
func getSecSettingsUbuntu() (secSetUbuntu, error) {
|
||||
var secSetUbuntu secSetUbuntu
|
||||
runSystemd, err := os.ReadDir("/run/systemd/units")
|
||||
if err != nil {
|
||||
err = fmt.Errorf("Ошибка чтения директории /run/systemd/units: %s", err)
|
||||
return secSetUbuntu, err
|
||||
}
|
||||
for _, run := range runSystemd {
|
||||
matched, _ := regexp.Match("apparmor", []byte(run.Name()))
|
||||
if matched {
|
||||
fmt.Println(run.Name())
|
||||
secSetUbuntu.Apparmor = "active"
|
||||
}
|
||||
}
|
||||
return secSetUbuntu, nil
|
||||
}
|
||||
|
||||
// Almalinux selinux
|
||||
|
||||
func getSecSettingsAlma() (secSetAlma, error) {
|
||||
var secSetAlma secSetAlma
|
||||
if _, err := os.Stat("/etc/selinux/config"); errors.Is(err, os.ErrNotExist) {
|
||||
secSetAlma.Selinux = "notexist"
|
||||
} else {
|
||||
seFile, err := os.ReadFile("/etc/selinux/config")
|
||||
if err != nil {
|
||||
err = fmt.Errorf("Ошибка. Файл selinux conf существует, но не может быть прочитан: %s", err)
|
||||
return secSetAlma, err
|
||||
}
|
||||
sestatus := 0
|
||||
for _, sf := range strings.Split(string(seFile), "\n") {
|
||||
matchedConfig, _ := regexp.Match("SELINUX=disabled", []byte(sf))
|
||||
if matchedConfig {
|
||||
secSetAlma.Selinux = "disabled"
|
||||
sestatus = 1
|
||||
}
|
||||
}
|
||||
if sestatus == 0 {
|
||||
secSetAlma.Selinux = "enabled"
|
||||
}
|
||||
}
|
||||
return secSetAlma, nil
|
||||
}
|
||||
Reference in New Issue
Block a user