Summary: | Не переключает на режим podmanonly | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | obidinog <obidinog> |
Component: | shadow-submap | Assignee: | Mikhail Efremov <sem> |
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
Severity: | normal | ||
Priority: | P5 | CC: | bne, burykinne, ldv, sem |
Version: | unstable | ||
Hardware: | x86_64 | ||
OS: | Linux |
Description
obidinog@basealt.ru
2023-05-23 17:43:07 MSK
Отсутствие группы podman - это точно не проблема shadow-utils. Я без понятия кто должен ее создавать. Это вопрос к автору изменения. Добрый день. Группа podman создаётся при установке пакета podsec, тем не менее зависимость на этот пакет в shadow-utils будет конечно совершенно излишней. Согласен, что получилось недостаточно очевидно для пользователя. Предлагаю дополнить help для podmanonly, привести к виду: new_help podmanonly "Only \"podman\" group members can execute $BINARY (the group name must exist)" Если такого дополнения будет достаточно, то я сегодня же внесу изменения. Не правильнее ли обернуть new_fmode podmanonly 710 root podman 'cap_setuid+ep' new_help podmanonly "Only \"podman\" group members can execute $BINARY" в проверку наличия этой группы ? (Ответ для Alexey Gladkov на комментарий #3) > Не правильнее ли обернуть > > new_fmode podmanonly 710 root podman 'cap_setuid+ep' > new_help podmanonly "Only \"podman\" group members can execute $BINARY" > > в проверку наличия этой группы ? Правильнее. И намного более удобно для пользователя. Сделаю проверку. Сделал и проверку наличия группы, и дополнил help. Изменения собрал в задании: https://git.altlinux.org/tasks/321797 Не лучше ли просто сделать так: if getent group podman >/dev/null; then new_fmode podmanonly 710 root podman 'cap_setgid+ep' new_help podmanonly "Only \"podman\" group members can execute $BINARY" fi (In reply to Dmitry V. Levin from comment #6) > Не лучше ли просто сделать так: > > if getent group podman >/dev/null; then > new_fmode podmanonly 710 root podman 'cap_setgid+ep' > new_help podmanonly "Only \"podman\" group members can execute > $BINARY" > fi Я тоже думаю, что так лучше. Я, собственно, именно так понял предложение Алексея. Вообще есть ли какой-то смысл в этом режиме, если пакет podsec не установлен? (Ответ для Mikhail Efremov на комментарий #7) > (In reply to Dmitry V. Levin from comment #6) > > Не лучше ли просто сделать так: > > > > if getent group podman >/dev/null; then > > new_fmode podmanonly 710 root podman 'cap_setgid+ep' > > new_help podmanonly "Only \"podman\" group members can execute > > $BINARY" > > fi Подождите, в таком виде оно будет не правильно обрабатывать help. Давайте тогда я сделаю по аналогии с ping, обёртку и для help с list . То есть например для newuidmap так: #!/bin/sh . /etc/control.d/functions BINARY=/usr/bin/newuidmap _filter_name_list() { local nlist= name= for name in $(control_list); do case "$name" in podmanonly) if getent group podman >/dev/null; then nlist="$nlist${nlist:+ }$name" fi;; *) nlist="$nlist${nlist:+ }$name";; esac done printf "%s\n" "$nlist" } new_fmode public 711 root root 'cap_setuid+ep' new_fmode wheelonly 710 root wheel 'cap_setuid+ep' new_fmode podmanonly 710 root podman 'cap_setgid+ep' new_fmode restricted 700 root root new_help public "Any user can execute $BINARY" new_help wheelonly "Only \"wheel\" group members can execute $BINARY" new_help podmanonly "Only \"podman\" group members can execute $BINARY" new_help restricted "Only root can execute $BINARY" new_summary 'Set the uid mapping of a user namespace' case "$*" in podmanonly) if getent group podman >/dev/null; then control_fmode "$BINARY" "$*" || exit 1 fi ;; help) control_help $(_filter_name_list) ;; list) _filter_name_list ;; *) control_fmode "$BINARY" "$*" || exit 1 Иными словами. Если группы не существует, то пользователь об этом режиме и не узнает. > Вообще есть ли какой-то смысл в этом режиме, если пакет podsec не установлен? Задача пакета podsec - автоматизация рутиных действий. Далеко не в каждом случае нужны все его возможности. Поэтому чтобы не устанавливать довольно большой пакет ради создания только одной группы, в некоторых случаях намного проще создать группу вручную. В остальном podmanonly никому не мешает, ничему не противоречит, и сам по себе в отрыве от требований регуляторов может быть полезен как компромисс между public и wheelonly. (Ответ для Mikhail Efremov на комментарий #7) > (In reply to Dmitry V. Levin from comment #6) > > Не лучше ли просто сделать так: > > > > if getent group podman >/dev/null; then > > new_fmode podmanonly 710 root podman 'cap_setgid+ep' > > new_help podmanonly "Only \"podman\" group members can execute > > $BINARY" > > fi > > Я тоже думаю, что так лучше. Я, собственно, именно так понял предложение > Алексея. Да. Я это и имел в виду. Буквально. (Ответ для Nikolay Burykin на комментарий #5) > Сделал и проверку наличия группы, и дополнил help. > > Изменения собрал в задании: > https://git.altlinux.org/tasks/321797 Николай, ваши изменения не верны, потому что когда группы нет control напишет сообщение и завершится успешно. В вашем новом варианте из коммента #8 та же проблема. control не должен завершаться успешно, когда он не выполнил то о чём его просили. Код, который показал Дима во-первых короче, во-вторых если группы нет пользователь получит ошибку: newuidmap: Invalid mode: podmanonly > Код, который показал Дима во-первых короче, во-вторых если группы нет > пользователь получит ошибку: > > newuidmap: Invalid mode: podmanonly Мне не до конца понятно как должен выглядеть итоговый код: В моем случае например код вида: #!/bin/sh . /etc/control.d/functions BINARY=/usr/bin/newuidmap new_fmode public 711 root root 'cap_setuid+ep' new_fmode wheelonly 710 root wheel 'cap_setuid+ep' new_fmode podmanonly 710 root podman 'cap_setuid+ep' new_fmode restricted 700 root root new_help public "Any user can execute $BINARY" new_help wheelonly "Only \"wheel\" group members can execute $BINARY" new_help podmanonly "Only \"podman\" group members can execute $BINARY" new_help restricted "Only root can execute $BINARY" new_summary 'Set the uid mapping of a user namespace' case "$*" in podmanonly) if getent group podman >/dev/null; then new_fmode podmanonly 710 root podman 'cap_setuid+ep' new_help podmanonly "Only \"podman\" group members can execute $BINARY" fi ;; *) control_fmode "$BINARY" "$*" || exit 1 ;; esac выдаёт control: newuidmap: Requested podmanonly, got public при отсутствии группы. > В вашем новом варианте из коммента #8 та же проблема. control не должен завершаться успешно, когда он не выполнил то о чём его просили. Так он вроде и не завершается успешно. Или я что-то не так понимаю? Ниже привел пример как у меня мой код работает без группы podman [root@host-46 ~]# control newuidmap help public: Any user can execute /usr/bin/newuidmap wheelonly: Only "wheel" group members can execute /usr/bin/newuidmap restricted: Only root can execute /usr/bin/newuidmap [root@host-46 ~]# control newuidmap list public wheelonly restricted [root@host-46 ~]# control newuidmap podmanonly control: newuidmap: Requested podmanonly, got public [root@host-46 ~]# echo $? 1 А теперь с группой: [root@host-46 ~]# control newuidmap help public: Any user can execute /usr/bin/newuidmap wheelonly: Only "wheel" group members can execute /usr/bin/newuidmap podmanonly: Only "podman" group members can execute /usr/bin/newuidmap restricted: Only root can execute /usr/bin/newuidmap [root@host-46 ~]# control newuidmap podmanonly [root@host-46 ~]# echo $? 0 Кажется я понял, как должен выглядеть итоговый код: #!/bin/sh . /etc/control.d/functions BINARY=/usr/bin/newuidmap new_fmode public 711 root root 'cap_setuid+ep' new_fmode wheelonly 710 root wheel 'cap_setuid+ep' new_fmode restricted 700 root root new_help public "Any user can execute $BINARY" new_help wheelonly "Only \"wheel\" group members can execute $BINARY" new_help restricted "Only root can execute $BINARY" if getent group podman >/dev/null; then new_fmode podmanonly 710 root podman 'cap_setuid+ep' new_help podmanonly "Only \"podman\" group members can execute $BINARY" fi control_fmode "$BINARY" "$*" || exit 1 Всё верно? Если хочется сохранить последовательность в list/help, то лучше так: #!/bin/sh . /etc/control.d/functions BINARY=/usr/bin/newgidmap new_fmode public 711 root root 'cap_setgid+ep' new_help public "Any user can execute $BINARY" new_fmode wheelonly 710 root wheel 'cap_setgid+ep' new_help wheelonly "Only \"wheel\" group members can execute $BINARY" if getent group podman >/dev/null; then new_fmode podmanonly 710 root podman 'cap_setgid+ep' new_help podmanonly "Only \"podman\" group members can execute $BINARY" fi new_fmode restricted 700 root root new_help restricted "Only root can execute $BINARY" new_summary 'Set the gid mapping of a user namespace' control_fmode "$BINARY" "$*" || exit 1 (Ответ для Dmitry V. Levin на комментарий #12) > Если хочется сохранить последовательность в list/help, то лучше так: > > #!/bin/sh > > . /etc/control.d/functions > > BINARY=/usr/bin/newgidmap > > new_fmode public 711 root root 'cap_setgid+ep' > new_help public "Any user can execute $BINARY" > > new_fmode wheelonly 710 root wheel 'cap_setgid+ep' > new_help wheelonly "Only \"wheel\" group members can execute $BINARY" > > if getent group podman >/dev/null; then > new_fmode podmanonly 710 root podman 'cap_setgid+ep' > new_help podmanonly "Only \"podman\" group members can execute $BINARY" > fi > > new_fmode restricted 700 root root > new_help restricted "Only root can execute $BINARY" > > new_summary 'Set the gid mapping of a user namespace' > > control_fmode "$BINARY" "$*" || exit 1 Да. Оформил и собрал обсуждаемые изменения в https://git.altlinux.org/tasks/321847/ shadow-1:4.13-alt6 -> sisyphus: Thu May 25 2023 Nikolay Burykin <bne@altlinux> 1:4.13-alt6 - newuidmap/newgidmap: Added check for podmanonly mode (ALT #46220). |