<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>46220</bug_id>
          
          <creation_ts>2023-05-23 17:43:07 +0300</creation_ts>
          <short_desc>Не переключает на режим podmanonly</short_desc>
          <delta_ts>2023-05-25 20:36:11 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>shadow-submap</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="obidinog@basealt.ru">obidinog</reporter>
          <assigned_to name="Mikhail Efremov">sem</assigned_to>
          <cc>bne</cc>
    
    <cc>burykinne</cc>
    
    <cc>ldv</cc>
    
    <cc>sem</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>226275</commentid>
    <comment_count>0</comment_count>
    <who name="obidinog@basealt.ru">obidinog</who>
    <bug_when>2023-05-23 17:43:07 +0300</bug_when>
    <thetext>Платформа:
workstation-10.1-x86-64

Пакет:
shadow-submap-4.13-alt5.x86_64

Шаги:
# control newuidmap podmanonly
# control newgidmap podmanonly

Результат:
Ошибка chown: неверная группа: «root:podman»

Дополнительно:
Пакет podman установлен. На остальные режимы переключается корректно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226296</commentid>
    <comment_count>1</comment_count>
    <who name="Mikhail Efremov">sem</who>
    <bug_when>2023-05-23 22:27:29 +0300</bug_when>
    <thetext>Отсутствие группы podman - это точно не проблема shadow-utils. Я без понятия кто должен ее создавать. Это вопрос к автору изменения.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226336</commentid>
    <comment_count>2</comment_count>
    <who name="Nikolay Burykin">burykinne</who>
    <bug_when>2023-05-24 12:07:14 +0300</bug_when>
    <thetext>Добрый день.

Группа podman создаётся при установке пакета podsec, тем не менее зависимость на этот пакет в shadow-utils будет конечно совершенно излишней.

Согласен, что получилось недостаточно очевидно для пользователя.

Предлагаю дополнить help для podmanonly, привести к виду:

new_help podmanonly &quot;Only \&quot;podman\&quot; group members can execute $BINARY (the group name must exist)&quot;

Если такого дополнения будет достаточно, то я сегодня же внесу изменения.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226337</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2023-05-24 12:18:11 +0300</bug_when>
    <thetext>Не правильнее ли обернуть

new_fmode podmanonly 710 root podman &apos;cap_setuid+ep&apos;
new_help podmanonly &quot;Only \&quot;podman\&quot; group members can execute $BINARY&quot;

в проверку наличия этой группы ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226345</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolay Burykin">burykinne</who>
    <bug_when>2023-05-24 13:15:31 +0300</bug_when>
    <thetext>(Ответ для Alexey Gladkov на комментарий #3)
&gt; Не правильнее ли обернуть
&gt; 
&gt; new_fmode podmanonly 710 root podman &apos;cap_setuid+ep&apos;
&gt; new_help podmanonly &quot;Only \&quot;podman\&quot; group members can execute $BINARY&quot;
&gt; 
&gt; в проверку наличия этой группы ?

Правильнее. И намного более удобно для пользователя.
Сделаю проверку.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226397</commentid>
    <comment_count>5</comment_count>
    <who name="Nikolay Burykin">burykinne</who>
    <bug_when>2023-05-24 23:47:35 +0300</bug_when>
    <thetext>Сделал и проверку наличия группы, и дополнил help.

Изменения собрал в задании:
https://git.altlinux.org/tasks/321797</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226399</commentid>
    <comment_count>6</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2023-05-25 01:08:07 +0300</bug_when>
    <thetext>Не лучше ли просто сделать так:

if getent group podman &gt;/dev/null; then
        new_fmode podmanonly 710 root podman &apos;cap_setgid+ep&apos;
        new_help podmanonly &quot;Only \&quot;podman\&quot; group members can execute $BINARY&quot;
fi</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226401</commentid>
    <comment_count>7</comment_count>
    <who name="Mikhail Efremov">sem</who>
    <bug_when>2023-05-25 01:55:12 +0300</bug_when>
    <thetext>(In reply to Dmitry V. Levin from comment #6)
&gt; Не лучше ли просто сделать так:
&gt; 
&gt; if getent group podman &gt;/dev/null; then
&gt;         new_fmode podmanonly 710 root podman &apos;cap_setgid+ep&apos;
&gt;         new_help podmanonly &quot;Only \&quot;podman\&quot; group members can execute
&gt; $BINARY&quot;
&gt; fi

Я тоже думаю, что так лучше. Я, собственно, именно так понял предложение Алексея.
Вообще есть ли какой-то смысл в этом режиме, если пакет podsec не установлен?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226408</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolay Burykin">burykinne</who>
    <bug_when>2023-05-25 10:54:27 +0300</bug_when>
    <thetext>(Ответ для Mikhail Efremov на комментарий #7)
&gt; (In reply to Dmitry V. Levin from comment #6)
&gt; &gt; Не лучше ли просто сделать так:
&gt; &gt; 
&gt; &gt; if getent group podman &gt;/dev/null; then
&gt; &gt;         new_fmode podmanonly 710 root podman &apos;cap_setgid+ep&apos;
&gt; &gt;         new_help podmanonly &quot;Only \&quot;podman\&quot; group members can execute
&gt; &gt; $BINARY&quot;
&gt; &gt; 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 &quot;$name&quot; in
                        podmanonly)
                                if getent group podman &gt;/dev/null; then
                                        nlist=&quot;$nlist${nlist:+ }$name&quot;
                                fi;;
                        *) nlist=&quot;$nlist${nlist:+ }$name&quot;;;
                esac
        done
        printf &quot;%s\n&quot; &quot;$nlist&quot;
}

new_fmode public 711 root root &apos;cap_setuid+ep&apos;
new_fmode wheelonly 710 root wheel &apos;cap_setuid+ep&apos;
new_fmode podmanonly 710 root podman &apos;cap_setgid+ep&apos;
new_fmode restricted 700 root root

new_help public &quot;Any user can execute $BINARY&quot;
new_help wheelonly &quot;Only \&quot;wheel\&quot; group members can execute $BINARY&quot;
new_help podmanonly &quot;Only \&quot;podman\&quot; group members can execute $BINARY&quot;
new_help restricted &quot;Only root can execute $BINARY&quot;

new_summary &apos;Set the uid mapping of a user namespace&apos;

case &quot;$*&quot; in
podmanonly)
        if getent group podman &gt;/dev/null; then
                control_fmode &quot;$BINARY&quot; &quot;$*&quot; || exit 1
        fi
        ;;
help)
        control_help $(_filter_name_list)
        ;;
list)
        _filter_name_list
        ;;
*)
        control_fmode &quot;$BINARY&quot; &quot;$*&quot; || exit 1

Иными словами. Если группы не существует, то пользователь об этом режиме и не узнает.


&gt; Вообще есть ли какой-то смысл в этом режиме, если пакет podsec не установлен?

