Для продвижения Tartarus и реализации политик на уровне групп, необходимо исправить основные проблемы в модуле ролей: - Переписать NSS модуль без использования C++ (http://www.tartarus.ru/issues/show/72) - Добавить возможность ссылаться на группы не только по идентификаторам, но и по именам (http://www.tartarus.ru/issues/show/49) - Добавить проверку на NGROUP_MAX (http://www.tartarus.ru/issues/show/126) Далее можно начать активно внедрять этот модуль в наших решениях. Первая задача - это прозрачный доступ через ssh с правами админа на основе сетевых групп. При этом группе netadmins, по умолчанию дополнительно назначаются группы remote и wheel, а также роль users.
http://git.etersoft.ru/people/piastry/packages/?p=libnss-role.git;a=summary 0.2.1-alt1 Реализация на C. Работает не только с гидами, но и с именами групп.
В предыдущем посте неправильно указал время работы. Исправляюсь.
Всё, теперь со временем должно быть всё верно. Предыдущие два следует считать неправильными.
Пересмотрена реализация модуля, добавлена проверка на NGROUP_MAX http://git.etersoft.ru/people/piastry/packages/?p=libnss-role.git;a=summary
Дабавлена необходимая функциональность в работу утилит http://git.etersoft.ru/people/piastry/packages/?p=libnss-role.git;a=summary
0.2.6-alt1 http://git.etersoft.ru/people/piastry/packages/?p=libnss-role.git;a=summary
Думаю, что текущая версия течёт как решето... Паша, прогони его valgrind'ом, а лучше подумай, где и в каких случаях ты освобождаешь память, особенно в случае возникновения ошибок... Как я вижу почти нигде...
Исправлено в 0.2.7-alt1: http://git.etersoft.ru/people/piastry/packages/?p=libnss-role.git;a=summary
Исправил ошибку в пред версии - теперь 0.2.8-alt1.
Текущий код совершенно не готов к использованию. Даже на глаз, я не готов это запускать в надежде на работоспособность. Проблемы новой сборки много раз обсуждались... Состояние в таком виде - сломано. Я вот случайно обновился и долго не мог понять, почему у меня syslogd не запускается... Вот что показал strace: [...] [pid 16152] mmap2(NULL, 12432, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 45, 0) = 0xb7fd7000 [pid 16152] fadvise64(45, 0, 12432, POSIX_FADV_WILLNEED) = 0 [pid 16152] mmap2(0xb7fd9000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 45, 0x1) = 0xb7fd9000 [pid 16152] close(45) = 0 [pid 16152] mprotect(0xb7fd9000, 4096, PROT_READ) = 0 [pid 16152] open("/etc/role", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 16152] --- SIGSEGV (Segmentation fault) @ 0 (0) --- Process 16152 detached <... nanosleep resumed> {299, 965731693}) = ? ERESTART_RESTARTBLOCK (To be restarted) --- SIGTERM (Terminated) @ 0 (0) --- --- SIGCHLD (Child exited) @ 0 (0) --- exit_group(0) Даже боюсь подумать что это может быть...
Пересмотрел архитектуру и откатил версию. Начал разработку с нуля - текущая версия 0.2.1: 1. Реализована работа с именами групп (с латинскими символами и длиной имени группы не более 32) . 2. Сам модуль полностью реализован на языке Си. 3. Утилиты пока так и остались из предыдущей реализации на С++, что планируется исправить. Ветка разработки http://git.etersoft.ru/people/piastry/packages/?p=libnss-role.git;a=shortlog;h=refs/heads/dev Можно тестировать!
Обычно всё же при переписывании кода с нуля увеличивают мажорную цифру (первую например), а не откатывают версию.
Реализованы утилиты на языке С, проведён анализ кода, найдены и исправлены ошибки. Текущая версия 0.2.2-alt2.
Новый релиз 0.2.3-alt1. Исправлены некоторые ошибки, добавлены предупреждающие сообщения при работе утилит, группы и gid'ы теперь различаются по знаку "!", стоящему перед именем группы в файле /etc/role (пр. !role:10,!group).
(In reply to comment #14) > Новый релиз 0.2.3-alt1. > > Исправлены некоторые ошибки, добавлены > предупреждающие сообщения при работе > утилит, группы и gid'ы теперь различаются по > знаку "!", стоящему перед именем группы в > файле /etc/role (пр. !role:10,!group). > Почему сообщения об ошибках не в stderr? Зачем различать группы и gid'ы по "!" ? Почему изменения, исправляющие баги, и изменения, относящиеся к policy/интерфейсу объединены в один коммит? Почему git log не даёт ответов на эти вопросы?
"!" используется, чтобы понять, что имеется ввиду группа с gid 123, или группа с именем "123". (123 взят как пример) Да, следует использовать stderr, спасибо!
(In reply to comment #16) > "!" используется, чтобы понять, что имеется > ввиду группа с gid 123, или группа с именем "123". > (123 взят как пример) А где такие группы возникают? groupadd(8) и многие другие считают (правда, не знаю, почему так повелось), что имя не должно начинаться с цифры.
Fedora 12, x86_64. [piastry@keepcoding ~]$ sudo groupadd 123 [piastry@keepcoding ~]$ sudo gpasswd -a role_test 123 [piastry@keepcoding ~]$ id role_test uid=501(role_test) gid=502(role_test) группы=502(role_test),503(rolegr),504(123) Так что не все groupadd одинаковые. В тоже время в документации по groupadd говорится, что имя группы должно начинаться с имени. После исследования данного вопроса решено было вернуть всё, как было до этого.
Откатил вышеописанное изменение разбора файла.
Fixed.