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

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

    <bug>
          <bug_id>53858</bug_id>
          
          <creation_ts>2025-04-15 23:28:03 +0300</creation_ts>
          <short_desc>the &quot;system-auth&quot; pam substack still refers to uid 500</short_desc>
          <delta_ts>2026-01-23 17:53:54 +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>pam-config</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="Arseny Maslennikov">arseny</reporter>
          <assigned_to name="Dmitry V. Levin">ldv</assigned_to>
          <cc>ldv</cc>
    
    <cc>placeholder</cc>
    
    <cc>sin</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>263063</commentid>
    <comment_count>0</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2025-04-15 23:28:03 +0300</bug_when>
    <thetext>FWIW, ставлю control:

  # control system-auth
  ldap

В файле из сабжа написано:
  auth		[success=4 perm_denied=ignore default=die]	pam_localuser.so
  auth		[success=1 default=bad]	pam_succeed_if.so uid &gt;= 500 quiet
  auth		[default=1]	pam_permit.so
  auth		substack	system-auth-ldap-only
  auth		[default=1]	pam_permit.so
  auth		substack	system-auth-local-only
  auth		substack	system-auth-common

Чуть более года назад в сизифе предикат &quot;uid &gt;= 500&quot; потерял какой-либо смысл. Надо заменить условие во второй строке на более актуальное.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263064</commentid>
    <comment_count>1</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2025-04-15 23:32:40 +0300</bug_when>
    <thetext>Условие &quot;uid &gt;= 1000&quot; взамен — плохо, и не только по причинам совместимости.

Различие между UID пользователя и uid системной службы (aka &quot;системный пользователь&quot;) по номеру, вообще говоря, не работает, и hasher — яркий тому пример.
Стоит вместо uid &gt;= N использовать, например, предикат &quot;годный логинный шелл или нет&quot;. При беглом взгляде кажется, будто модуль pam_shells ровно это и способен выразить — то есть, он вернёт значение, соответствующее этому предикату.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277729</commentid>
    <comment_count>2</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2025-11-25 00:03:53 +0300</bug_when>
    <thetext>К сожалению, простого механизма узнать &quot;годного&quot; доменного пользователя пока не найдено.
Учитывая, что в systemd появились динамические пользователи, проблема ещё более усложнилась.

При этом модуль pam_shells пока не очень подходит - как следует из man&apos;а: &quot;The auth and account module types are provided&quot;, а нам требуется проверка для всех типов (и для passwd, и для session).

