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 --]
next 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