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

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

    <bug>
          <bug_id>39778</bug_id>
          
          <creation_ts>2021-03-10 12:41:56 +0300</creation_ts>
          <short_desc>posix_openpt непривилегированным пользователем</short_desc>
          <delta_ts>2023-08-25 15:11:28 +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>setup</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="Stanislav Levin">slev</reporter>
          <assigned_to name="Alexey Gladkov">legion</assigned_to>
          <cc>glebfm</cc>
    
    <cc>ldv</cc>
    
    <cc>legion</cc>
    
    <cc>mogaba2009</cc>
    
    <cc>placeholder</cc>
    
    <cc>rider</cc>
    
    <cc>vt</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>196830</commentid>
    <comment_count>0</comment_count>
    <who name="Stanislav Levin">slev</who>
    <bug_when>2021-03-10 12:41:56 +0300</bug_when>
    <thetext>При указанных ниже настройках по умолчанию `posix_openpt` не выполняется с EACCES.


```
$ ls -la /dev/pts/ptmx 
c--------- 1 root root 5, 2 мар  8 14:28 /dev/pts/ptmx
```

То есть этот вызов будет работать только для CAP_DAC_OVERRIDE.

```
$ grep devpts /etc/fstab
devpts          /dev/pts                devpts  nosuid,noexec,gid=tty,mode=620  0 0
```
По умолчанию опция монтирования devpts `ptmxmode=0000`. 

Это противоречит правилам udev(или наоборот):
```
$ grep -B 2 ptmx /lib/udev/rules.d/50-udev-default.rules 
ACTION!=&quot;add&quot;, GOTO=&quot;default_end&quot;

SUBSYSTEM==&quot;tty&quot;, KERNEL==&quot;ptmx&quot;, GROUP=&quot;tty&quot;, MODE=&quot;0666&quot;
```

В этом случае побеждает fstab. При удалении devpts из fstab, ожидаемо, побеждает правило udev.

Пример использования:
для тестирования использую sshpass, который не может выполнить `posix_openpt` из-под непривилегированного пользователя.

1) не стоит ли привести в соответствие ptmxmode?
2) кто прав? является ли это политикой и какие проблемы могут быть с 666?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196836</commentid>
    <comment_count>1</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2021-03-10 13:56:09 +0300</bug_when>
    <thetext>похоже на какое-то наше древнее legacy. Дима наверняка знает больше.
К тому же:
$ ls -al /dev/ptmx /dev/pts/ptmx
crw-rw-rw- 1 root tty  5, 2 мар 10 13:55 /dev/ptmx
c--------- 1 root root 5, 2 мар  3 17:32 /dev/pts/ptmx</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196837</commentid>
    <comment_count>2</comment_count>
    <who name="Stanislav Levin">slev</who>
    <bug_when>2021-03-10 14:01:55 +0300</bug_when>
    <thetext>Не указал, что это внутри контейнера(Docker):