Учитывая новую схему распределения uid&apos;ов и gid&apos;ов в systemd, доменным пользователями не могут быть выделены uid/gid&apos;ы из диапазона 0-65534 (https://systemd.io/UIDS-GIDS/). 

Дополнительно требуется решение проблемы &quot;не позволяющей gdm создать временного пользователя через systemd-userdb после ввода устройства в домен&quot; - проявляется только при доменной аутентификации в gdm, после обновления до gnome-49 и в текущем сизифе и выглядит вот так:

systemd[1]: Starting user@60578.service - User Manager for UID 60578...
(systemd)[7830]: user@60578.service: PAM failed: Authentication failure
(systemd)[7830]: user@60578.service: Failed to set up PAM session: Operation not permitted
(systemd)[7830]: user@60578.service: Failed at step PAM spawning /usr/lib/systemd/systemd: Operation not permitted
systemd[1]: user@60578.service: Main process exited, code=exited, status=224/PAM
systemd[1]: user@60578.service: Failed with result &apos;exit-code&apos;.
systemd[1]: Failed to start user@60578.service - User Manager for UID 60578.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277730</commentid>
    <comment_count>3</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2025-11-25 00:15:26 +0300</bug_when>
    <thetext>(In reply to Evgeny Sinelnikov from comment #2)
&gt; Дополнительно требуется решение проблемы &quot;не позволяющей gdm создать
&gt; временного пользователя через systemd-userdb после ввода устройства в домен&quot;
&gt; - проявляется только при доменной аутентификации в gdm, после обновления до
&gt; gnome-49 и в текущем сизифе и выглядит вот так:
&gt; 
&gt; systemd[1]: Starting user@60578.service - User Manager for UID 60578...
&gt; (systemd)[7830]: user@60578.service: PAM failed: Authentication failure
&gt; (systemd)[7830]: user@60578.service: Failed to set up PAM session: Operation
&gt; not permitted
&gt; (systemd)[7830]: user@60578.service: Failed at step PAM spawning
&gt; /usr/lib/systemd/systemd: Operation not permitted
&gt; systemd[1]: user@60578.service: Main process exited, code=exited,
&gt; status=224/PAM
&gt; systemd[1]: user@60578.service: Failed with result &apos;exit-code&apos;.
&gt; systemd[1]: Failed to start user@60578.service - User Manager for UID 60578.

Новые версии пакета systemd при установке патчат /etc/nsswitch.conf и добавляют модуль userdb; я бы предложил посмотреть в тот файл и в спек systemd. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277731</commentid>
    <comment_count>4</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2025-11-25 00:18:12 +0300</bug_when>
    <thetext>(In reply to Evgeny Sinelnikov from comment #2)
&gt; При этом модуль pam_shells пока не очень подходит - как следует из man&apos;а:
&gt; &quot;The auth and account module types are provided&quot;, а нам требуется проверка
&gt; для всех типов (и для passwd, и для session).
Что нужен session, я могу поверить. А для passwd это зачем?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277732</commentid>
    <comment_count>5</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2025-11-25 00:21:10 +0300</bug_when>
    <thetext>(In reply to Evgeny Sinelnikov from comment #2)
&gt; К сожалению, простого механизма узнать &quot;годного&quot; доменного пользователя пока
&gt; не найдено.
Отличить доменного от локального?
или отличить пользователя от системного уида?
Это две разные задачи, текущая бага о второй из них.

&gt; Учитывая, что в systemd появились динамические пользователи, проблема ещё
&gt; более усложнилась.
Я б не сказал. Оно теперь &quot;по-другому&quot;, да; многим из нас нужно повозиться и разобраться. Но бонусы далее очевидны. В частности, в доменном мире какая-нибудь программа зарегистрирует userdb-провайдера, получающего запросы на сокете &quot;/run/userdb/$name&quot; или как его там, и будет сообщать о своих пользователях через него, и снабжать записи таких пользователей свойством булевого типа, что он доменный.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277733</commentid>
    <comment_count>6</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2025-11-25 00:21:29 +0300</bug_when>
    <thetext>Проблема разобрана.

Раньше мы фильтровали доменных пользователей по схеме:
- входит в /etc/passwd - локальный;
- не входит в /etc/passwd - доменный.

Дополнительно для доменных пользователей выполнялась проверка:
- если у доменного пользователя uid &gt;= 500, то ему можно логиниться;
- если у доменного пользователя uid &lt; 500, то ему можно логиниться нельзя - это &quot;битый&quot; доменный пользователь.

После анализа распределения uid&apos;ов и gid&apos;ов в systemd картина выглядит иначе - все пользователи, у которых uid &lt; 65536, попадают в категорию локальных.

При этом могут быть такие локальные пользователи, которых невозможно вычислить просто по их отсутствию в /etc/passwd. Такие пользователи являются &quot;динамическими&quot;.

Таким образом дополнительная проверка для доменных пользователей меняется:
- если пользователь не входит в /etc/passwd и у него uid &lt; 65536, то это тоже локальный пользователь и его проверяет локальный pam_tcb;
- если пользователь не входит в /etc/passwd и у него uid &gt;= 65536, то это доменный пользователь и его проверяет доменный pam-стек.

______________

При этом остаются два больших и один небольшой диапазоны:
- 524288…1879048191 (1878523904 штук) - Container UID ranges;
- 2147352576…2147418111 (65536 штук) - Foreign UID range;
- 2147483648…4294967294 (2147483647 штук) - HIC SVNT LEONES («здесь обитают драконы»).

Неиспользуемые диапазоны:
- 65536…524287 (458752 штук)
- 1879048192…2147352575 (268304384 штук)
- 2147418112…2147483647 (65536 штук)

Доменные пользователи попадают во все эти диапазоны, хотя ориентироваться стоит на HIC SVNT LEONES, но все текущие инсталляции на это пока никак не рассчитаны.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277734</commentid>
    <comment_count>7</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2025-11-25 00:24:35 +0300</bug_when>
    <thetext>(Ответ для Arseny Maslennikov на комментарий #4)
&gt; (In reply to Evgeny Sinelnikov from comment #2)
&gt; &gt; При этом модуль pam_shells пока не очень подходит - как следует из man&apos;а:
&gt; &gt; &quot;The auth and account module types are provided&quot;, а нам требуется проверка
&gt; &gt; для всех типов (и для passwd, и для session).
&gt; Что нужен session, я могу поверить. А для passwd это зачем?

Проверялось - не работает.

Как зачем это нужен passwd? Вот зачем:
$ passwd 
Current Password: 
New Password:

Оно и так умеет:
$ passwd 
Current Password: 
Password change failed. Server message: Old password not accepted.
passwd: System error</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277735</commentid>
    <comment_count>8</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2025-11-25 00:34:33 +0300</bug_when>
    <thetext>(Ответ для Arseny Maslennikov на комментарий #5)
&gt; (In reply to Evgeny Sinelnikov from comment #2)
&gt; &gt; К сожалению, простого механизма узнать &quot;годного&quot; доменного пользователя пока
&gt; &gt; не найдено.
&gt; Отличить доменного от локального?
&gt; или отличить пользователя от системного уида?
&gt; Это две разные задачи, текущая бага о второй из них.

Да, это понятно. Но решение, которое связано с особенностями динамических пользователей приводит к тому, что мы перестаем проверять &quot;доменность&quot; uid&apos;ов только для системных пользователей. Оно и раньше было по аналогии взято. Теперь локальность пользователя проверяется более ясным образом из спецификации распределения uid&apos;ов в systemd.

Локальные пользователи, очевидно, включают в себя и системных.

&gt; &gt; Учитывая, что в systemd появились динамические пользователи, проблема ещё
&gt; &gt; более усложнилась.
&gt; Я б не сказал. Оно теперь &quot;по-другому&quot;, да; многим из нас нужно повозиться и
&gt; разобраться. Но бонусы далее очевидны. В частности, в доменном мире
&gt; какая-нибудь программа зарегистрирует userdb-провайдера, получающего запросы
&gt; на сокете &quot;/run/userdb/$name&quot; или как его там, и будет сообщать о своих
&gt; пользователях через него, и снабжать записи таких пользователей свойством
&gt; булевого типа, что он доменный.

Это выглядит как заявка сильно на будущее, но интересно, да.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277738</commentid>
    <comment_count>9</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2025-11-25 00:50:34 +0300</bug_when>
    <thetext>Отправил тестовую таску на сборку:
#400962 BUILDING #1 [locked] [test-only] sisyphus pam-config.git=1.9.2-alt1 sssd.git=2.9.7-alt5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278163</commentid>
    <comment_count>10</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2025-11-29 02:09:51 +0300</bug_when>
    <thetext>Сделал новую версию с поддержкой разных вариантов вычисления &quot;локальности&quot; пользователя:

Перенес логику в отдельный модуль - system-check-localuser.

Добавил к нему control:

$ sudo control system-check-localuser help
legacy: legacy local user mode
systemd: systemd local user mode

$ cat /etc/pam.d/system-check-localuser-systemd
#%PAM-1.0

auth    [success=3 perm_denied=ignore default=die]  pam_localuser.so
auth    [success=2 auth_err=ignore default=bad]  pam_succeed_if.so uid &lt; 65536 quiet

account    [success=3 perm_denied=ignore default=die]  pam_localuser.so
account    [success=2 auth_err=ignore default=bad]  pam_succeed_if.so uid &lt; 65536 quiet

password  [success=3 perm_denied=ignore default=die]  pam_localuser.so
password  [success=2 auth_err=ignore default=bad]  pam_succeed_if.so uid &lt; 65536 quiet

session    [success=3 perm_denied=ignore default=die]  pam_localuser.so
session    [success=2 auth_err=ignore default=bad]  pam_succeed_if.so uid &lt; 65536 quiet

$ cat /etc/pam.d/system-check-localuser-legacy
#%PAM-1.0

auth    [success=3 perm_denied=ignore default=die]  pam_localuser.so
auth    [success=ignore auth_err=2 default=bad]  pam_succeed_if.so uid &gt;= 1000 quiet

account    [success=3 perm_denied=ignore default=die]  pam_localuser.so
account    [success=ignore auth_err=2 default=bad]  pam_succeed_if.so uid &gt;= 1000 quiet

password  [success=3 perm_denied=ignore default=die]  pam_localuser.so
password  [success=ignore auth_err=2 default=bad]  pam_succeed_if.so uid &gt;= 1000 quiet

session    [success=3 perm_denied=ignore default=die]  pam_localuser.so
session    [success=ignore auth_err=2 default=bad]  pam_succeed_if.so uid &gt;= 1000 quiet


____________

Получилось сократить объём дублирования проверок:

diff --git a/system-auth-sss.pam b/system-auth-sss.pam
index f91770e25..05714c591 100644
--- a/system-auth-sss.pam
+++ b/system-auth-sss.pam
@@ -1,32 +1,24 @@
 #%PAM-1.0
 
-auth           [success=4 perm_denied=ignore default=die]      pam_localuser.so
-auth           [success=3 auth_err=1 default=bad]      pam_succeed_if.so uid &lt; 65536 quiet
-auth           [default=1]     pam_permit.so
+auth           include         system-check-localuser
 auth           substack        system-auth-sss-only
 auth           [default=1]     pam_permit.so
 auth           substack        system-auth-local-only
 auth           substack        system-auth-common


____________

Отправил на сборку:

#401311 BUILDING #2 [locked] [test-only] sisyphus pam-config.git=1.9.3-alt1 sssd.git=2.9.7-alt6

Суть:

    Move local user detection logic to system-check-localuser include file
    with two configuration variants: legacy mode ensures non-local users
    cannot have UID &lt; 1000, while systemd mode ensures that dynamic users
    (not listed in /etc/passwd) cannot have UID &gt;= 65536. Users present in
    /etc/passwd are always considered local. This provides flexibility in
    handling both traditional and systemd dynamic user schemes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278170</commentid>
    <comment_count>11</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2025-11-29 17:47:06 +0300</bug_when>
    <thetext>(In reply to Evgeny Sinelnikov from comment #7)
&gt; (Ответ для Arseny Maslennikov на комментарий #4)
&gt; &gt; (In reply to Evgeny Sinelnikov from comment #2)
&gt; &gt; &gt; При этом модуль pam_shells пока не очень подходит - как следует из man&apos;а:
&gt; &gt; &gt; &quot;The auth and account module types are provided&quot;, а нам требуется проверка
&gt; &gt; &gt; для всех типов (и для passwd, и для session).
&gt; &gt; Что нужен session, я могу поверить. А для passwd это зачем?
&gt; 
&gt; Проверялось - не работает.
&gt; 
&gt; Как зачем это нужен passwd? Вот зачем:
&gt; $ passwd 
&gt; Current Password: 
&gt; New Password:
&gt; 
&gt; Оно и так умеет:
&gt; $ passwd 
&gt; Current Password: 
&gt; Password change failed. Server message: Old password not accepted.
&gt; passwd: System error
А! здесь, чтобы решить, какой компонент должен обновлять секретики, тоже нужно вычислять такое же условие, как и в других стеках. Понял, спасибо :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278172</commentid>
    <comment_count>12</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2025-11-29 18:17:16 +0300</bug_when>
    <thetext>(In reply to Evgeny Sinelnikov from comment #10)
&gt; Сделал новую версию с поддержкой разных вариантов вычисления &quot;локальности&quot;
&gt; пользователя:
&gt; 
&gt; Перенес логику в отдельный модуль - system-check-localuser.
&gt; 
&gt; Добавил к нему control:
&gt; 
&gt; $ sudo control system-check-localuser help
&gt; legacy: legacy local user mode
&gt; systemd: systemd local user mode
&gt; ____________
&gt; 
&gt; Получилось сократить объём дублирования проверок:
&gt; 
&gt; diff --git a/system-auth-sss.pam b/system-auth-sss.pam
&gt; index f91770e25..05714c591 100644
&gt; --- a/system-auth-sss.pam
&gt; +++ b/system-auth-sss.pam
&gt; @@ -1,32 +1,24 @@
&gt; ____________
&gt; 
&gt; Отправил на сборку:
&gt; 
&gt; #401311 BUILDING #2 [locked] [test-only] sisyphus pam-config.git=1.9.3-alt1
&gt; sssd.git=2.9.7-alt6
&gt; 
&gt; Суть:
&gt; 
&gt;     Move local user detection logic to system-check-localuser include file
&gt;     with two configuration variants: legacy mode ensures non-local users
&gt;     cannot have UID &lt; 1000, while systemd mode ensures that dynamic users
&gt;     (not listed in /etc/passwd) cannot have UID &gt;= 65536. Users present in
&gt;     /etc/passwd are always considered local. This provides flexibility in
&gt;     handling both traditional and systemd dynamic user schemes.
Круто, благодарю! Для моего кейса должно заработать.

Испытываю лёгкую горечь от того, что не-legacy вариант называется &quot;systemd&quot; и тем самым раздражает некоторых, но предложить вариант строго лучше не получается. Ну, может быть, &quot;providers&quot;, но пока не очевидно, в чём связь.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278318</commentid>
    <comment_count>13</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2025-12-02 22:42:07 +0300</bug_when>
    <thetext>Подготовил сборку:
#401311 EPERM #6 sisyphus pam-config.git=1.9.3-alt1 sssd.git=2.9.7-alt7

Ожидаю ревью и/или одобрения pam-config.
В целом, не живой системе всё проверено разных режимах.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278752</commentid>
    <comment_count>14</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2025-12-09 20:53:34 +0300</bug_when>
    <thetext>(In reply to Evgeny Sinelnikov from comment #13)
&gt; Подготовил сборку:
&gt; #401311 EPERM #6 sisyphus pam-config.git=1.9.3-alt1 sssd.git=2.9.7-alt7
&gt; 
&gt; Ожидаю ревью и/или одобрения pam-config.
&gt; В целом, не живой системе всё проверено разных режимах.

Добрался до наших систем. Там (в терминах этого задания) уместна настройка `system-check-localuser legacy`.

Ставлю два пакета из задания, переключаю контрольку. После этого логинюсь нелокальным пользователем; авторизует и обламывает сеанс.
Вывод `journalctl -f -u getty@tty3`:
  Dec 09 20:42:13 teacher.po.*.*.* systemd[1]: Started getty@tty3.service - Getty on tty3.
  Dec 09 20:42:44 teacher.po.*.*.* login[2610681]: pam_ldap(login:auth): nslcd authentication; user=s0xxxxxyz
  Dec 09 20:42:44 teacher.po.*.*.* login[2610681]: pam_ldap(login:auth): authentication succeeded
  Dec 09 20:42:45 teacher.po.*.*.* login[2610681]: unable to open session: Permission denied
  Dec 09 20:42:45 teacher.po.*.*.* login[2610681]: pam_open_session: unable to open session
  Dec 09 20:42:45 teacher.po.*.*.* systemd[1]: getty@tty3.service: Deactivated successfully.
  Dec 09 20:42:45 teacher.po.*.*.* systemd[1]: getty@tty3.service: Scheduled restart job, restart counter is at 6.
  Dec 09 20:42:45 teacher.po.*.*.* systemd[1]: Started getty@tty3.service - Getty on tty3.
При этом:
  # getent passwd s0xxxxxyz | cut -d: -f3
  11884</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278754</commentid>
    <comment_count>15</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2025-12-09 21:21:42 +0300</bug_when>
    <thetext>(In reply to Arseny Maslennikov from comment #14)
&gt; (In reply to Evgeny Sinelnikov from comment #13)
&gt; &gt; Подготовил сборку:
&gt; &gt; #401311 EPERM #6 sisyphus pam-config.git=1.9.3-alt1 sssd.git=2.9.7-alt7
&gt; &gt; 
&gt; &gt; Ожидаю ревью и/или одобрения pam-config.
&gt; &gt; В целом, не живой системе всё проверено разных режимах.
&gt; 
&gt; Добрался до наших систем. Там (в терминах этого задания) уместна настройка
&gt; `system-check-localuser legacy`.
&gt; 
&gt; Ставлю два пакета из задания, переключаю контрольку. После этого логинюсь
&gt; нелокальным пользователем; авторизует и обламывает сеанс.
А на аналогичной стендовой машине, тем не менее, заработало; так что дело может быть и не в пакете pam-config. Буду ещё смотреть.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278755</commentid>
    <comment_count>16</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2025-12-09 22:03:25 +0300</bug_when>
    <thetext>Да, поведение не должно измениться. Так что проблема в конфигурации.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278756</commentid>
    <comment_count>17</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2025-12-09 22:05:00 +0300</bug_when>
    <thetext>Только один случай могу предположить, когда поведение будем иным - если uid&apos;ы нелокальных пользователей окажутся в диапазоне от 500 до 999.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279090</commentid>
    <comment_count>18</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2025-12-15 21:46:57 +0300</bug_when>
    <thetext>Если нет возражений, прошу одобрить pam-config в задании:
$ ssh girar task show 401311 | grep pam-config
 140:dir=/people/sin/packages/pam-config.git
 140:pkgname=pam-config</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280394</commentid>
    <comment_count>19</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2026-01-19 04:42:02 +0300</bug_when>
    <thetext>Внёс ряд правок.

1. Упростил схему проверки с трёх до двух правил.
2. Добавил подробные комментарии в модули pam-стека для нелокальных пользователей.
3. Зафиксировал логику принятия решений о &quot;нелокальности&quot;.
4. Вернул поведение в legacy режиме к более соответствующему исходному.

Подготовил и предварительно потестировал новую сборку:
#401311 EPERM #8 [locked] sisyphus pam-config.git=1.9.3-alt1 sssd.git=2.9.7-alt7

___

Пример с сокращениями:

# cat /etc/pam.d/system-auth-sss
#%PAM-1.0
#
# Hybrid authentication with conditional branching.
# The &apos;system-check-localuser&apos; module determines the authentication path:
# - Local users (in /etc/passwd) are processed by the &apos;local-only&apos; substack.
# - Non-local users with UID meeting a specific threshold are processed by the
#   &apos;sss-only&apos; substack.
# - Other cases are handled according to the router&apos;s mode (legacy or systemd).
#
# Post-condition stack summary:
#
# Condition                        | Action                    | Rule
# ----------------------------------------------------------------------------
# Local user (or treated as local) | Proceeds to the next line | &apos;local-only&apos;
# Specific non-local user          | Jumps over two lines      | &apos;method-only&apos;
# Critical failure (default=bad)   | Marks the stack as failed | &apos;local-only&apos;
# Termination (default=die)        | Entire authentication stack terminates.

auth		include		system-check-localuser
auth		substack	system-auth-local-only
auth		[default=1]	pam_permit.so
auth		substack	system-auth-sss-only
auth		substack	system-auth-common

[...]


$ cat /etc/pam.d/system-check-localuser-systemd 
#%PAM-1.0
#
# Authentication router (Systemd dynamic mode).
# Directs authentication flow, accounting for systemd dynamic users (not in
# /etc/passwd). UID &lt; 65536 is the threshold for systemd dynamic users.
#
# Process:
# 1. Check if user exists locally (pam_localuser.so).
#    - Exists: Proceed to the next line in parent stack -&gt; &apos;local-only&apos; substack.
#    - Does not exist: Continue to step 2.
#
# 2. Check UID &gt;= 65536 (pam_succeed_if.so).
#    - UID &gt;= 65536: Skip two lines in parent -&gt; &apos;method-only&apos; substack.
#    - UID &lt; 65536: Proceed to next line in parent -&gt; &apos;local-only&apos; substack.
#
# Summary for parent stack:
#
# Condition                                      | Path in Parent Stack
# ---------------------------------------------------------------------
# User exists in /etc/passwd                     | -&gt; &apos;local-only&apos;
# User not in /etc/passwd, UID &gt;= 65536          | -&gt; &apos;method-only&apos;
# User not in /etc/passwd, UID &lt; 65536 (dynamic) | -&gt; &apos;local-only&apos;

auth		[success=1 perm_denied=ignore default=die]	pam_localuser.so
auth		[success=2 auth_err=ignore default=bad]	pam_succeed_if.so uid &gt;= 65536 quiet

[...]


$ cat /etc/pam.d/system-check-localuser-legacy 
#%PAM-1.0
#
# Authentication router (Legacy mode).
# Directs authentication flow based on user existence in /etc/passwd and UID.
# UID &gt;= 1000 is the threshold for &quot;regular&quot; non-local users.
#
# Process:
# 1. Check if user exists locally (pam_localuser.so).
#    - Exists: Proceed to the next line in parent stack -&gt; &apos;local-only&apos; substack.
#    - Does not exist: Continue to step 2.
#
# 2. Check UID &gt;= 1000 (pam_succeed_if.so).
#    - UID &gt;= 1000: Skip two lines in parent -&gt; &apos;method-only&apos; substack.
#    - UID &lt; 1000: Return &apos;bad&apos; -&gt; Authentication fails.
#
# Summary for parent stack:
#
# Condition                            | Path in Parent Stack
# -----------------------------------------------------------
# User exists in /etc/passwd           | -&gt; &apos;local-only&apos;
# User not in /etc/passwd, UID &gt;= 1000 | -&gt; &apos;method-only&apos;
# User not in /etc/passwd, UID &lt; 1000  | -&gt; FAIL (bad)

auth		[success=1 perm_denied=ignore default=die]	pam_localuser.so
auth		[success=2 default=bad]	pam_succeed_if.so uid &gt;= 1000 quiet

[...]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280788</commentid>
    <comment_count>20</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2026-01-23 17:53:54 +0300</bug_when>
    <thetext>pam-config-1.10.0-alt1 -&gt; sisyphus:

Thu Jan 22 2026 Evgeny Sinelnikov &lt;sin@altlinux&gt; 1.10.0-alt1
- system-check-localuser.control: local user detection method.
- system-auth-chooser (closes: #53858):
  + update system UID validation range (from UID &lt; 500 to UID &lt; 1000)
  + extract local user check into separate module system-check-localuser
  + add systemd dynamic user support
  + add detailed in-file documentation</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>