@stgraber, I added the SRU template, let me know if something's off. Thanks!
** Description changed: + [Impact] + + Ubuntu carries a patch on top of systemd [a] to silence + namespace set up failures. This is meant as a workaround + for a bug in the LXD version shipped in Ubuntu 18.04. + + Masking namespace set up failures creates a false sense of + security for the user/admin. + + As mentioned in comment #1, systemd upstream explains that silencing + this kind of error is dangerous and should be avoided. + + Backporting the LXD fix [b] to Ubuntu 18.04 would allow namespaces + to work inside containers. This is the goal of this SRU. + + Ultimately, once LXD in Ubuntu 18.04 includes the fix [b], it would + be possible to drop the Ubuntu-specific patch for systemd [a]. This + is however *not an immediate concern for this SRU*. + + [Test Plan] + + 1) Create a 18.04 VM: + $ lxc launch images:ubuntu/18.04 lp1959047 --vm + $ sleep 30 # give it time to boot + + 2) Install and initialize LXD in it: + $ lxc exec lp1959047 -- apt-get update + $ lxc exec lp1959047 -- apt-get install -y lxd + $ lxc exec lp1959047 -- lxd init --auto + + 3) Create a Jammy container and enable systemd debugging: + $ lxc exec lp1959047 -- lxc init images:ubuntu/22.04 c1 + $ lxc exec lp1959047 -- lxc config set c1 raw.lxc 'lxc.init.cmd = /sbin/init systemd.log_level=debug' + $ lxc exec lp1959047 -- lxc start c1 + + 4) Check if namespace set up failures are logged: + $ lxc exec lp1959047 -- lxc exec c1 -- journalctl -b0 --grep 'Failed to set up namespace' + Mar 24 23:29:19 c1 systemd[99]: systemd-udevd.service: Failed to set up namespace, assuming containerized execution, ignoring: Permission denied + Mar 24 23:29:19 c1 systemd[132]: systemd-networkd.service: Failed to set up namespace, assuming containerized execution, ignoring: Permission denied + Mar 24 23:29:19 c1 systemd[131]: systemd-logind.service: Failed to set up namespace, assuming containerized execution, ignoring: Permission denied + Mar 24 23:29:20 c1 systemd[136]: systemd-resolved.service: Failed to set up namespace, assuming containerized execution, ignoring: Permission denied + Mar 24 23:29:20 c1 systemd[128]: e2scrub_reap.service: Failed to set up namespace, assuming containerized execution, ignoring: Permission denied + Mar 24 23:29:23 c1 systemd[243]: systemd-hostnamed.service: Failed to set up namespace, assuming containerized execution, ignoring: Permission denied + + If LXD in Ubuntu 18.04 has the patch, the "Failed to set up namespace" + messages wouldn't be there. + + [Where problems could occur] + + The LXD fix changes the Apparmor profile used for containers. This essentially + loosen the mount restrictions applied to containers. + + Weakening the Apparmor profile could make it easier for a process in the container + to do damage that would have otherwise been blocked. On the other hand, this + allows making use of namespaces/sandboxing inside the container. + + Upstream LXD has the fix since 2019 which make it less likely to run into + problems with the backport. + + The backported fix was also tested manually to ensure LXD still behaved normally + and that it avoided the namespace set up failures in Jammy containers. + + [a]: https://git.launchpad.net/ubuntu/+source/systemd/tree/debian/patches/debian/UBUNTU-Revert-namespace-be-more-careful-when-handling-namespacin.patch?h=ubuntu/jammy + [b]: https://github.com/lxc/lxd/commit/a6b780703350faff8328f3d565f6bac7b6dcf59f + + [Initial bug description] + The version of systemd (249.5-2ubuntu4) currently packaged for the Ubuntu development version (22.04 Jammy Jellyfish) totally ignores the RootDirectory= option in systemd service files. With RootDirectory, systemd should start the service after calling chroot() on the supplied directory. To test/reproduce, create a test service file with the following contents: - # /etc/systemd/system/lsb-release.service [Unit] Description=LSB Release Information [Service] Type=simple RootDirectory=/var/chroot/trusty ExecStartPre=/bin/pwd ExecStart=/usr/bin/lsb_release -a - - You should have a chroot environment in the specified RootDirectory, even though you can still deduce if systemd attempted to chroot or not from the resulting error message. + You should have a chroot environment in the specified RootDirectory, + even though you can still deduce if systemd attempted to chroot or not + from the resulting error message. In my example, I installed an end-of-life Ubuntu 14.04 Trusty Tahr in the chroot environment. On systems NOT affected by the problem, I get the following result when I start this test service. This is what I'd expect. - Jan 25 20:40:40 dolly systemd[1]: Starting LSB Release Information... Jan 25 20:40:40 dolly pwd[361]: / Jan 25 20:40:40 dolly systemd[1]: Started LSB Release Information. Jan 25 20:40:40 dolly lsb_release[362]: No LSB modules are available. Jan 25 20:40:40 dolly lsb_release[362]: Distributor ID: Ubuntu Jan 25 20:40:40 dolly lsb_release[362]: Description: Ubuntu 14.04 LTS Jan 25 20:40:40 dolly lsb_release[362]: Release: 14.04 Jan 25 20:40:40 dolly lsb_release[362]: Codename: trusty Jan 25 20:40:40 dolly systemd[1]: lsb-release.service: Succeeded. - On the problematic system, however, I get the following result. - Jan 25 21:21:08 savelog systemd[1]: Starting LSB Release Information... Jan 25 21:21:08 savelog systemd[1]: Started LSB Release Information. Jan 25 21:21:08 savelog pwd[81114]: / Jan 25 21:21:08 savelog lsb_release[81115]: No LSB modules are available. Jan 25 21:21:08 savelog lsb_release[81115]: Distributor ID: Ubuntu Jan 25 21:21:08 savelog lsb_release[81115]: Description: Ubuntu Jammy Jellyfish (development branch) Jan 25 21:21:08 savelog lsb_release[81115]: Release: 22.04 Jan 25 21:21:08 savelog lsb_release[81115]: Codename: jammy Jan 25 21:21:08 savelog systemd[1]: lsb-release.service: Deactivated successfully. - - It totally run the service on the host's root filesystem, it didn't care even the slightest that a RootDirectory is specified. + It totally run the service on the host's root filesystem, it didn't care + even the slightest that a RootDirectory is specified. Tested on the following releases / systemd versions: Ubuntu 18.04.6 Bionic Beaver – ISSUE NOT PRESENT systemd 237 +PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid Ubuntu 20.04.3 Focal Fossa – ISSUE NOT PRESENT systemd 245 (245.4-4ubuntu3.15) +PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid Ubuntu 21.10 Impish Indri – ISSUE NOT PRESENT systemd 248 (248.3-1ubuntu8.2) +PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +GCRYPT +GNUTLS -OPENSSL +ACL +BLKID +CURL +ELFUTILS -FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP -LIBFDISK +PCRE2 -PWQUALITY -P11KIT -QRENCODE +BZIP2 +LZ4 +XZ +ZLIB +ZSTD -XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified Ubuntu 22.04 Jammy Jellyfish (development branch) – ISSUE PRESENT systemd 249 (249.5-2ubuntu4) +PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +GCRYPT +GNUTLS -OPENSSL +ACL +BLKID +CURL +ELFUTILS -FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP -LIBFDISK +PCRE2 -PWQUALITY -P11KIT -QRENCODE +BZIP2 +LZ4 +XZ +ZLIB +ZSTD -XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified - - Note that the problem is produced under an LXC container; since systemd detects virtualization, it might change how it behaves. + Note that the problem is produced under an LXC container; since systemd + detects virtualization, it might change how it behaves. It's either a bug or an intentional change I don't understand yet (i.e. the RootDirectory option has deprecated and is about to be replaced with something else, or there are additional conditions to be met before RootDirectory is considered), but I think in the latter case I should at least get a warning that there is a change in configuration. I imagine suddenly everyone's existing service units utilizing RootDirectory silently stop working without any information regarding why. -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1959047 Title: systemd ignores RootDirectory option in .service units To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/lxd/+bug/1959047/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs