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

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

    <bug>
          <bug_id>46462</bug_id>
          
          <creation_ts>2023-06-09 17:22:38 +0300</creation_ts>
          <short_desc>newuidmap и newgidmap завершаются с exitcode 1</short_desc>
          <delta_ts>2023-07-02 21:04:26 +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="Alexandr Shashkin">dutyrok</reporter>
          <assigned_to name="bne@altlinux.org">bne</assigned_to>
          <cc>bne</cc>
    
    <cc>burykinne</cc>
    
    <cc>glebfm</cc>
    
    <cc>ldv</cc>
    
    <cc>legion</cc>
    
    <cc>rider</cc>
    
    <cc>sem</cc>
    
    <cc>shaba</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>227384</commentid>
    <comment_count>0</comment_count>
    <who name="Alexandr Shashkin">dutyrok</who>
    <bug_when>2023-06-09 17:22:38 +0300</bug_when>
    <thetext>========
Системы:
========
Регулярки на Sisyphus (с mate и gnome)
Workstation 10.1 (обновленный до sisyphus)

===============
Версия пакетов:
===============
podman-4.5.0-alt2.x86_64
shadow-submap-4.13-alt6.x86_64

=====================
Шаги воспроизведения:
=====================
Выполнял по этой инструкции: https://www.altlinux.org/Podman
1) apt-get install podman fuse-overlayfs
2) sysctl kernel.unprivileged_userns_clone=1
   echo &apos;kernel.unprivileged_userns_clone=1&apos; &gt;&gt; /etc/sysctl.d/42-podman.conf
3) control newuidmap public
   control newgidmap public
5) usermod --add-subuids 100000-165536 --add-subgids 100000-165536 test
6) От пользователя test: 
   podman system migrate
   podman info 
7) Выполнить, как предлагается здесь: https://github.com/containers/podman/issues/12637#issuecomment-996715101
   $ unshare -U sleep 100 &amp;
   $ newuidmap $! 0 100000 65536 ; echo $?
   $ newgidmap $! 0 100000 65536 ; echo $?
   
==========
Результат:
==========
Шаг (6):
ERRO[0000] running `/usr/bin/newuidmap 8171 0 1000 1 1 100000 65537`:  
Error: cannot set up namespace using &quot;/usr/bin/newuidmap&quot;: exit status 1

Шаг(7):
newuidmap и newgidmap завершается с exitcode = 1

====================
Ожидаемый результат:
====================
Podman работает
newuidmap и newgidmap возвращают exitcode 0

==============
Дополнительно:
==============
На P10 при таких же шагах ошибка не воспроизводится</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227385</commentid>
    <comment_count>1</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2023-06-09 17:27:46 +0300</bug_when>
    <thetext>Похоже на local misconfiguration.
