Сетевые технологии
Централизованная аутентификация и авторизация
Покомандная авторизация — пример конфигурации сервера

Сервер сначала отрабатывает секцию script. Если там выполнилось условие с permit или deny, то на этом проверка заканчивается и отсылается отрицательный ответ на запрос. Если нет, то отрабатывается секция cmd = … для соответствующей команды. Если ни одно условие не удовлетворено, то результат будет deny.

Подробнее см. документацию проекта tac_plus.

ПРИМЕЧАНИЕ. При разработке покомандной авторизации использовался сервер tac_plus от Marc Huber:
    https://projects.pro-bono-publico.de/event-driven-servers/doc/tac_plus.html
Исходный код:
    https://github.com/MarcJHuber/event-driven-servers
При использовании других реализаций tac_plus возможны отличия в синтаксисе файла конфигурации, см. документацию по используемой вами версии.

Ниже приведен пример конфигурации сервера с комментариями.

#!/usr/local/sbin/tac_plus
id = spawnd {
    listen = { port = 49 }
}
id = tac_plus {
    host = any {
        debug = ALL -HEX
        key = "nsg" address = 0.0.0.0/0
    }

    # Ничего не разрешено
    user = usr0 {
        debug = ALL
        pap = clear psw0
        service = shell {
        }
    }

    # Все разрешено
    user = usr1 {
        debug = ALL
        pap = clear psw1
        service = shell {
            script = {
                if (cmd =~ .*) permit
            }
        }
    }

    # Разрешить работу только с асинхронными портами (узлы port.a*)
    user = usr2 {
        debug = ALL
        pap = clear psw2
        service = shell {
            script = {
                if (cmd =~ / port\.a/) permit
            }
            cmd = write {    # Разрешить сохранять конфиг
                permit .*
            }
        }
    }

    # Разрешить только рестартовать  асинхронные порты
    user = usr3 {
        debug = ALL
        pap = clear psw3
        service = shell {
            script = {
                if (cmd == "") permit # Необходимо, чтобы прошла начальная
                                      # авторизация, где cmd отсутствует
                if (cmd !~ / port\.a/) deny # Запретить все узлы кроме  port.a*
            }
            cmd = run {
                permit /\.restart/
            }
        }
    }

    # Разрешить только просмотр конфигурации и выполнение команд show и log
    # кроме system.audit.show.*
    user = usr4 {
        debug = ALL
        pap = clear psw4
        service = shell {
            cmd = get {
                permit .*
            }
            cmd = run {
                deny /^system.audit.show\./
                permit /\.(show|log)/
            }
        }
    }
}

© Network Systems Group 2015–2026 Отдел документации