Задача пакета podsec - автоматизация рутиных действий. 
Далеко не в каждом случае нужны все его возможности. Поэтому чтобы не устанавливать довольно большой пакет ради создания только одной группы, в некоторых случаях намного проще создать группу вручную. 
В остальном podmanonly никому не мешает, ничему не противоречит, и сам по себе в отрыве от требований регуляторов может быть полезен как компромисс между public и wheelonly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226412</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2023-05-25 11:42:01 +0300</bug_when>
    <thetext>(Ответ для Mikhail Efremov на комментарий #7)
&gt; (In reply to Dmitry V. Levin from comment #6)
&gt; &gt; Не лучше ли просто сделать так:
&gt; &gt; 
&gt; &gt; if getent group podman &gt;/dev/null; then
&gt; &gt;         new_fmode podmanonly 710 root podman &apos;cap_setgid+ep&apos;
&gt; &gt;         new_help podmanonly &quot;Only \&quot;podman\&quot; group members can execute
&gt; &gt; $BINARY&quot;
&gt; &gt; fi
&gt; 
&gt; Я тоже думаю, что так лучше. Я, собственно, именно так понял предложение
&gt; Алексея.

Да. Я это и имел в виду. Буквально.

(Ответ для Nikolay Burykin на комментарий #5)
&gt; Сделал и проверку наличия группы, и дополнил help.
&gt; 
&gt; Изменения собрал в задании:
&gt; https://git.altlinux.org/tasks/321797

Николай, ваши изменения не верны, потому что когда группы нет control напишет сообщение и завершится успешно. В вашем новом варианте из коммента #8 та же проблема. control не должен завершаться успешно, когда он не выполнил то о чём его просили.

Код, который показал Дима во-первых короче, во-вторых если группы нет пользователь получит ошибку:

newuidmap: Invalid mode: podmanonly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226413</commentid>
    <comment_count>10</comment_count>
    <who name="Nikolay Burykin">burykinne</who>
    <bug_when>2023-05-25 12:07:33 +0300</bug_when>
    <thetext>&gt; Код, который показал Дима во-первых короче, во-вторых если группы нет
&gt; пользователь получит ошибку:
&gt; 
&gt; newuidmap: Invalid mode: podmanonly

Мне не до конца понятно как должен выглядеть итоговый код:

В моем случае например код вида:
#!/bin/sh

. /etc/control.d/functions

BINARY=/usr/bin/newuidmap

new_fmode public 711 root root &apos;cap_setuid+ep&apos;
new_fmode wheelonly 710 root wheel &apos;cap_setuid+ep&apos;
new_fmode podmanonly 710 root podman &apos;cap_setuid+ep&apos;
new_fmode restricted 700 root root

new_help public &quot;Any user can execute $BINARY&quot;
new_help wheelonly &quot;Only \&quot;wheel\&quot; group members can execute $BINARY&quot;
new_help podmanonly &quot;Only \&quot;podman\&quot; group members can execute $BINARY&quot;
new_help restricted &quot;Only root can execute $BINARY&quot;

new_summary &apos;Set the uid mapping of a user namespace&apos;

case &quot;$*&quot; in
podmanonly)
        if getent group podman &gt;/dev/null; then
                new_fmode podmanonly 710 root podman &apos;cap_setuid+ep&apos;
                new_help podmanonly &quot;Only \&quot;podman\&quot; group members can execute $BINARY&quot;
        fi
        ;;
*)
        control_fmode &quot;$BINARY&quot; &quot;$*&quot; || exit 1
        ;;
esac

выдаёт 
control: newuidmap: Requested podmanonly, got public при отсутствии группы.

&gt; В вашем новом варианте из коммента #8 та же проблема. control не должен завершаться успешно, когда он не выполнил то о чём его просили.

Так он вроде и не завершается успешно. Или я что-то не так понимаю?
Ниже привел пример как у меня мой код работает без группы podman

[root@host-46 ~]# control newuidmap help
public: Any user can execute /usr/bin/newuidmap
wheelonly: Only &quot;wheel&quot; 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 &quot;wheel&quot; group members can execute /usr/bin/newuidmap
podmanonly: Only &quot;podman&quot; 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</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226415</commentid>
    <comment_count>11</comment_count>
    <who name="Nikolay Burykin">burykinne</who>
    <bug_when>2023-05-25 12:17:23 +0300</bug_when>
    <thetext>Кажется я понял, как должен выглядеть итоговый код:

#!/bin/sh

. /etc/control.d/functions

BINARY=/usr/bin/newuidmap

new_fmode public 711 root root &apos;cap_setuid+ep&apos;
new_fmode wheelonly 710 root wheel &apos;cap_setuid+ep&apos;
new_fmode restricted 700 root root

new_help public &quot;Any user can execute $BINARY&quot;
new_help wheelonly &quot;Only \&quot;wheel\&quot; group members can execute $BINARY&quot;
new_help restricted &quot;Only root can execute $BINARY&quot;

if getent group podman &gt;/dev/null; then
        new_fmode podmanonly 710 root podman &apos;cap_setuid+ep&apos;
        new_help podmanonly &quot;Only \&quot;podman\&quot; group members can execute $BINARY&quot;
fi

control_fmode &quot;$BINARY&quot; &quot;$*&quot; || exit 1

Всё верно?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226448</commentid>
    <comment_count>12</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2023-05-25 14:46:22 +0300</bug_when>
    <thetext>Если хочется сохранить последовательность в list/help, то лучше так:

#!/bin/sh

. /etc/control.d/functions

BINARY=/usr/bin/newgidmap

new_fmode public 711 root root &apos;cap_setgid+ep&apos;
new_help public &quot;Any user can execute $BINARY&quot;

new_fmode wheelonly 710 root wheel &apos;cap_setgid+ep&apos;
new_help wheelonly &quot;Only \&quot;wheel\&quot; group members can execute $BINARY&quot;

if getent group podman &gt;/dev/null; then
	new_fmode podmanonly 710 root podman &apos;cap_setgid+ep&apos;
	new_help podmanonly &quot;Only \&quot;podman\&quot; group members can execute $BINARY&quot;
fi

new_fmode restricted 700 root root
new_help restricted &quot;Only root can execute $BINARY&quot;

new_summary &apos;Set the gid mapping of a user namespace&apos;

control_fmode &quot;$BINARY&quot; &quot;$*&quot; || exit 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226451</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2023-05-25 14:49:15 +0300</bug_when>
    <thetext>(Ответ для Dmitry V. Levin на комментарий #12)
&gt; Если хочется сохранить последовательность в list/help, то лучше так:
&gt; 
&gt; #!/bin/sh
&gt; 
&gt; . /etc/control.d/functions
&gt; 
&gt; BINARY=/usr/bin/newgidmap
&gt; 
&gt; new_fmode public 711 root root &apos;cap_setgid+ep&apos;
&gt; new_help public &quot;Any user can execute $BINARY&quot;
&gt; 
&gt; new_fmode wheelonly 710 root wheel &apos;cap_setgid+ep&apos;
&gt; new_help wheelonly &quot;Only \&quot;wheel\&quot; group members can execute $BINARY&quot;
&gt; 
&gt; if getent group podman &gt;/dev/null; then
&gt; 	new_fmode podmanonly 710 root podman &apos;cap_setgid+ep&apos;
&gt; 	new_help podmanonly &quot;Only \&quot;podman\&quot; group members can execute $BINARY&quot;
&gt; fi
&gt; 
&gt; new_fmode restricted 700 root root
&gt; new_help restricted &quot;Only root can execute $BINARY&quot;
&gt; 
&gt; new_summary &apos;Set the gid mapping of a user namespace&apos;
&gt; 
&gt; control_fmode &quot;$BINARY&quot; &quot;$*&quot; || exit 1

Да.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226474</commentid>
    <comment_count>14</comment_count>
    <who name="Nikolay Burykin">burykinne</who>
    <bug_when>2023-05-25 18:15:34 +0300</bug_when>
    <thetext>Оформил и собрал обсуждаемые изменения в 
https://git.altlinux.org/tasks/321847/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226487</commentid>
    <comment_count>15</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2023-05-25 20:36:11 +0300</bug_when>
    <thetext>shadow-1:4.13-alt6 -&gt; sisyphus:

 Thu May 25 2023 Nikolay Burykin &lt;bne@altlinux&gt; 1:4.13-alt6
 - newuidmap/newgidmap: Added check for podmanonly mode (ALT #46220).</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>