LINUX.ORG.RU

Леннарт Поттеринг анонсировал run0 — альтернативу sudo

 , ,


1

4

Леннарт Поттеринг, главный разработчик systemd, объявил на своём канале Mastodon о своей новой инициативе: команде run0, призванной заменить sudo в деле повышения привилегий пользователя. Планируется, что run0 войдёт в состав systemd 256.

По словам автора:

В systemd появилась новая утилита под названием run0. Или, точнее, это не новая утилита, а давно существующая команда systemd-run, но при запуске под именем run0 (через символическую ссылку) она ведёт себя во многом как старый добрый sudo. Только с одним отличием: она не испольует SUID. Вместо этого она просто просит менеджер сервисов запустить команду или шелл под UID’ом нужного пользователя. Она выделяет для этого новый псевдотерминал и затем переносит данные между исходным терминалом и новым псевдотерминалом. Иначе говоря, указанная пользователем команда выполняется в изолированном контексте, отпочкованном от PID 1 и не наследующем никакого контекста от клиента (точнее, $TERM мы переносим, но как явное исключение).

Можно сказать, что run0 больше походит на ssh, чем на sudo.

Эту утилиту использовать куда приятнее, чем sudo. К примеру, по умолчанию она подсвечивает фон терминала красным, пока вы работаете с повышенными привилегиями. Это служит мягким напоминанием о том, что вы пока что не сбросили привилегии обратно, и соответствующим образом помечает вывод всех команд, выполненных с повышенными привилегиями.

>>> Подробности

anonymous

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 1)

Ответ на: комментарий от Shadow

На макось надо уходить. Сертифицированный юникс. Один из немногих. Винду уже на юникс давно не сертифицируют.

vbr ★★★
()

простите... вы забыли где леня щас работает?!

sunjob ★★★★
()
Ответ на: комментарий от kirill_rrr

Просто конфиг нужен удобный и возможно скрипт с симлинком.

По этой же логике, абсолютно любой локальный сервис можно переделать в судо. И ссшд - далеко не самый лучший вариант здесь, так как зачем нам для этого TCP-сокет? Такие вещи лучше, как минимум, через локальный юникс-сокет запрашивать, а ещё лучше - через дбас (который через локальный сокет, вроде, и ходит как раз). И есть сервисы, которые уже слушают дбас, а ссшд, вроде как, не входит в их список. Соответственно, лучше было их переделывать. А Лёня и сделал как раз через дбас, если я правильно понял.

anonmyous
()
Ответ на: комментарий от ssh2

