Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
podmansh(1)		     General Commands Manual		     podmansh(1)

NAME
     podmansh - Execute login shell within the Podman podmansh container

SYNOPSIS
     podmansh

DESCRIPTION
     Execute a user shell within a container when the user logs into the system.
     The  container  that  the	users  get  added to can be defined via a Podman
     Quadlet file. This user only has access to volumes and capabilities config-
     ured into the Quadlet file.

     Administrators can create a Quadlet in /etc/containers/systemd/users, which
     systemd will start for all users when they log in.  The  administrator  can
     create  a	specific  Quadlet  with the container name podmansh, then enable
     users to use the login shell /usr/bin/podmansh.  These  user  login  shells
     are automatically executed inside	the podmansh container via Podman.

     Optionally,  the administrator can place Quadlet files in the /etc/contain-
     ers/systemd/users/${UID} directory for a user. Only this UID  will  execute
     these Quadlet services when that user logs in.

     The  user	is confined to the container environment via all of the security
     mechanisms, including SELinux. The only information that will be  available
     from the system comes from volumes leaked into the container.

     Systemd  will  automatically  create the container when the user session is
     started. Systemd will take down the container when all connections  to  the
     user  session are removed. This means users can log in to the system multi-
     ple times, with each session connected to the same container.

     Administrators can use volumes to expose specific host data from  the  host
     system  to  the  user, without the user being exposed to other parts of the
     system.

     Timeout for podmansh can be set using the podmansh_timeout option	in  con-
     tainers.conf.

Setup
     Create user login session using useradd while running as root.

     # useradd -s /usr/bin/podmansh lockedu
     # grep lockedu /etc/passwd
     lockedu:x:4008:4008::/home/lockedu:/usr/bin/podmansh

     Create  a	Podman Quadlet file that looks something like one of the follow-
     ing.

     Fully locked down container, no access to host OS.

     # USERID=$(id -u lockedu)
     # mkdir -p /etc/containers/systemd/users/${USERID}
     # cat > /etc/containers/systemd/users/${USERID}/podmansh.container << _EOF
     [Unit]
     Description=The podmansh container
     After=local-fs.target

     [Container]
     Image=registry.fedoraproject.org/fedora
     ContainerName=podmansh
     UserNS=keep-id
     RunInit=yes
     DropCapability=all
     NoNewPrivileges=true

     Exec=sleep infinity

     [Install]
     RequiredBy=default.target
     _EOF

     Alternatively, while running as root, create a Quadlet where  the	user  is
     allowed to become root within the user namespace. They can also permanently
     read/write  content  from their home directory which is volume mounted from
     the actual host's users account, rather than being inside of the container.

     # useradd -s /usr/bin/podmansh confinedu
     # grep confinedu /etc/passwd
     confinedu:x:4009:4009::/home/confinedu:/usr/bin/podmansh
     # USERID=$(id -u confinedu)
     # mkdir -p /etc/containers/systemd/users/${USERID}
     # cat > /etc/containers/systemd/users/${USERID}/podmansh.container << _EOF
     [Unit]
     Description=The podmansh container
     After=local-fs.target

     [Container]
     Image=registry.fedoraproject.org/fedora
     ContainerName=podmansh
     UserNS=keep-id
     RunInit=yes

     Volume=%h/data:%h:Z
     Exec=sleep infinity

     [Service]
     ExecStartPre=/usr/bin/mkdir -p %h/data

     [Install]
     RequiredBy=default.target
     _EOF

     Another example, while running as root, create a Quadlet  where  the  users
     inside  this container are allowed to execute containers with SELinux sepa-
     ration and able to read and write content in the $HOME/data directory.

     # useradd -s /usr/bin/podmansh fullu
     # grep fullu /etc/passwd
     fullu:x:4010:4010::/home/fullu:/usr/bin/podmansh
     # USERID=$(id -u fullu)
     # mkdir -p /etc/containers/systemd/users/${USERID}
     # cat > /etc/containers/systemd/users/${USERID}/podmansh.container << _EOF
     [Unit]
     Description=The podmansh container
     After=local-fs.target

     [Container]
     Image=registry.fedoraproject.org/fedora
     ContainerName=podmansh
     UserNS=keep-id
     RunInit=yes
     PodmanArgs=--security-opt=unmask=/sys/fs/selinux
	  --security-opt=label=nested
	  --security-opt=label=user:container_user_u
	  --security-opt=label=type:container_user_t
	  --security-opt=label=role:container_user_r
	  --security-opt=label=level:s0-s0:c0.c1023

     Volume=%h/data:%h:Z
     WorkingDir=%h
     Volume=/sys/fs/selinux:/sys/fs/selinux
     Exec=sleep infinity

     [Service]
     ExecStartPre=/usr/bin/mkdir -p %h/data

     [Install]
     RequiredBy=default.target
     _EOF

SEE ALSO
     containers.conf(5) <containers.conf.5.md>, podman(1), podman-exec(1),  pod-
     man-systemd.unit(5)

HISTORY
     May    2023,   Originally	 compiled   by	 Dan   Walsh   dwalsh@redhat.com
     <mailto:dwalsh@redhat.com>

								     podmansh(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=podmansh&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help