ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Arseny Maslennikov <arseny@altlinux.org>
To: devel@lists.altlinux.org
Subject: [devel] NobodySubjectPolicy draft
Date: Wed, 15 Nov 2023 16:00:56 +0300
Message-ID: <ZVTBCLVCmMnpMpJ6@cello> (raw)

[-- Attachment #1: Type: text/plain, Size: 6411 bytes --]

Hi!

(Видимо, потребуется проходить процедуру PolicyPolicy, но писать статью
на вики и воевать с разметкой MediaWiki сейчас некогда, так что начнём
обсуждение этим письмом, а страницу по его тексту составим позже)

=== Введение ===

Как известно, в файле passwd по умолчанию в наших системах присутствуют
пользователь и группа "nobody".

Одно время в кругу разработчиков и администраторов ходила мода считать
этого пользователя наименее привилегированным, будто ему почти ничего
нельзя: в ФС почти нет файлов, ему доступных, у него нет логин-шелла,
под ним нельзя запустить десктоп штатными средствами, ... Из этого
выводили ошибочное следствие, что какой-нибудь нетребовательный
процесс-службу можно запускать прямо под nobody, чтобы отсечь ему доступ
к "более важным" службам. Как только таких сервисов становится больше
одного, оказывается, что все они работают с общими привилегиями, могут
слать друг другу сигналы и т. д., то есть недостаточно изолированы друг
от друга. Им просто следует работать под собственными системными UID, а
концепция "наименее привилегированного uid" не имеет смысла.

В ядре Linux достаточно давно есть понятие overflowuid/overflowgid:
зарезервированное значение uid и gid, которое используется, чтобы
обозначить в одной подсистеме непредставимые значения uid и gid в
файлах из другой подсистемы. Например, в файловых системах с
16-разрядными полями uid и gid вместо невлезающего значения будет
записан overflowuid/overflowgid. Другой пример: NFS-клиент
может представлять рута на клиентской машине overflowuid-ом на сервере.
Разнородные апстримы сходятся на том, чтобы зафиксировать в качестве
этого значения число ((uint16_t)-2), оно же 65534, дефолт в ядре, и
обозвать этого пользователя nobody.

Вообще говоря, под пользователем nobody и группой nobody в системе не
должно работать ничего, а в ФС на несъёмных устройствах хранения не должно
создаваться файловых объектов с такими uid и gid. Для того, чтобы это
гарантировать, следует ввести автоматические проверки на этапе
сборки пакетов, а лучше даже во время работы системы (что-то вроде
seccomp-фильтра на всех процессах, запрещающего setuid и setgid в этого
пользователя), но не всё сразу.

=== Предложение ===

Вношу следующее предложение:
- Сменить пользователю и группе nobody численный идентификатор с 99 на
  65534. Для обозначения 99-го оставить другое имя, например, _nobody99;
- Передать /var/nobody этому самому _nobody99;

Для пакетов в Sisyphus:
- Запретить установку файловых объектов под nobody с пакетами;
- Рекомендовать мейнтейнерам не допускать, чтобы собираемые ими
  системные службы исполняли код под nobody;
- Рекомендовать администраторам не запускать процессы под юзером и группой
  nobody.

=== Footprint ===

Я взялся выявить пакеты, которые по ошибке собираются или
устанавливаются так, чтобы работать под nobody:

- Упоминают username nobody в тексте значащей части спека:
  bozohttpd	george @everybody
  freeipa	slev sem sin
  kf5-kdesu	zerg
 
Все они устанавливают в систему либо файлы под nobody, либо инструкции
для процессов в виде инит-скриптов, юнитов или частей sshd-конфига.

Вот этот пакет зачем-то пытается ставить в систему исполнимый бинарник с setgid nobody:
  kf5-kdesu	zerg
Забавно, что этот бинарник после установки в хешерницу всё же оказывается 2711/root/root.
Я планирую запретить так делать на уровне sisyphus_check.
 
- Используют username nobody при работе и при этом как-то упоминают nobody в спеке:
  checkinstall-helper-sh-safely	imz @everybody
В этом конкретном случае явный вред от того, что checkinstall-нагрузка
работает под nobody, представляется мне малым, но с точки зрения
уменьшения ментальной нагрузки ему лучше тоже иметь своего сист.
пользователя.

Приветствую вопросы и предложения.

Спасибо!

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

             reply	other threads:[~2023-11-15 13:00 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-15 13:00 Arseny Maslennikov [this message]
2023-11-15 13:42 ` Sergey V Turchin
2023-11-15 17:47   ` Arseny Maslennikov
2023-11-15 17:52     ` Arseny Maslennikov
2023-11-16  5:39       ` [devel] UserGroupPolicy ? Anton Farygin
2023-11-20  8:49         ` Arseny Maslennikov
2023-11-20  9:20           ` Anton Farygin
2023-11-20 12:25             ` Alexey Shabalin
2023-11-20 14:15               ` [devel] UID/GID pinning for packaged services Arseny Maslennikov
2023-11-20 14:36                 ` Denis Medvedev
2023-11-20 15:48                   ` Dmitry V. Levin
2023-11-16  6:55       ` [devel] NobodySubjectPolicy draft Sergey V Turchin
2023-11-16  7:57         ` Anton Farygin
2023-11-16  8:03           ` Sergey V Turchin
2023-11-16  8:33             ` Anton Farygin
2023-11-16  8:41               ` Sergey V Turchin
2023-11-16  8:52                 ` Anton Farygin
2023-11-16  8:58                   ` Sergey V Turchin
2023-11-16  7:02     ` Sergey V Turchin
2023-11-20  8:23 ` Sergey V Turchin
2023-11-20  8:41   ` Arseny Maslennikov
2023-11-20 11:22 ` Arseny Maslennikov
2023-11-22 11:56 ` Arseny Maslennikov
2023-12-19 17:51 ` Arseny Maslennikov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZVTBCLVCmMnpMpJ6@cello \
    --to=arseny@altlinux.org \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git