This commit is contained in:
2026-04-04 00:09:02 +08:00
commit 38e896363e
117 changed files with 119311 additions and 0 deletions

View 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
}