Improve user-namespace docs slightly
Try to explain in more detail and add new error-message possibility. Signed-off-by: Chris Evich <cevich@redhat.com>
This commit is contained in:
59
README.md
59
README.md
@@ -20,6 +20,9 @@ when running potentially arbitrary CI/CD code. Though, the ultimate
|
|||||||
responsibility still rests with the end-user to review the setup and
|
responsibility still rests with the end-user to review the setup and
|
||||||
configuration relative to their own security situation/environment.
|
configuration relative to their own security situation/environment.
|
||||||
|
|
||||||
|
**Note**: While this can run entirely under a regular user, it will require
|
||||||
|
root access for the first two setup steps (below).
|
||||||
|
|
||||||
### Operation
|
### Operation
|
||||||
|
|
||||||
This image leverages the podman `runlabel` feature heavily. Several
|
This image leverages the podman `runlabel` feature heavily. Several
|
||||||
@@ -42,7 +45,7 @@ $ eval $(podman inspect --format=json $IMAGE | jq -r .[].Labels.<label>)
|
|||||||
|
|
||||||
By default on many distributions, regular users aren't permitted to leave
|
By default on many distributions, regular users aren't permitted to leave
|
||||||
background processes running after they log out. Since this is likely
|
background processes running after they log out. Since this is likely
|
||||||
desired for the user running the pipglr container, `systemd` needs to be
|
desired for running the pipglr container long-term, `systemd` needs to be
|
||||||
configured to override this policy. For this, you (`$USER`) will need
|
configured to override this policy. For this, you (`$USER`) will need
|
||||||
root access on the system.
|
root access on the system.
|
||||||
|
|
||||||
@@ -50,24 +53,50 @@ root access on the system.
|
|||||||
$ sudo loginctl enable-linger $USER
|
$ sudo loginctl enable-linger $USER
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Expanded user-namespace (step 2)
|
Side-effect: This will allow your user to persist other user-level systemd
|
||||||
|
services as well. For example `podman.socket` is handy to enable for
|
||||||
|
`podman remote` access. You could also [setup
|
||||||
|
quadlet](https://www.redhat.com/sysadmin/quadlet-podman) or a systemd unit
|
||||||
|
so pipglr starts up on system boot.
|
||||||
|
|
||||||
Some nested container images need to utilize high UID/GID values
|
#### Expanded user-namespace (step 2) ***This is probably important***
|
||||||
like `65535`. However, many distributions set that as the default max
|
|
||||||
number of user-namespace IDs. Since three IDs are needed inside the
|
As an added protection/safety measure, pipglr excludes three UID/GIDs
|
||||||
`pipglr` container, a larger range is required on the host. As root,
|
from being used by job-level containers. One for `root`, another for
|
||||||
edit the two files `/etc/subuid` and `/etc/subgid` to expand the range.
|
`runner` and a third for `podman`. However, some container images
|
||||||
For example assuming a local user called `pipglr` is used to run the
|
you may want to use for jobs (mainly Debian/Ubuntu), assign one/more
|
||||||
container, the contents of these files should be edited to allocate
|
essential users a high UID/GID value (like `65535`).
|
||||||
|
|
||||||
|
At the same time, most distributions also set `65536` as the default maximum
|
||||||
|
number (including ID `0`) of IDs to allocate for user-namespaces (via `/etc/login.defs`). This
|
||||||
|
creates a problem you won't realize until the runner actually picks up a job
|
||||||
|
😞 The main symptom of this issue will be messages in the pipglr containers log,
|
||||||
|
similar to (abbreviated):
|
||||||
|
|
||||||
|
```
|
||||||
|
...cut...
|
||||||
|
running `/usr/bin/newuidmap ...cut...`: newuidmap: write to uid_map failed: Operation not permitted
|
||||||
|
Error: cannot set up namespace using "/usr/bin/newuidmap": exit status 1
|
||||||
|
...cut...
|
||||||
|
```
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
```
|
||||||
|
E: setgroups 65534 failed - setgroups (22: Invalid argument)
|
||||||
|
```
|
||||||
|
|
||||||
|
***The good news is, working around this is relatively simple:***
|
||||||
|
|
||||||
|
As root, edit the two files `/etc/subuid` and `/etc/subgid` to expand the
|
||||||
|
by 3 IDs. For example assuming a user running the pipglr container is
|
||||||
|
called `johndoe`, the contents of these files should be edited to allocate
|
||||||
`65539` IDs like:
|
`65539` IDs like:
|
||||||
|
|
||||||
`pipglr:<some number>:65539`
|
`jogndoe:<some number>:65539`
|
||||||
|
|
||||||
Where `<some number>` was set by your OS when the `pipglr` user was created.
|
Where `<some number>` was set by your OS when the `johndoe` user was created
|
||||||
If you don't make this change, you're likely to experience errors starting
|
(you can ignore this). Only the last number needs to be increased.
|
||||||
containers for CI jobs, such as:
|
|
||||||
|
|
||||||
`E: setgroups 65534 failed - setgroups (22: Invalid argument)`
|
|
||||||
|
|
||||||
#### Runner registration (step 3)
|
#### Runner registration (step 3)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user