Как я могу создать (BNF) железная дорога диаграмма для /etc/sudoers
файл?
Я знаю sudoers manpage имеет Расширенная форма Бэкуса-Наура информация. Также есть инструменты для создания таких диаграмм (см. Инструмент для создания железнодорожной диаграммы, используемый на json.org )
Вам нужно взять каждую часть схемы BNF со страницы sudo man, затем скопировать и вставить в свой любимый инструмент (Генератор железнодорожных схем (онлайн) или плагин dokuwiki EBNF).
Убедитесь, что у вас есть все фрагменты с действующей схемой (!). Также есть некоторые общие проблемы ...
+netgroup
должен быть заменен на '+' netgroup
(так как +
суффикс для элементы, повторяющиеся 1 или более раз в некоторых вариантах БНФ).
Конечный обратный слеш (\
) следует удалить.
/netmask
следует заменить на '/'netmask
(так как элементы, разделенные косой чертой ("/"), являются альтернативными в некоторых вариантах БНФ).
Вот RHEL / CEntOS 7 EBNF после этой очистки (плюс некоторые незначительные), которые вы можете вставить http://bottlecaps.de/rr/ui (вставьте вкладку «Редактировать грамматику», затем щелкните вкладку «Просмотр диаграммы»). код лицензия:
Alias ::= 'User_Alias' User_Alias (':' User_Alias)* |
'Runas_Alias' Runas_Alias (':' Runas_Alias)* |
'Host_Alias' Host_Alias (':' Host_Alias)* |
'Cmnd_Alias' Cmnd_Alias (':' Cmnd_Alias)*
User_Alias ::= NAME '=' User_List
Runas_Alias ::= NAME '=' Runas_List
Host_Alias ::= NAME '=' Host_List
Cmnd_Alias ::= NAME '=' Cmnd_List
NAME ::= [A-Z]([A-Z][0-9]_)*
User_List ::= User |
User ',' User_List
User ::= '!'* user name |
'!'* '#' uid |
'!'* '%' group |
'!'* '%#' gid |
'!'* '+' netgroup |
'!'* '%:' nonunix_group |
'!'* '%:#' nonunix_gid |
'!'* User_Alias
Runas_List ::= Runas_Member |
Runas_Member ',' Runas_List
Runas_Member ::= '!'* user name |
'!'* '#' uid |
'!'* '%' group |
'!'* '%#' gid |
'!'* '%:' nonunix_group |
'!'* '%:#' nonunix_gid |
'!'* '+' netgroup |
'!'* Runas_Alias
Host_List ::= Host |
Host ',' Host_List
Host ::= '!'* host name |
'!'* ip_addr |
'!'* network('/'netmask)? |
'!'* '+' netgroup |
'!'* Host_Alias
Cmnd_List ::= Cmnd |
Cmnd ',' Cmnd_List
command name ::= file name |
file name args |
file name '""'
Cmnd ::= '!'* command name |
'!'* directory |
'!'* "sudoedit" |
'!'* Cmnd_Alias
Default_Type ::= 'Defaults' |
'Defaults' '@' Host_List |
'Defaults' ':' User_List |
'Defaults' '!' Cmnd_List |
'Defaults' '>' Runas_List
Default_Entry ::= Default_Type Parameter_List
Parameter_List ::= Parameter |
Parameter ',' Parameter_List
Parameter ::= Parameter '=' Value |
Parameter '+=' Value |
Parameter '-=' Value |
'!'* Parameter
User_Spec ::= User_List Host_List '=' Cmnd_Spec_List
(':' Host_List '=' Cmnd_Spec_List)*
Cmnd_Spec_List ::= Cmnd_Spec |
Cmnd_Spec ',' Cmnd_Spec_List
Cmnd_Spec ::= Runas_Spec? SELinux_Spec? Tag_Spec* Cmnd
Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')'
SELinux_Spec ::= ('ROLE=role' | 'TYPE=type')
Tag_Spec ::= ('NOPASSWD:' | 'PASSWD:' | 'NOEXEC:' | 'EXEC:' |
'SETENV:' | 'NOSETENV:' | 'LOG_INPUT:' | 'NOLOG_INPUT:' |
'LOG_OUTPUT:' | 'NOLOG_OUTPUT:')