Как использовать Run0 в Linux

Фотография, показывающая крупный план экрана ноутбука.

Run0 — это новая и инновационная программа повышения привилегий для дистрибутивов Linux на базе Systemd. Она предоставляет легковесную и “безконфигурационную” альтернативу традиционным приложениям повышения привилегий, таким как sudo и doas. Здесь мы покажем вам основы использования Run0 для повышения привилегий команд для вашей системы Linux.

Содержание

  • Как запускать программы от имени другого пользователя
  • Как переключиться на оболочку другого пользователя
  • Как настроить текущую сессию Run0
  • Как группировать сессии Run0
  • Как выполнять команды в контейнерах Systemd с помощью Run0

Перед этим вы можете узнать, что такое Run0 и чем оно отличается от sudo.

Как запускать программы от имени другого пользователя

Одно из самых распространенных применений приложений повышения привилегий — это выполнение команд от имени пользователя root. В этом отношении для доступа к пользователю root в Run0 необходимо добавить run0 перед командой, которую вы хотите выполнить. Например, следующее создаст новую папку в каталоге, доступном только для root:

run0 mkdir/etc/maketecheasier

Это вызовет либо запрос пароля в CLI, либо небольшое окно GUI с просьбой ввести пароль текущего пользователя.

Скриншот, показывающий запрос пароля для Run0.

Подобно sudo и doas, Run0 также может переключаться на не-root пользователя при выполнении команд. Для этого добавьте флаг --user, за которым следует имя пользователя, от имени которого вы хотите выполнить команду:

run0 --user=alice /home/alice/alice-program.sh

Введите пароль для пользователя, на которого вы переключаетесь, затем нажмите Enter.

Как переключиться на оболочку другого пользователя

Еще одной ключевой частью приложения повышения привилегий является его способность переключать пользователя на оболочку root. Это дает вам возможность взаимодействовать с вашей системой как с пользователем root и выполнять более сложные команды из CLI.

В Run0 вы можете сделать это, запустив программу без дополнительных аргументов.

Так же, как и при запуске программ от имени root, также возможно использовать Run0 с флагом --user, чтобы начать сеанс оболочки от имени конкретного пользователя:

run0 --user=alice

Кроме того, run0 позволяет вам создавать сеансы оболочки с временными групповыми правами для не-root пользователей. Это полезно, если вы хотите получить доступ к папкам, которые заблокированы за определенным пользователем и группой, не переходя на root.

Например, следующая команда предоставляет пользователю “alice” временный доступ к группе “www-data”:

run0 --user=alice --group=www-data

Вы также можете использовать флаг --chdir, чтобы принудительно изменить каталог при переходе на новую сессию оболочки:

run0 --user=alice --chdir=/home/alice/Documents

Полезно знать: узнайте больше о вашем Linux-машине, изучив, как рекурсивно изменять права доступа к файлам в вашей файловой системе.

Как настроить текущую сессию Run0

Самым большим преимуществом Run0 является то, что он не использует setuid (SUID) для обработки действий суперпользователя. Вместо этого он полагается на systemd-run, который создает изолированные псевдо-TTY для выполнения команд от имени root.

Одним из последствий этого подхода является то, что Systemd рассматривает каждую оболочку Run0 как отдельное единичное устройство, работающее под менеджером служб. Это позволяет вам настраивать процесс вашей оболочки root, в отличие от традиционных приложений повышения привилегий.

Чтобы добавить метку для вашей оболочки root, используйте флаг --unit, за которым следует имя, которое вы хотите использовать:

run0 --unit=maketecheasier

Вы также можете добавить пользовательское описание для вашей оболочки root, добавив флаг --description:

run0 --unit=maketecheasier --description="hello, world!"

Проверьте, что вы правильно применили свои данные, перечислив пользовательское имя вашей оболочки root с помощью systemctl:

systemctl list-units maketecheasier.service

Терминал, показывающий детали пользовательского юнита Systemd.

По умолчанию Run0 изменяет цвет фона вашей оболочки root на красный. Хотя это полезный визуальный индикатор, это может отвлекать, если вы используете светлую тему в вашей системе.

Чтобы изменить это, используйте флаг --background, за которым следует значение от 40 до 49:

run0 --unit=maketecheasier --background=42

Наконец, вы также можете настроить уровень “доброжелательности” вашей оболочки root. Это значение от -20 до 19, которое определяет, будет ли ваш ядро приоритизировать ваш процесс над другими.

Чтобы дать вашей оболочке root наивысший приоритет, используйте флаг --nice со значением “-20”:

run0 --nice=-20

Примечание: флаг --nice также работает для отдельных команд Run0. Например, вы можете использовать run0 --nice=-20 vim, чтобы запустить Vim с более высоким приоритетом ЦП.

Как группировать сессии Run0

Помимо возможности настраивать каждую оболочку root в Linux, вы также можете использовать Run0 для группировки их вместе в срез Systemd. Это специальная конструкция, которая позволяет вашей машине регулировать потребление ресурсов для процессов, не затрагивая остальную часть вашей системы.

Чтобы создать оболочку root в другом срезе, выполните флаг --slice, за которым следует имя среза, в который вы хотите перейти:

run0 --slice=maketecheasier

Примечание: вы можете указать новое имя во флаге --slice, чтобы создать новый срез Systemd.

Подтвердите, что ваша новая сессия работает в вашем новом срезе, перечислив процессы внутри него:

systemctl status maketecheasier.slice

Терминал, показывающий детали пользовательского среза Systemd.

Вы также можете использовать флаг --slice-inherit, чтобы сгруппировать ваш новый срез вместе с срезом, из которого пришел Run0. Это полезно, если вы уже сгруппировали свои оболочки в соответствующие срезы, и вы просто хотите добавить новую оболочку:

run0 --slice=maketecheasier --slice-inherit

Как выполнять команды в контейнерах Systemd с помощью Run0

Systemd-nspawn — это специальная программа, которая может создавать и управлять легковесными контейнерами Linux, аналогичными Docker. Будучи частью набора Systemd, вы также можете использовать Run0 для выполнения команд в ваших контейнерах nspawn с вашего хост-машины.

Начните с перечисления доступных контейнеров Systemd-nspawn в вашей системе:

machinectl list

Терминал, показывающий список доступных контейнеров Systemd-nspawn.

Выполните следующую команду, чтобы создать папку внутри корневого каталога вашего контейнера:

run0 run0 --machine=maketecheasier --user=root mkdir/hello-world

Примечание: в настоящее время в Run0 есть ошибка, из-за которой он не может повысить привилегии при выполнении с флагом --machine. Вы можете исправить это, добавив вторую команду run0, чтобы принудительно повысить привилегии.

Также возможно перейти на оболочку root вашего контейнера с помощью Run0:

run0 run0 --machine=maketecheasier --user=root

Подтвердите, что вы теперь работаете внутри вашего контейнера, напечатав имя хоста вашей терминальной сессии:

echo$HOSTNAME

Терминал, показывающий процесс переключения с локальной системы на контейнер Systemd-nspawn.

Изучение того, как использовать Run0 для выполнения и управления командами root в Linux, — это только верхушка айсберга, когда дело касается приложений повышения привилегий. Погрузитесь в сложный мир, изучив различия между su, sudo и sudo -s.

Кредит изображения: Xavier Cee через Unsplash. Все изменения и скриншоты сделаны Ramces Red.