Если я запустил это как root, он правильно напечатает touch: не удается коснуться '/ tmp / test': файловая система только для чтения.:
systemd-run --pty --property=ProtectSystem=strict /bin/bash -c "touch /tmp/test"
Если я запускаю его от имени себя, в диспетчере служб моего пользователя (--user
), меня больше не защищает, /tmp/test
создано:
systemd-run --user --pty --property=ProtectSystem=strict /bin/bash -c "touch /tmp/test"
Зачем?
Я думаю, мне не хватает фундаментального понимания того, что такое «менеджер служб» в systemd. Systemd будет большой частью моей (нашей) жизни, поэтому я действительно хотел бы понять его достаточно, чтобы понять вышесказанное. Есть документ, объясняющий это?
Контекст: я пытаюсь изолировать ненадежный скрипт (полученный через npm
). Запуск systemd-run от имени root кажется неверным, тем более что наша система сборки будет использовать это. Я мог бы использовать firejail
, но у меня уже есть systemd, и я знаком с различными свойствами песочницы, поэтому, если это вообще возможно, я хотел бы добиться успеха с systemd-run.
Спасибо!
ProtectSystem
и другие Protect*
параметры используют монтирования привязки только для чтения для обеспечения защиты. Это то, что не может сделать пользователь без полномочий root, поэтому вы не можете сделать это в сеансе пользователя (без полномочий root), только в системном сеансе.