Покажите, пожалуйста, вывод команды &quot;id&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227387</commentid>
    <comment_count>2</comment_count>
    <who name="Alexandr Shashkin">dutyrok</who>
    <bug_when>2023-06-09 17:37:08 +0300</bug_when>
    <thetext>(Ответ для Dmitry V. Levin на комментарий #1)
&gt; Похоже на local misconfiguration.
&gt; Покажите, пожалуйста, вывод команды &quot;id&quot;.

$ id
uid=500(test) gid=500(test) группы=500(test),10(wheel),100(users)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227388</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2023-06-09 17:38:07 +0300</bug_when>
    <thetext>я думал я один такой. у меня такие же проблемы.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227390</commentid>
    <comment_count>4</comment_count>
    <who name="Alexandr Shashkin">dutyrok</who>
    <bug_when>2023-06-09 17:41:03 +0300</bug_when>
    <thetext>(Ответ для Alexandr Shashkin на комментарий #2)
&gt; (Ответ для Dmitry V. Levin на комментарий #1)
&gt; &gt; Похоже на local misconfiguration.
&gt; &gt; Покажите, пожалуйста, вывод команды &quot;id&quot;.
&gt; 
&gt; $ id
&gt; uid=500(test) gid=500(test) группы=500(test),10(wheel),100(users)
Это на обновленном Workstation

А это на регулярке Sisyphus:
$ id
uid=1000(test) gid=1000(test) группы=1000(test),10(wheel),14(uucp),19(proc),22(cdrom),71(floppy),80(cdwriter),81(audio),83(radio),100(users),966(camera),977(video),997(xgrp),998(scanner)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227391</commentid>
    <comment_count>5</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2023-06-09 17:51:51 +0300</bug_when>
    <thetext>(In reply to Alexandr Shashkin from comment #0)
&gt; На P10 при таких же шагах ошибка не воспроизводится

Чем отличается конфигурация p10, помимо версий пакета shadow-submap?  Интересуют все отличия, которые могли повлиять, начиная с podman и заканчивая ядром.
В первую очередь интересует, работает ли podman из p10 в связке с shadow-submap и ядром из Сизифа.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227394</commentid>
    <comment_count>6</comment_count>
    <who name="Gleb F-Malinovskiy">glebfm</who>
    <bug_when>2023-06-09 19:28:20 +0300</bug_when>
    <thetext>Вот это изменение
https://git.altlinux.org/gears/s/shadow.git?p=shadow.git;a=commitdiff;h=5a0a7e1e2c7cb98f4167b3d1339f8b33748a9468
меняет условия в которых эти программы работают в том числе и в режиме public.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227395</commentid>
    <comment_count>7</comment_count>
    <who name="Gleb F-Malinovskiy">glebfm</who>
    <bug_when>2023-06-09 19:41:28 +0300</bug_when>
    <thetext>Эта утилита открывает /etc/login.defs на чтение которого у пользователя нет прав.
openat(AT_FDCWD, &quot;/etc/login.defs&quot;, O_RDONLY)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227396</commentid>
    <comment_count>8</comment_count>
    <who name="Alexandr Shashkin">dutyrok</who>
    <bug_when>2023-06-09 20:05:09 +0300</bug_when>
    <thetext>(Ответ для Gleb F-Malinovskiy на комментарий #7)
&gt; Эта утилита открывает /etc/login.defs на чтение которого у пользователя нет
&gt; прав.
&gt; openat(AT_FDCWD, &quot;/etc/login.defs&quot;, O_RDONLY)

Да, добавление пользователя в группу shadow решило проблему.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227397</commentid>
    <comment_count>9</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2023-06-09 20:22:13 +0300</bug_when>
    <thetext>(In reply to Gleb F-Malinovskiy from comment #6)
&gt; Вот это изменение
&gt; https://git.altlinux.org/gears/s/shadow.git?p=shadow.git;a=commitdiff;
&gt; h=5a0a7e1e2c7cb98f4167b3d1339f8b33748a9468
&gt; меняет условия в которых эти программы работают в том числе и в режиме
&gt; public.

Это однозначно причина регрессии.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228083</commentid>
    <comment_count>10</comment_count>
    <who name="Nikolay Burykin">burykinne</who>
    <bug_when>2023-06-20 16:21:49 +0300</bug_when>
    <thetext>&gt; Это однозначно причина регрессии.

Отчасти. Видимо есть что-то еще.

Сейчас попробовал воспроизвести в p10, но в правилах control использовал свои изменения (с применением capabilities). Ошибка не воспроизвелась.

Я могу откатить в сизифе свои изменения или поставить setuid в public mode, но это исправит только часть проблемы.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228089</commentid>
    <comment_count>11</comment_count>
    <who name="Gleb F-Malinovskiy">glebfm</who>
    <bug_when>2023-06-20 17:06:50 +0300</bug_when>
    <thetext>Да, похоже что открывать login.defs он стал только после вот этого коммита:
https://github.com/shadow-maint/shadow/commit/c464ec55709dc931ba2f24073b8b1a86d5209ab0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228097</commentid>
    <comment_count>12</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2023-06-20 20:21:14 +0300</bug_when>
    <thetext>(In reply to Gleb F-Malinovskiy from comment #11)
&gt; Да, похоже что открывать login.defs он стал только после вот этого коммита:
&gt; https://github.com/shadow-maint/shadow/commit/
&gt; c464ec55709dc931ba2f24073b8b1a86d5209ab0

По идее, коммит &quot;Relax gid checking&quot; не должен был ухудшить ситуацию, так что непонятно, это ли открывание влияет и почему.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228100</commentid>
    <comment_count>13</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2023-06-20 21:11:02 +0300</bug_when>
    <thetext>(In reply to Dmitry V. Levin from comment #12)
&gt; (In reply to Gleb F-Malinovskiy from comment #11)
&gt; &gt; Да, похоже что открывать login.defs он стал только после вот этого коммита:
&gt; &gt; https://github.com/shadow-maint/shadow/commit/
&gt; &gt; c464ec55709dc931ba2f24073b8b1a86d5209ab0
&gt; 
&gt; По идее, коммит &quot;Relax gid checking&quot; не должен был ухудшить ситуацию, так
&gt; что непонятно, это ли открывание влияет и почему.

OK, теперь понятно, getdef_bool() просто делает exit(1), когда не может открыть login.defs, так что да, после этого коммита несуидные newuidmap/newgidmap больше не работают.  Надо либо дать этим утилитам прав, либо вернуть suid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228101</commentid>
    <comment_count>14</comment_count>
    <who name="Gleb F-Malinovskiy">glebfm</who>
    <bug_when>2023-06-20 21:12:02 +0300</bug_when>
    <thetext>(In reply to Nikolay Burykin from comment #10)
&gt; Я могу откатить в сизифе свои изменения или поставить setuid в public mode,
&gt; но это исправит только часть проблемы.

Про часть проблемы я не понимаю.  Вы видите какую-то ещё проблему?
cap_setgid+ep недостаточно для работы shadow 4.13 потому что он открывает на чтение файл /etc/login.defs (права на который 0640 root:root), а если не может открыть его, делает exit 1.

В любом случае, пакет в Сизифе нужно исправить.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228106</commentid>
    <comment_count>15</comment_count>
    <who name="Nikolay Burykin">burykinne</who>
    <bug_when>2023-06-20 22:29:32 +0300</bug_when>
    <thetext>(Ответ для Gleb F-Malinovskiy на комментарий #14)
&gt; (In reply to Nikolay Burykin from comment #10)
&gt; &gt; Я могу откатить в сизифе свои изменения или поставить setuid в public mode,
&gt; &gt; но это исправит только часть проблемы.
&gt; 
&gt; Про часть проблемы я не понимаю.  Вы видите какую-то ещё проблему?
&gt; cap_setgid+ep недостаточно для работы shadow 4.13 потому что он открывает на
&gt; чтение файл /etc/login.defs (права на который 0640 root:root), а если не
&gt; может открыть его, делает exit 1.

Нет. Тут неправильная формулировка.
Под проблемой я имел ввиду изменение, которое привело к тому, что cap_setgid+ep стало недостаточно (потому что в p10 и c10 его достаточно). Мне не очень было понятно почему, но ваш анализ изменений в апстриме, приведеный ранее, всё разъяснил. 
В любом случае это изначально было больше риторическое обращение.

Очевидно, что стоило уделить больше внимания тестированию правил не только в p10 и c10, но и в Сизифе.

&gt; В любом случае, пакет в Сизифе нужно исправить.

Разумеется.
Это всё еще можно решить с помощью capabilities, исправив правило public для newuidmap/newgidmap на:

new_fmode public 711 root root &apos;cap_setuid,cap_dac_read_search+ep&apos;

то есть убрав проверку прав на чтение для этих утилит.

Исправление подготовлю.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228119</commentid>
    <comment_count>16</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2023-06-21 10:18:09 +0300</bug_when>
    <thetext>Почему вы не хотите дать права на чтение login.defs ? Это же решает проблему. Что такого в login.defs, что его нельзя читать обычным пользователям ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228125</commentid>
    <comment_count>17</comment_count>
    <who name="Nikolay Burykin">burykinne</who>
    <bug_when>2023-06-21 10:27:16 +0300</bug_when>
    <thetext>(Ответ для Anton Farygin на комментарий #16)
&gt; Почему вы не хотите дать права на чтение login.defs ? Это же решает
&gt; проблему. Что такого в login.defs, что его нельзя читать обычным
&gt; пользователям ?

Если вопрос ко мне, то я не предлагаю потому что такой режим вроде как &quot;исторически сложился&quot; для этого файла, и наверное на это есть причины (хотя мне тоже очень интересно было бы узнать какие). Но если объективных причин с точки зрения безопасности нет, то полностью согласен o+x на /etc/login.defs намного проще решает проблему чем дополнительные capabilities на newuidmap/newgidmap, и тем более SUID на них же.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228127</commentid>
    <comment_count>18</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2023-06-21 10:35:13 +0300</bug_when>
    <thetext>(In reply to Anton Farygin from comment #16)
&gt; Почему вы не хотите дать права на чтение login.defs ? Это же решает
&gt; проблему. Что такого в login.defs, что его нельзя читать обычным
&gt; пользователям ?

Ответить на этот вопрос на порядки сложнее: надо как минимум проверить, что
* никто не использует login.defs для блокировок,
* информация из login.defs не может быть использована потенциальным злоумышленником, т.е. надо смотреть на каждый параметр и взвешивать, как его значение может быть использовано.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228128</commentid>
    <comment_count>19</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2023-06-21 10:46:50 +0300</bug_when>
    <thetext>Так давайте пойдём таким путём ? у нас, насколько я помню, это уже не первое место где вылезает отсутствие доступа к login.defs.

Ещё, наверное, можно пойти по пути разделения login.defs на те, которые действительно требуются для чтения и не представляют опасности и на те, которые явно не нужны для работы и можно закрыть.

Но это выглядит сложнее, т.к. я не уверен что все читают login.defs через один и тот же интерфейс.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228129</commentid>
    <comment_count>20</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2023-06-21 11:10:33 +0300</bug_when>
    <thetext>(In reply to Anton Farygin from comment #19)
&gt; Так давайте пойдём таким путём ? у нас, насколько я помню, это уже не первое
&gt; место где вылезает отсутствие доступа к login.defs.

Давайте не будем подменять простую задачу более сложной.

Если хочется открыть login.defs на чтение, давайте решать эту задачу отдельно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228130</commentid>
    <comment_count>21</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2023-06-21 11:12:01 +0300</bug_when>
    <thetext>(In reply to Nikolay Burykin from comment #15)
&gt; Это всё еще можно решить с помощью capabilities, исправив правило public для
&gt; newuidmap/newgidmap на:
&gt; 
&gt; new_fmode public 711 root root &apos;cap_setuid,cap_dac_read_search+ep&apos;

Давайте так и сделаем.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228160</commentid>
    <comment_count>22</comment_count>
    <who name="Nikolay Burykin">burykinne</who>
    <bug_when>2023-06-21 17:08:54 +0300</bug_when>
    <thetext>(Ответ для Alexandr Shashkin на комментарий #0)
&gt; ====================
&gt; Ожидаемый результат:
&gt; ====================
&gt; Podman работает
&gt; newuidmap и newgidmap возвращают exitcode 0


Попробуйте пакет с исправлением ошибки из задания:
https://packages.altlinux.org/ru/tasks/323417/

# apt-repo test 323417

Проверил у себя на чистой инсталляции Сизифа, ошибка не повторилась.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228759</commentid>
    <comment_count>23</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2023-07-02 21:04:26 +0300</bug_when>
    <thetext>shadow-1:4.13-alt7 -&gt; sisyphus:

 Wed Jun 21 2023 Nikolay Burykin &lt;bne@altlinux&gt; 1:4.13-alt7
 - newuidmap/newgidmap: Added cap_dac_read_search to all modes (ALT #46462).</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>