Сервер сначала отрабатывает секцию 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 | Отдел документации |