Как использовать 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 с просьбой ввести пароль текущего пользователя.

Подобно 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
По умолчанию 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
Вы также можете использовать флаг --slice-inherit, чтобы сгруппировать ваш новый срез вместе с срезом, из которого пришел Run0. Это полезно, если вы уже сгруппировали свои оболочки в соответствующие срезы, и вы просто хотите добавить новую оболочку:
run0 --slice=maketecheasier --slice-inheritКак выполнять команды в контейнерах Systemd с помощью Run0
Systemd-nspawn — это специальная программа, которая может создавать и управлять легковесными контейнерами Linux, аналогичными Docker. Будучи частью набора Systemd, вы также можете использовать Run0 для выполнения команд в ваших контейнерах nspawn с вашего хост-машины.
Начните с перечисления доступных контейнеров Systemd-nspawn в вашей системе:
machinectl list
Выполните следующую команду, чтобы создать папку внутри корневого каталога вашего контейнера:
run0 run0 --machine=maketecheasier --user=root mkdir/hello-worldПримечание: в настоящее время в Run0 есть ошибка, из-за которой он не может повысить привилегии при выполнении с флагом --machine. Вы можете исправить это, добавив вторую команду run0, чтобы принудительно повысить привилегии.
Также возможно перейти на оболочку root вашего контейнера с помощью Run0:
run0 run0 --machine=maketecheasier --user=rootПодтвердите, что вы теперь работаете внутри вашего контейнера, напечатав имя хоста вашей терминальной сессии:
echo$HOSTNAME
Изучение того, как использовать Run0 для выполнения и управления командами root в Linux, — это только верхушка айсберга, когда дело касается приложений повышения привилегий. Погрузитесь в сложный мир, изучив различия между su, sudo и sudo -s.
Кредит изображения: Xavier Cee через Unsplash. Все изменения и скриншоты сделаны Ramces Red.