```
# ls -la /dev/ptmx
lrwxrwxrwx 1 root root 8 Mar  9 20:27 /dev/ptmx -&gt; pts/ptmx
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196912</commentid>
    <comment_count>3</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2021-03-11 18:41:50 +0300</bug_when>
    <thetext>В hasher так:

$ hsh-run --mount=/dev/pts -- ls -ld /dev/ptmx /dev/pts/ptmx
lrwxrwxrwx 1 root root    8 Mar 11 15:30 /dev/ptmx -&gt; pts/ptmx
crw-rw-rw- 1 root  488 5, 2 Mar 11 15:30 /dev/pts/ptmx

hasher-priv$ git grep /dev/pts
...
hasher-priv/mount.c:	{&quot;devpts&quot;, &quot;/dev/pts&quot;, &quot;devpts&quot;, &quot;ro,nosuid,noexec,gid=tty,mode=0620,ptmxmode=0666,newinstance&quot;},</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196913</commentid>
    <comment_count>4</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2021-03-11 18:52:12 +0300</bug_when>
    <thetext>(In reply to Anton Farygin from comment #1)
&gt; похоже на какое-то наше древнее legacy. Дима наверняка знает больше.

Эта строчка в нынешнем виде существует с 2006 года, т.е. задолго до того, как в ядре появились newinstance и ptmxmode.
Кажется, ядерщики тут не вполне справились с обратной совместимостью.
Алексей наверняка знает больше. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196915</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2021-03-11 19:04:55 +0300</bug_when>
    <thetext>(Ответ для Dmitry V. Levin на комментарий #4)
&gt; Эта строчка в нынешнем виде существует с 2006 года, т.е. задолго до того,
&gt; как в ядре появились newinstance и ptmxmode.
&gt; Кажется, ядерщики тут не вполне справились с обратной совместимостью.

Eric W. Biederman рассказывал, что newinstance был большой ошибкой.

&gt; Алексей наверняка знает больше. :)

Люди врут. Не знает.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196916</commentid>
    <comment_count>6</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2021-03-11 19:15:14 +0300</bug_when>
    <thetext>в итоге - поправите в setup ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196917</commentid>
    <comment_count>7</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2021-03-11 19:33:20 +0300</bug_when>
    <thetext>(In reply to Alexey Gladkov from comment #5)
&gt; (Ответ для Dmitry V. Levin на комментарий #4)
&gt; &gt; Эта строчка в нынешнем виде существует с 2006 года, т.е. задолго до того,
&gt; &gt; как в ядре появились newinstance и ptmxmode.
&gt; &gt; Кажется, ядерщики тут не вполне справились с обратной совместимостью.
&gt; 
&gt; Eric W. Biederman рассказывал, что newinstance был большой ошибкой.

Ему не нравился интерфейс newinstance, он его убрал, там по сути теперь всегда newinstance, но зачем он оставил DEVPTS_DEFAULT_PTMX_MODE 0000?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196918</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2021-03-11 19:43:36 +0300</bug_when>
    <thetext>(Ответ для Dmitry V. Levin на комментарий #7)
&gt; Ему не нравился интерфейс newinstance, он его убрал, там по сути теперь
&gt; всегда newinstance, но зачем он оставил DEVPTS_DEFAULT_PTMX_MODE 0000?

Этого я не знаю.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196919</commentid>
    <comment_count>9</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2021-03-11 19:48:47 +0300</bug_when>
    <thetext>На самом деле тут глючное взаимодействие: у /dev/ptmx правильные права, а у /dev/pts/ptmx неправильные.  Если кому-то вздумается сделать вместо /dev/ptmx ссылку на pts/ptmx, как во времена newinstance, то и ptmxmode надо менять на 0666, как во времена newinstance.  hasher эту ссылку делает со времён newinstance, ну так он и за ptmxmode следит.  В обычной системе никто превращать /dev/ptmx в ссылку, по идее, не должен.  Но вот существуют, оказывается, неконсистентные docker-контейнеры.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216746</commentid>
    <comment_count>10</comment_count>
    <who name="Vladimir Mokrozub">mogaba2009</who>
    <bug_when>2022-11-01 08:49:43 +0300</bug_when>
    <thetext>Я столкнулся с похожей проблемой в стартерките для контейнеров:
https://www.altlinux.org/Starterkits/Download#%D0%9C%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_rootfs_%D0%B4%D0%BB%D1%8F_%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%BE%D0%B2

Из-за того, что /dev/ptmx создается с правами 000, пользовательские процессы не могут создавать терминалы в devpts:
$ mc
Cannot open master and slave sides of pty: Нет такого файла или каталога (2)

Я правильно понимаю, что можно просто закомментировать строку в /etc/fstab:
devpts /dev/pts devpts nosuid,noexec,gid=tty,mode=620 0 0

- и сработает правило udev, где ptmxmode=0666? Ничего при этом не сломается?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216747</commentid>
    <comment_count>11</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2022-11-01 09:15:39 +0300</bug_when>
    <thetext>Повторю ещё раз: в ядре, начиная с коммита v4.7-rc2~3, newinstance стал неотключаемым.
В этот же момент DEVPTS_DEFAULT_PTMX_MODE должен был поменяться с прежнего 0000 на 0666, но по невыясненной причине автор коммита Eric W. Biederman этого не сделал, поэтому весь userspace теперь вынужден добавлять ptmxmode=0666 и надеяться, что ядро содержит коммит v4.7-rc2~3.

Применительно к пакету setup это означает, что придётся добавить ptmxmode=0666 и тем самым сломать поддержку более старых ядер.  Наверное, для Сизифа это уже не проблема.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231900</commentid>
    <comment_count>12</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2023-08-25 15:11:28 +0300</bug_when>
    <thetext>setup-2.2.18-alt1 -&gt; sisyphus:

 Fri Aug 25 2023 Alexey Gladkov &lt;legion@altlinux.ru&gt; 2.2.18-alt1
 - /etc/services: update services (ALT#41676, ALT#47001)
 - /etc/protocols: Remove dups for 50 and 51 ports (ALT#35474)
 - /etc/fstab: Add ptmxmode=0666 for devpts (ALT#39778)</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>