Self cross-posting from: https://lemmy.zip/post/70909658

Intention to have slightly better visibility from the self-hosted crowd and I’m interested in more general feedback on this too.

Hey everyone! I’m trying to find a solution to a really confusing problem…

I have the following simple nginx docker compose configuration on my Fedora home server that I can run without issue on my uid 1000 user, lets call this user “userA”.

services:
  nginx:
    container_name: nginx-alt
    image: docker.io/library/nginx
    restart: unless-stopped
    ports:
      - 8181:80

This exposes internal port 80 as 8181 and can be accessed in a lan in the expected matter.

However, for security reasons, I want to actually host this service eventually on a completely different user with less permissions. Let’s call this user “userB” who has a very limited scope of the file system. This is to prevent potential escaping of the rootless container causing major file system havoc (i.e. reduce the scope of the user to a very limited network of containers.)

The problem is really simple: For some reason, when userB runs this service (uid 1001), the nginx service suddenly complains about privileges. As a result, I get a “Forbidden 403” error when hosting. Turning off selinux has no affect (so setenforce 0 does nothing, meaning I can rule out secure linux interruption.)

The errors look like the following:

nginx-alt  | 2026/09/04 20:03:34 [error] 25#25: *1 "/usr/share/nginx/html/index.html" is forbidden (13: Permission denied), client: xx.xx.x.x, server: localhost, request: "GET / HTTP/1.1", host: "xxx.xxx.xxx.xxx:8181"
nginx-alt  | 10.89.0.2 - - [04/Sep/2026:20:03:34 +0000] "GET / HTTP/1.1" 403 153 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:155.0) Gecko/20100101 Firefox/155.0" "-"

For what it’s worth, both users should be relatively vanilla and all ports are appropriately exported. There shouldn’t be anything, for example, that is making userA run as “privileged” over the other users and podman should be running rootless in both containers.

I did see a note on the nginx image about running in rootless that I might try, but it doesn’t solve my bigger issue here which is the lack of consistency between the two users. Additionally, userns_mode: keep-ids only caused the container to fail to boot for other reason entirely.

There must be something fundamentally wrong with my configuration of my system. Has anyone had any experience running two podman containers on two different users simultaneously that can provide feedback?

Obviously, I’m not trying to run just an nginx server, but I found this to be the easiest configuration to reproduce.

  • chameleon@fedia.io
    link
    fedilink
    arrow-up
    2
    ·
    9 hours ago

    Complete shot in the dark, but I would start by comparing podman system info between the two user accounts, with the most importance on the idMappings. Podman is usually configured to use rootless by default, and this can result in wildly different behavior based on whether /etc/subuid and /etc/subgid are configured to give your user IDs or not. See tutorial if your user 1001 is missing.

    Modern distro installers tend to give the user created during setup 65536 IDs, but useradd usually doesn’t do that by default. This is really distro-specific stuff though and I don’t know how modern Fedora handles it, so I might be grasping at nothing here.

    • MoogleMaestro@lemmy.zipOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      9 hours ago

      I think I have uids set up, but I’m not positive they’re set up correctly.

      Here’s an example of /etc/subuid for example, with it a bit anonymised for my specific user setup:

      core:524288:65536
      syncthing:589824:65536
      userA:655360:65536
      userB:720896:65536
      userC:786432:65536
      

      Syncthing in this case isn’t running any podman containers, all sharing is done bare-metal. userA is working, but userB and userC do look like they’re configured “correctly” at first glance. podman system info seems to be outputting the results above

        idMappings:
          gidmap:
          - container_id: 0
            host_id: 1101
            size: 1
          - container_id: 1
            host_id: 786432
            size: 65536
          uidmap:
          - container_id: 0
            host_id: 1101
            size: 1
          - container_id: 1
            host_id: 786432
            size: 65536
      

      Note: The user in question here is uid 1101, another new user I created for testing purposes.

      • chameleon@fedia.io
        link
        fedilink
        arrow-up
        1
        ·
        8 hours ago

        That looks correct to me if uid 1101 == userC. Sorry, don’t really know what it might be then.