Ну приток-то будет, но как увидят что «в линуксе так было лет двадцать назад!!!11», так и свалят обратно на свою винду. (%

Вначале «ААААА, НАДА ВАЛИТЬ С СЮСТЕМДЭ!!!11», а потом «а давайте сделаем аналог systemd для FreeBSD!»

mord0d ★★★★★
()
Ответ на: комментарий от firkax

например из vi можно запускать шелл

… или просто подредактировать /etc/passwd & /etc/shadow. По этому нормальный человек никогда не будет обычным юзерам давать возможность запускать через судо что-либо. Судо нужен, в первую очередь, для админа, чтобы ему под рутом всю жизнь ни сидеть.

anonmyous
()

Про sudo:

It has a complicating configuration language, loadable plugins (ldap!), hostname matches and so on and so on.

Про run0:

run0 doesn’t implement a configuration language of its own btw (i.e. no equivalent of /etc/sudoers). Instead, it just uses polkit for that, i.e. how we these days usually let unpriv local clients be authorized by priv servers.

Из man polkit:

Rules files are written in the JavaScript programming language and interface with polkitd through the global polkit object (of type Polkit).

Я, конечно, понимаю, что /etc/sudoers парсится бинарником sudo c SUID, а polkitd может правила выполнять без привелегий. Но выдавать это за упрощение как-то дико.

Belkrr
()
Ответ на: комментарий от Kolins

lilyterm из коробки умеет менять цвет названия вкладки при запуске рутового процесса.

wandrien ★★
()

Отлично - давно пора было сделать удобный враппер для systemd-run

zabbal ★★★★★
()
Ответ на: комментарий от kirill_rrr

Если я правильно понял новость с опеннета

Очень сомневаюсь - тебе, как обычно, нечем.

это вообще не sudo

Офигеть ты наблюдательный конечно: Леннарт про это явно говорит в анонсе.

игнорируя все переменные окружения

Все кроме $TERM

это преподносится как секюрность и вообще большой плюс

Так и есть - специалистам по безопасности это очевидно.

zabbal ★★★★★
()
Ответ на: комментарий от anonmyous

Наверняка никаких проблем это действительно не решает

Это повышает безопасность системы уменьшая поверхность атаки.

такой вариант логически сам собой напрашивался.

Идея и вправду лежит на поверхности: https://tim.siosm.fr/blog/2023/12/19/ssh-over-unix-socket/

zabbal ★★★★★
()
Ответ на: комментарий от Ves

А как ты сделал. что у тебя sudo меняет промпт?

 % which sudo
sudo: Command not found.

Промпт меняет шелл. Для tcsh:

alias cwdcmd 'printf "\\033]0\;${user}@${HOST}\:\ \($?\)\ ${cwd}\\007"'
alias precmd '@ n = ( (${?} == 0) + 31 ); set r; if(${?REMOTEHOST} == 1) set r = "R"; set prompt = "\ %{\033[30;1m%}${r}%{\033[0m%}%{\033[${n};1m%}%#%{\033[0m%}\ "; unset n r; cwdcmd'
mord0d ★★★★★
()
Ответ на: комментарий от sanyodesu

Потому что, например, doas такое не умеет

Умеет. Я так себе прописал чтобы рутовый пароль для выключения не вводить для /sbin/poweroff и /sbin/reboot


cat /etc/doas.conf
permit nopass :wheel as root cmd /sbin/poweroff
permit nopass :wheel as root cmd /sbin/reboot

vbcnthfkmnth123 ★★★★★
()
Ответ на: комментарий от Belkrr

Я, конечно, понимаю, что /etc/sudoers парсится бинарником sudo c SUID, а polkitd может правила выполнять без привелегий

Ну раз понимаешь, какие ещё вопросы-то? That’s exactly the point.

intelfx ★★★★★
()
Ответ на: комментарий от sanyodesu

А этот ваш run0 позволяет так делать?

Да, через правила polkit.

intelfx ★★★★★
()
Ответ на: комментарий от mord0d

Вначале «ААААА, НАДА ВАЛИТЬ С СЮСТЕМДЭ!!!11», а потом «а давайте сделаем аналог systemd для FreeBSD!»

Вроде уже пытались. Не взлетело.

wandrien ★★
()
Ответ на: комментарий от wandrien

Вначале «ААААА, НАДА ВАЛИТЬ С СЮСТЕМДЭ!!!11», а потом «а давайте сделаем аналог systemd для FreeBSD!»

Вроде уже пытались.

ЕМНИП, там дальше предложения дело не дошло. Или я плохо искал?

Не взлетело.

И слава Котоне! \ö/

mord0d ★★★★★
()
alias sudo=run0

А что плохого? systemd-boot миллион лет как встроенный, но все ставят гроб, даже не зная, что он им не нужен

❯ run0
zsh: correct 'run0' to 'zrun' [nyae]? n
zsh: command not found: run0

❯ yay -Qi systemd
Found existing alias for "yay -Qi". You should use: "yaloc"
Name            : systemd
Version         : 255.5-4
...
rtxtxtrx
()
Последнее исправление: rtxtxtrx (всего исправлений: 1)
Ответ на: комментарий от rtxtxtrx

systemd-boot загрузит netbsd, freebsd и windows?

а как насчёт загрузочной флешки, с которой ОС запускается на любом писюке, выпущенном за последние 20 лет?

wandrien ★★
()
Ответ на: комментарий от wandrien

а я и не говорил за всех.

но все ставят гроб, даже не зная, что он им не нужен

из этого оное не вытекает

rtxtxtrx
()
Ответ на: комментарий от Belkrr

polkit

systemd, microsoft, шindows…

как-то polkit в концепцию системды как рака, захватывающего линапсы не вписывается. его не поттер разрабатывал

rtxtxtrx
()
Ответ на: комментарий от kirill_rrr

тебе надо запустить процесс в текущем сеансе с текущими настройками в комплексе с текущим окружением, просто с правами повыше

Такое нужно примерно никогда - вот запуск процесса в изолированном окружении с повышенными правами зачастую необходим. И это именно то что делает run0

zabbal ★★★★★
()
Ответ на: комментарий от kirill_rrr

чтобы системд соглашался писать обычные человекочитаемые логи

Именно их он и пишет. То что человекообразные обезьяны не могут их прочитать это не проблема людей. И уж тем более не проблема systemd.

zabbal ★★★★★
()
Ответ на: комментарий от anonmyous

Да ну что за чепуха, поднимать ссшд только ради замены судо?

Для тех систем где он уже поднят это очень даже актуально.

Фаерволы настраивать?

Зачем? Он прекрасно работает с unix socket

Кто такое вообще придумал?

Timothée Ravier

Да и клиент новый понадобится

С какого перепугу?

помимо патчей сервеной части.

А это тебе нахрена?

zabbal ★★★★★
()
Ответ на: комментарий от wandrien

Если тебе нужно грузить одним загрузчиком несколько разных систем – не использую systemd-boot, делов-то

hateWin ★☆
()
Ответ на: комментарий от hateWin

Да он просто добавляет в меню другие записи из nvram. Те грузить будет все. У него ограничение лишь в том, что нельзя через конфиги загрузить без извращений efi-приложения с другого раздела. А вот гроб это умеет.

rtxtxtrx
()
Последнее исправление: rtxtxtrx (всего исправлений: 1)
Ответ на: комментарий от wandrien

запилил возможность при помощи systemd запускать от рута интерактивные приложения в деаттачнутом терминале а ля screen

А зачем если уже есть screen?

zabbal ★★★★★
()
Ответ на: комментарий от Kolins

Неужели нельзя сделать это с обычным sudo поправив .bashrc?

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

zabbal ★★★★★
()
Ответ на: комментарий от Shadow

Как ничего? На Винду уйдем.

А ты разве ещё не там? Ты ж всегда был виндузятником с дуалбутом сколько я тебя тут помню.

zabbal ★★★★★
()
Ответ на: комментарий от vbr

На макось надо уходить.

Там же launchd есть - который максимально похож на systemd. Хотя фимозные могут и не заметить конечно :)

