Оболочка входа Podmansh#
Podmansh позволяет запускать пользовательскую оболочку внутри контейнера, когда пользователь входит в систему, и заменяет стандартную оболочку, например, /usr/bin/bash на /usr/bin/podmansh.
Контейнер, внутри которого будет запущена оболочка, определяется с помощью юнит-файла Quadlet. Данный файл может быть создан в каталогах:
/usr/share/containers/systemd/или/etc/containers/systemd/- systemd запустит юнит-файл для всех пользователей при входе в систему;/etc/containers/systemd/users/${UID}- systemd запустит юнит-файл для конкретного пользователя.
В качестве примера приведен сценарий создания юнит-файла Quadlet, когда создаваемый контейнер Podmansh не имеет доступа к операционной системе и все операции выполняются исключительно внутри контейнера.
Для создания юнит-файла Quadlet, когда создаваемый контейнер Podmansh не имеет доступа к операционной системе и все операции выполняются исключительно внутри контейнера, выполните следующий сценарий:
Запустите сеанс входа пользователя с помощью команд:
useradd -s /usr/bin/podmansh lockedu grep lockedu /etc/passwd lockedu:x:4008:4008::/home/lockedu:/usr/bin/podmanshСоздайте юнит-файл Quadlet
podmansh.containerв/etc/containers/systemd/users/${USER_ID}, используя команды:USER_ID=$(id -u lockedu) mkdir -p /etc/containers/systemd/users/${USER_ID} cat > /etc/containers/systemd/users/${USER_ID}/podmansh.containerСодержимое юнит-файла
podmansh.container:[Unit] Description=The podmansh container After=local-fs.target [Container] Image=localhost/container-name:latest ContainerName=podmansh RemapUsers=keep-id RunInit=yes DropCapability=all NoNewPrivileges=true Exec=sleep infinity [Install] RequiredBy=default.targetОбратите внимание на поля в разделе [Container]:
Image- путь к контейнеру, который будет запускаться в формате юнит-файла;ContainerName- имя контейнера должно быть указано какpodmansh, так как/usr/bin/podmanshвыполняет командуpodman execв контейнерpodmansh;RemapUsers- отображениеUSER_IDпользователя внутри контейнера;RunInit- Podman запустит процесс инициализации внутри контейнера, который очистит все бездействующие процессы;DropCapability- Podman предотвращает получение контейнерным процессом каких-либо возможностей и прав в системе;NoNewPrivileges- Podman не позволяет контейнеру получать какие-либо новые привилегии в дополнение к существующим;Exec- команда, которая будет выполняться внутри контейнера.
Создайте
podmansh.serviceна основеpodmansh.container:systemctl daemon-reloadЗапустите
podmansh.service:systemctl start podmansh.service