zabbal ★★★★★
()
Ответ на: комментарий от mord0d

Ну, такое дефолту во всех шеллах, наверное. Я думал, что ты как-то сделал, что пишешь sudo и тут же волшебным образом меняется промпт, после которого ты sudo написал :-)

Тут же речь идет об аналоге судо. И что если написать

% less file
% run0 less file

то во втором случае ты будешь листать файл на красном фоне, и, типа, будешь осторожнее жать там ‘!’

Ves
()
Ответ на: комментарий от anonmyous

Такие вещи лучше, как минимум, через локальный юникс-сокет запрашивать

Так и делают.

А Лёня и сделал как раз через дбас, если я правильно понял.

Скорее через https://varlink.org/ если я не путаю.

zabbal ★★★★★
()
Ответ на: комментарий от Belkrr

Но выдавать это за упрощение как-то дико.

С чего бы вдруг? Правила polkit и их парсер уже присутствуют на любой современной системе GNU/Linux. Если при этом удастся выкинуть с этой системы кривой и устаревший формат конфигов sudo это однозначно будет упрощением.

zabbal ★★★★★
()
Ответ на: комментарий от zabbal

Правила polkit и их парсер уже присутствуют на любой современной системе GNU/Linux.

Бгг

wandrien ★★
()
Ответ на: комментарий от wandrien

все ставят гроб, даже не зная, что он им не нужен

systemd-boot загрузит netbsd, freebsd и windows?

Если тебе нужно загружать netbsd и freebsd — значит, ты знаешь, зачем он тебе нужен, и этот комментарий не про тебя.

intelfx ★★★★★
()
Ответ на: комментарий от Ves

пишешь sudo и тут же волшебным образом меняется промпт, после которого ты sudo написал :-)

Я на zsh подобное делал для rm[ \t]+-[^ \t]*[rR].*.

Тут же речь идет об аналоге судо. И что если написать

% less file
% run0 less file

то во втором случае ты будешь листать файл на красном фоне, и, типа, будешь осторожнее жать там ‘!’

Это для тех, у кого память как у страуса, что запустил less и сразу забыл где находишься, а понять окружение из контекста — слишком сложно. (%

Куда больше шансов промахнуться хостом, чем юзером.

mord0d ★★★★★
()
Ответ на: комментарий от Ves

А как ты сделал. что у тебя sudo меняет промпт?

А никак - он sudo с su перепутал :-D

zabbal ★★★★★
()
Ответ на: комментарий от wandrien

systemd-boot загрузит netbsd, freebsd и windows?

На кой хрен этот хлам нужен?

Хотя по мне и systemd-boot избыточен - достаточно EFISTUB.

zabbal ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.