mirror of
https://github.com/containers/podman.git
synced 2025-08-06 11:32:07 +08:00
Merge pull request #9495 from rhatdan/groups
Add '--group-add keep-groups': supplementary groups into container
This commit is contained in:
4
Makefile
4
Makefile
@ -149,7 +149,7 @@ err_if_empty = $(if $(strip $($(1))),$(strip $($(1))),$(error Required variable
|
||||
|
||||
# Podman does not work w/o CGO_ENABLED, except in some very specific cases
|
||||
CGO_ENABLED ?= 1
|
||||
# Default to the native OS type and archetecture unless otherwise specified
|
||||
# Default to the native OS type and architecture unless otherwise specified
|
||||
GOOS ?= $(shell $(GO) env GOOS)
|
||||
ifeq ($(call err_if_empty,GOOS),windows)
|
||||
BINSFX := .exe
|
||||
@ -255,7 +255,7 @@ test/goecho/goecho: .gopathok $(wildcard test/goecho/*.go)
|
||||
|
||||
.PHONY: codespell
|
||||
codespell:
|
||||
codespell -S bin,vendor,.git,go.sum,changelog.txt,.cirrus.yml,"RELEASE_NOTES.md,*.xz,*.gz,*.tar,*.tgz,bin2img,*ico,*.png,*.1,*.5,copyimg,*.orig,apidoc.go" -L uint,iff,od,seeked,splitted,marge,ERRO,hist -w
|
||||
codespell -S bin,vendor,.git,go.sum,changelog.txt,.cirrus.yml,"RELEASE_NOTES.md,*.xz,*.gz,*.tar,*.tgz,bin2img,*ico,*.png,*.1,*.5,copyimg,*.orig,apidoc.go" -L uint,iff,od,seeked,splitted,marge,ERRO,hist,ether -w
|
||||
|
||||
.PHONY: validate
|
||||
validate: gofmt lint .gitvalidation validate.completions man-page-check swagger-check tests-included
|
||||
|
@ -196,7 +196,7 @@ spelled with complete minutiae.
|
||||
1. Merge the PR (or ask someone else to review and merge, to be safer).
|
||||
1. **Note:** This is the last point where any test-failures can be addressed
|
||||
by code changes. After pushing the new version-tag upstream, no further
|
||||
changes can be made to the code without lots of unpleasent efforts. Please
|
||||
changes can be made to the code without lots of unpleasant efforts. Please
|
||||
seek assistance if needed, before proceeding.
|
||||
|
||||
1. Assuming the "Bump to ..." PR merged successfully, and you're **really**
|
||||
|
@ -277,7 +277,7 @@ func DefineCreateFlags(cmd *cobra.Command, cf *ContainerCLIOpts) {
|
||||
createFlags.StringSliceVar(
|
||||
&cf.GroupAdd,
|
||||
groupAddFlagName, []string{},
|
||||
"Add additional groups to join",
|
||||
"Add additional groups to the primary container process. 'keep-groups' allows container processes to use suplementary groups.",
|
||||
)
|
||||
_ = cmd.RegisterFlagCompletionFunc(groupAddFlagName, completion.AutocompleteNone)
|
||||
|
||||
|
@ -193,6 +193,25 @@ func createInit(c *cobra.Command) error {
|
||||
val := c.Flag("entrypoint").Value.String()
|
||||
cliVals.Entrypoint = &val
|
||||
}
|
||||
|
||||
if c.Flags().Changed("group-add") {
|
||||
groups := []string{}
|
||||
for _, g := range cliVals.GroupAdd {
|
||||
if g == "keep-groups" {
|
||||
if len(cliVals.GroupAdd) > 1 {
|
||||
return errors.New("the '--group-add keep-groups' option is not allowed with any other --group-add options")
|
||||
}
|
||||
if registry.IsRemote() {
|
||||
return errors.New("the '--group-add keep-groups' option is not supported in remote mode")
|
||||
}
|
||||
cliVals.Annotation = append(cliVals.Annotation, "run.oci.keep_original_groups=1")
|
||||
} else {
|
||||
groups = append(groups, g)
|
||||
}
|
||||
}
|
||||
cliVals.GroupAdd = groups
|
||||
}
|
||||
|
||||
if c.Flags().Changed("pids-limit") {
|
||||
val := c.Flag("pids-limit").Value.String()
|
||||
pidsLimit, err := strconv.ParseInt(val, 10, 32)
|
||||
|
@ -30,7 +30,7 @@ func init() {
|
||||
})
|
||||
}
|
||||
|
||||
// TODO Name shouldnt be required, need to create a default vm
|
||||
// TODO Name shouldn't be required, need to create a default vm
|
||||
func stop(cmd *cobra.Command, args []string) error {
|
||||
var (
|
||||
err error
|
||||
|
@ -161,7 +161,7 @@ Register-ArgumentCompleter -CommandName 'podman-remote' -ScriptBlock {
|
||||
|
||||
$Values | ForEach-Object {
|
||||
|
||||
# store temporay because switch will overwrite $_
|
||||
# store temporary because switch will overwrite $_
|
||||
$comp = $_
|
||||
|
||||
# PowerShell supports three different completion modes
|
||||
@ -216,7 +216,7 @@ Register-ArgumentCompleter -CommandName 'podman-remote' -ScriptBlock {
|
||||
Default {
|
||||
# Like MenuComplete but we don't want to add a space here because
|
||||
# the user need to press space anyway to get the completion.
|
||||
# Description will not be shown because thats not possible with TabCompleteNext
|
||||
# Description will not be shown because that's not possible with TabCompleteNext
|
||||
[System.Management.Automation.CompletionResult]::new($($comp.Name | __podman-remote_escapeStringWithSpecialChars), "$($comp.Name)", 'ParameterValue', "$($comp.Description)")
|
||||
}
|
||||
}
|
||||
|
@ -161,7 +161,7 @@ Register-ArgumentCompleter -CommandName 'podman' -ScriptBlock {
|
||||
|
||||
$Values | ForEach-Object {
|
||||
|
||||
# store temporay because switch will overwrite $_
|
||||
# store temporary because switch will overwrite $_
|
||||
$comp = $_
|
||||
|
||||
# PowerShell supports three different completion modes
|
||||
@ -216,7 +216,7 @@ Register-ArgumentCompleter -CommandName 'podman' -ScriptBlock {
|
||||
Default {
|
||||
# Like MenuComplete but we don't want to add a space here because
|
||||
# the user need to press space anyway to get the completion.
|
||||
# Description will not be shown because thats not possible with TabCompleteNext
|
||||
# Description will not be shown because that's not possible with TabCompleteNext
|
||||
[System.Management.Automation.CompletionResult]::new($($comp.Name | __podman_escapeStringWithSpecialChars), "$($comp.Name)", 'ParameterValue', "$($comp.Description)")
|
||||
}
|
||||
}
|
||||
|
@ -277,7 +277,7 @@ logformatter() {
|
||||
|& awk --file "${CIRRUS_WORKING_DIR}/${SCRIPT_BASE}/timestamp.awk" \
|
||||
|& "${CIRRUS_WORKING_DIR}/${SCRIPT_BASE}/logformatter" "$output_name"
|
||||
else
|
||||
# Assume script is run by a human, they want output immediatly
|
||||
# Assume script is run by a human, they want output immediately
|
||||
cat -
|
||||
fi
|
||||
}
|
||||
|
@ -6,7 +6,7 @@ PLATFORM=$1 ## linux, windows or darwin
|
||||
TARGET=${2} ## where to output files
|
||||
SOURCES=${@:3} ## directories to find markdown files
|
||||
|
||||
# Overriden for testing. Native podman-remote binary expected filepaths
|
||||
# Overridden for testing. Native podman-remote binary expected filepaths
|
||||
if [[ -z "$PODMAN" ]]; then
|
||||
case $(env -i HOME=$HOME PATH=$PATH go env GOOS) in
|
||||
windows)
|
||||
|
@ -688,7 +688,7 @@ Set the architecture variant of the image to be pulled.
|
||||
bind mounts `/HOST-DIR` in the host to `/CONTAINER-DIR` in the Podman
|
||||
container. (This option is not available with the remote Podman client)
|
||||
|
||||
The `OPTIONS` are a comma delimited list and can be: <sup>[[1]](#Footnote1)</sup>
|
||||
The `OPTIONS` are a comma-separated list and can be: <sup>[[1]](#Footnote1)</sup>
|
||||
|
||||
* [rw|ro]
|
||||
* [z|Z|O]
|
||||
|
@ -261,8 +261,8 @@ Note: if _host_device_ is a symbolic link then it will be resolved first.
|
||||
The container will only store the major and minor numbers of the host device.
|
||||
|
||||
Note: if the user only has access rights via a group, accessing the device
|
||||
from inside a rootless container will fail. The **crun**(1) runtime offers a
|
||||
workaround for this by adding the option **\-\-annotation run.oci.keep_original_groups=1**.
|
||||
from inside a rootless container will fail. Use the `--group-add keep-groups`
|
||||
flag to pass the user's supplementary group access into the container.
|
||||
|
||||
Podman may load kernel modules required for using the specified
|
||||
device. The devices that podman will load modules when necessary are:
|
||||
@ -361,9 +361,17 @@ GID map for the user namespace. Using this flag will run the container with user
|
||||
|
||||
The following example maps uids 0-2000 in the container to the uids 30000-31999 on the host and gids 0-2000 in the container to the gids 30000-31999 on the host. `--gidmap=0:30000:2000`
|
||||
|
||||
#### **\-\-group-add**=*group*
|
||||
#### **\-\-group-add**=*group|keep-groups*
|
||||
|
||||
Add additional groups to run as
|
||||
Add additional groups to assign to primary user running within the container process.
|
||||
|
||||
- `keep-groups` is a special flag that tells Podman to keep the supplementary group access.
|
||||
|
||||
Allows container to use the user's supplementary group access. If file systems or
|
||||
devices are only accessible by the rootless user's group, this flag tells the OCI
|
||||
runtime to pass the group access into the container. Currently only available
|
||||
with the `crun` OCI runtime. Note: `keep-groups` is exclusive, you cannot add any other groups
|
||||
with this flag. (Not available for remote commands)
|
||||
|
||||
#### **\-\-health-cmd**=*"command"* | *'["command", "arg1", ...]'*
|
||||
|
||||
@ -634,7 +642,7 @@ Valid _mode_ values are:
|
||||
- **none**: no networking;
|
||||
- **container:**_id_: reuse another container's network stack;
|
||||
- **host**: use the Podman host network stack. Note: the host mode gives the container full access to local system services such as D-bus and is therefore considered insecure;
|
||||
- _network-id_: connect to a user-defined network, multiple networks should be comma separated;
|
||||
- _network-id_: connect to a user-defined network, multiple networks should be comma-separated;
|
||||
- **ns:**_path_: path to a network namespace to join;
|
||||
- **private**: create a new namespace for the container (default)
|
||||
- **slirp4netns[:OPTIONS,...]**: use **slirp4netns**(1) to create a user network stack. This is the default for rootless containers. It is possible to specify these additional options:
|
||||
@ -861,6 +869,8 @@ Security Options
|
||||
- `label=filetype:TYPE` : Set the label file type for the container files
|
||||
- `label=disable` : Turn off label separation for the container
|
||||
|
||||
Note: Labeling can be disabled for all containers by setting label=false in the **containers.conf** (`/etc/containers/containers.conf` or `$HOME/.config/containers/containers.conf`) file.
|
||||
|
||||
- `mask=/path/1:/path/2` : The paths to mask separated by a colon. A masked path
|
||||
cannot be accessed inside the container.
|
||||
|
||||
@ -869,13 +879,13 @@ Security Options
|
||||
- `seccomp=unconfined` : Turn off seccomp confinement for the container
|
||||
- `seccomp=profile.json` : White listed syscalls seccomp Json file to be used as a seccomp filter
|
||||
|
||||
- `proc-opts=OPTIONS` : Comma-separated list of options to use for the /proc mount. More details for the
|
||||
possible mount options are specified in the **proc(5)** man page.
|
||||
|
||||
- `unmask=ALL or /path/1:/path/2` : Paths to unmask separated by a colon. If set to **ALL**, it will
|
||||
unmask all the paths that are masked or made read only by default.
|
||||
The default masked paths are **/proc/acpi, /proc/kcore, /proc/keys, /proc/latency_stats, /proc/sched_debug, /proc/scsi, /proc/timer_list, /proc/timer_stats, /sys/firmware, and /sys/fs/selinux.** The default paths that are read only are **/proc/asound, /proc/bus, /proc/fs, /proc/irq, /proc/sys, /proc/sysrq-trigger, /sys/fs/cgroup**.
|
||||
|
||||
- `proc-opts=OPTIONS` : Comma separated list of options to use for the /proc mount. More details for the
|
||||
possible mount options are specified at **proc(5)** man page.
|
||||
|
||||
Note: Labeling can be disabled for all containers by setting label=false in the **containers.conf** (`/etc/containers/containers.conf` or `$HOME/.config/containers/containers.conf`) file.
|
||||
|
||||
#### **\-\-shm-size**=*size*
|
||||
@ -1093,9 +1103,9 @@ Create a bind mount. If you specify, ` -v /HOST-DIR:/CONTAINER-DIR`, Podman
|
||||
bind mounts `/HOST-DIR` in the host to `/CONTAINER-DIR` in the Podman
|
||||
container. Similarly, `-v SOURCE-VOLUME:/CONTAINER-DIR` will mount the volume
|
||||
in the host to the container. If no such named volume exists, Podman will
|
||||
create one. The `OPTIONS` are a comma delimited list and can be: <sup>[[1]](#Footnote1)</sup> (Note when using the remote client, the volumes will be mounted from the remote server, not necessarly the client machine.)
|
||||
create one. The `OPTIONS` are a comma-separated list and can be: <sup>[[1]](#Footnote1)</sup> (Note when using the remote client, the volumes will be mounted from the remote server, not necessarly the client machine.)
|
||||
|
||||
The _options_ is a comma delimited list and can be:
|
||||
The _options_ is a comma-separated list and can be:
|
||||
|
||||
* **rw**|**ro**
|
||||
* **z**|**Z**
|
||||
@ -1185,7 +1195,7 @@ host into the container to allow speeding up builds.
|
||||
Content mounted into the container is labeled with the private label.
|
||||
On SELinux systems, labels in the source directory must be readable
|
||||
by the container label. Usually containers can read/execute `container_share_t`
|
||||
and can read/write `container_file_t`. If you can not change the labels on a
|
||||
and can read/write `container_file_t`. If you cannot change the labels on a
|
||||
source volume, SELinux container separation must be disabled for the container
|
||||
to work.
|
||||
- The source directory mounted into the container with an overlay mount
|
||||
@ -1245,10 +1255,14 @@ will convert /foo into a `shared` mount point. Alternatively one can directly
|
||||
change propagation properties of source mount. Say `/` is source mount for
|
||||
`/foo`, then use `mount --make-shared /` to convert `/` into a `shared` mount.
|
||||
|
||||
Note: if the user only has access rights via a group, accessing the volume
|
||||
from inside a rootless container will fail. Use the `--group-add keep-groups`
|
||||
flag to pass the user's supplementary group access into the container.
|
||||
|
||||
#### **\-\-volumes-from**[=*CONTAINER*[:*OPTIONS*]]
|
||||
|
||||
Mount volumes from the specified container(s). Used to share volumes between
|
||||
containers. The *options* is a comma delimited list with the following available elements:
|
||||
containers. The *options* is a comma-separated list with the following available elements:
|
||||
|
||||
* **rw**|**ro**
|
||||
* **z**
|
||||
@ -1351,6 +1365,11 @@ $ podman create --name container1 -t -i fedora bash
|
||||
$ podman create --name container2 -t -i fedora bash
|
||||
$ podman create --name container3 --requires container1,container2 -t -i fedora bash
|
||||
$ podman start --attach container3
|
||||
|
||||
### Configure keep supplemental groups for access to volume
|
||||
|
||||
```
|
||||
$ podman create -v /var/lib/design:/var/lib/design --group-add keep-groups ubi8
|
||||
```
|
||||
|
||||
### Rootless Containers
|
||||
|
@ -125,7 +125,7 @@ If another pod with the same name already exists, replace and remove it. The de
|
||||
|
||||
#### **\-\-share**=*namespace*
|
||||
|
||||
A comma delimited list of kernel namespaces to share. If none or "" is specified, no namespaces will be shared. The namespaces to choose from are ipc, net, pid, uts.
|
||||
A comma-separated list of kernel namespaces to share. If none or "" is specified, no namespaces will be shared. The namespaces to choose from are ipc, net, pid, uts.
|
||||
|
||||
The operator can identify a pod in three ways:
|
||||
UUID long identifier (“f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778”)
|
||||
|
@ -299,8 +299,8 @@ Note: if _host_device_ is a symbolic link then it will be resolved first.
|
||||
The container will only store the major and minor numbers of the host device.
|
||||
|
||||
Note: if the user only has access rights via a group, accessing the device
|
||||
from inside a rootless container will fail. The **crun**(1) runtime offers a
|
||||
workaround for this by adding the option **\-\-annotation run.oci.keep_original_groups=1**.
|
||||
from inside a rootless container will fail. Use the `--group-add keep-groups`
|
||||
flag to pass the user's supplementary group access into the container.
|
||||
|
||||
Podman may load kernel modules required for using the specified
|
||||
device. The devices that Podman will load modules when necessary are:
|
||||
@ -405,9 +405,17 @@ Meaning **groupname** is initially mapped to gid **100000** which is referenced
|
||||
above: The group **groupname** is mapped to group **100000** of the initial namespace then the
|
||||
**30000**st id of this namespace (which is gid 130000 in this namespace) is mapped to container namespace group id **0**. (groupname -> 100000 / 30000 -> 0)
|
||||
|
||||
#### **\-\-group-add**=*group*
|
||||
#### **\-\-group-add**=*group|keep-groups*
|
||||
|
||||
Add additional groups to run as
|
||||
Add additional groups to assign to primary user running within the container process.
|
||||
|
||||
- `keep-groups` is a special flag that tells Podman to keep the supplementary group access.
|
||||
|
||||
Allows container to use the user's supplementary group access. If file systems or
|
||||
devices are only accessible by the rootless user's group, this flag tells the OCI
|
||||
runtime to pass the group access into the container. Currently only available
|
||||
with the `crun` OCI runtime. Note: `keep-groups` is exclusive, you cannot add any other groups
|
||||
with this flag. (Not available for remote commands)
|
||||
|
||||
#### **\-\-health-cmd**=*"command"* | *'["command", "arg1", ...]'*
|
||||
|
||||
@ -670,7 +678,7 @@ Valid _mode_ values are:
|
||||
- **none**: no networking;
|
||||
- **container:**_id_: reuse another container's network stack;
|
||||
- **host**: use the Podman host network stack. Note: the host mode gives the container full access to local system services such as D-bus and is therefore considered insecure;
|
||||
- _network-id_: connect to a user-defined network, multiple networks should be comma separated;
|
||||
- _network-id_: connect to a user-defined network, multiple networks should be comma-separated;
|
||||
- **ns:**_path_: path to a network namespace to join;
|
||||
- **private**: create a new namespace for the container (default)
|
||||
- **slirp4netns[:OPTIONS,...]**: use **slirp4netns**(1) to create a user network stack. This is the default for rootless containers. It is possible to specify these additional options:
|
||||
@ -905,19 +913,27 @@ Security Options
|
||||
|
||||
- **apparmor=unconfined** : Turn off apparmor confinement for the container
|
||||
- **apparmor**=_your-profile_ : Set the apparmor confinement profile for the container
|
||||
|
||||
- **label=user:**_USER_: Set the label user for the container processes
|
||||
- **label=role:**_ROLE_: Set the label role for the container processes
|
||||
- **label=type:**_TYPE_: Set the label process type for the container processes
|
||||
- **label=level:**_LEVEL_: Set the label level for the container processes
|
||||
- **label=filetype:**TYPE_: Set the label file type for the container files
|
||||
- **label=disable**: Turn off label separation for the container
|
||||
|
||||
Note: Labeling can be disabled for all containers by setting label=false in the **containers.conf** (`/etc/containers/containers.conf` or `$HOME/.config/containers/containers.conf`) file.
|
||||
|
||||
- **mask**=_/path/1:/path/2_: The paths to mask separated by a colon. A masked path
|
||||
cannot be accessed inside the container.
|
||||
|
||||
- **no-new-privileges**: Disable container processes from gaining additional privileges
|
||||
|
||||
- **seccomp=unconfined**: Turn off seccomp confinement for the container
|
||||
- **seccomp**=_profile.json_: Allowed syscall list seccomp JSON file to be used as a seccomp filter
|
||||
- **proc-opts**=_OPTIONS_ : Comma separated list of options to use for the /proc mount. More details
|
||||
for the possible mount options are specified at **proc(5)** man page.
|
||||
|
||||
- **proc-opts**=_OPTIONS_ : Comma-separated list of options to use for the /proc mount. More details
|
||||
for the possible mount options are specified in the **proc(5)** man page.
|
||||
|
||||
- **unmask**=_ALL_ or _/path/1:/path/2_: Paths to unmask separated by a colon. If set to **ALL**, it will
|
||||
unmask all the paths that are masked or made read only by default.
|
||||
The default masked paths are **/proc/acpi, /proc/kcore, /proc/keys, /proc/latency_stats, /proc/sched_debug, /proc/scsi, /proc/timer_list, /proc/timer_stats, /sys/firmware, and /sys/fs/selinux.**. The default paths that are read only are **/proc/asound**, **/proc/bus**, **/proc/fs**, **/proc/irq**, **/proc/sys**, **/proc/sysrq-trigger**, **/sys/fs/cgroup**.
|
||||
@ -1164,7 +1180,7 @@ container. Similarly, _SOURCE-VOLUME_:_/CONTAINER-DIR_ will mount the volume
|
||||
in the host to the container. If no such named volume exists, Podman will
|
||||
create one. (Note when using the remote client, the volumes will be mounted from the remote server, not necessarly the client machine.)
|
||||
|
||||
The _options_ is a comma delimited list and can be: <sup>[[1]](#Footnote1)</sup>
|
||||
The _options_ is a comma-separated list and can be: <sup>[[1]](#Footnote1)</sup>
|
||||
|
||||
* **rw**|**ro**
|
||||
* **z**|**Z**
|
||||
@ -1252,7 +1268,7 @@ host into the container to allow speeding up builds.
|
||||
Content mounted into the container is labeled with the private label.
|
||||
On SELinux systems, labels in the source directory must be readable
|
||||
by the container label. Usually containers can read/execute `container_share_t`
|
||||
and can read/write `container_file_t`. If you can not change the labels on a
|
||||
and can read/write `container_file_t`. If you cannot change the labels on a
|
||||
source volume, SELinux container separation must be disabled for the container
|
||||
to work.
|
||||
- The source directory mounted into the container with an overlay mount
|
||||
@ -1314,10 +1330,14 @@ will convert /foo into a shared mount point. Alternatively, one can directly
|
||||
change propagation properties of source mount. Say, if _/_ is source mount for
|
||||
_/foo_, then use **mount --make-shared /** to convert _/_ into a shared mount.
|
||||
|
||||
Note: if the user only has access rights via a group, accessing the volume
|
||||
from inside a rootless container will fail. Use the `--group-add keep-groups`
|
||||
flag to pass the user's supplementary group access into the container.
|
||||
|
||||
#### **\-\-volumes-from**[=*CONTAINER*[:*OPTIONS*]]
|
||||
|
||||
Mount volumes from the specified container(s). Used to share volumes between
|
||||
containers. The *options* is a comma delimited list with the following available elements:
|
||||
containers. The *options* is a comma-separated list with the following available elements:
|
||||
|
||||
* **rw**|**ro**
|
||||
* **z**
|
||||
@ -1699,6 +1719,11 @@ Multiple containers can be required.
|
||||
$ podman create --name container1 -t -i fedora bash
|
||||
$ podman create --name container2 -t -i fedora bash
|
||||
$ podman run --name container3 --requires container1,container2 -t -i fedora bash
|
||||
|
||||
### Configure keep supplemental groups for access to volume
|
||||
|
||||
```
|
||||
$ podman run -v /var/lib/design:/var/lib/design --group-add keep-groups ubi8
|
||||
```
|
||||
|
||||
### Rootless Containers
|
||||
|
@ -16,7 +16,7 @@ A secret is a blob of sensitive data which a container needs at runtime but
|
||||
should not be stored in the image or in source control, such as usernames and passwords,
|
||||
TLS certificates and keys, SSH keys or other important generic strings or binary content (up to 500 kb in size).
|
||||
|
||||
Secrets will not be commited to an image with `podman commit`, and will not be in the archive created by a `podman export`
|
||||
Secrets will not be committed to an image with `podman commit`, and will not be in the archive created by a `podman export`
|
||||
|
||||
## OPTIONS
|
||||
|
||||
|
@ -1313,7 +1313,7 @@ func (c *Container) stop(timeout uint) error {
|
||||
}
|
||||
|
||||
// We have to check stopErr *after* we lock again - otherwise, we have a
|
||||
// change of panicing on a double-unlock. Ref: GH Issue 9615
|
||||
// change of panicking on a double-unlock. Ref: GH Issue 9615
|
||||
if stopErr != nil {
|
||||
return stopErr
|
||||
}
|
||||
@ -1676,7 +1676,7 @@ func (c *Container) chownVolume(volumeName string) error {
|
||||
|
||||
// TODO: For now, I've disabled chowning volumes owned by non-Podman
|
||||
// drivers. This may be safe, but it's really going to be a case-by-case
|
||||
// thing, I think - safest to leave disabled now and reenable later if
|
||||
// thing, I think - safest to leave disabled now and re-enable later if
|
||||
// there is a demand.
|
||||
if vol.state.NeedsChown && !vol.UsesVolumeDriver() {
|
||||
vol.state.NeedsChown = false
|
||||
|
@ -5,7 +5,7 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// FileInfo describes the attributes of a file or diretory.
|
||||
// FileInfo describes the attributes of a file or directory.
|
||||
type FileInfo struct {
|
||||
Name string `json:"name"`
|
||||
Size int64 `json:"size"`
|
||||
|
@ -50,7 +50,7 @@ func findImageInRepotags(search imageParts, images []*Image) (*storage.Image, er
|
||||
|
||||
// If more then one candidate and the candidates all have same name
|
||||
// and only one is read/write return it.
|
||||
// Othewise return error with the list of candidates
|
||||
// Otherwise return error with the list of candidates
|
||||
if len(candidates) > 1 {
|
||||
var (
|
||||
rwImage *Image
|
||||
|
@ -18,7 +18,7 @@ var (
|
||||
stopped bool
|
||||
sigChan chan os.Signal
|
||||
cancelChan chan bool
|
||||
// Syncronize accesses to the map
|
||||
// Synchronize accesses to the map
|
||||
handlerLock sync.Mutex
|
||||
// Definitions of all on-shutdown handlers
|
||||
handlers map[string]func(os.Signal) error
|
||||
|
@ -76,7 +76,7 @@ func WaitContainerDocker(w http.ResponseWriter, r *http.Request) {
|
||||
exitCode, err := waitDockerCondition(ctx, name, interval, condition)
|
||||
msg := ""
|
||||
if err != nil {
|
||||
logrus.Errorf("error while waiting on condtion: %q", err)
|
||||
logrus.Errorf("error while waiting on condition: %q", err)
|
||||
msg = err.Error()
|
||||
}
|
||||
responseData := handlers.ContainerWaitOKBody{
|
||||
|
@ -428,7 +428,7 @@ func readConfigMapFromFile(r io.Reader) (v1.ConfigMap, error) {
|
||||
return cm, nil
|
||||
}
|
||||
|
||||
// splitMultiDocYAML reads mutiple documents in a YAML file and
|
||||
// splitMultiDocYAML reads multiple documents in a YAML file and
|
||||
// returns them as a list.
|
||||
func splitMultiDocYAML(yamlContent []byte) ([][]byte, error) {
|
||||
var documentList [][]byte
|
||||
@ -471,7 +471,7 @@ func getKubeKind(obj []byte) (string, error) {
|
||||
}
|
||||
|
||||
// sortKubeKinds adds the correct creation order for the kube kinds.
|
||||
// Any pod dependecy will be created first like volumes, secrets, etc.
|
||||
// Any pod dependency will be created first like volumes, secrets, etc.
|
||||
func sortKubeKinds(documentList [][]byte) ([][]byte, error) {
|
||||
var sortedDocumentList [][]byte
|
||||
|
||||
|
@ -170,7 +170,7 @@ func Decompress(localPath, uncompressedPath string) error {
|
||||
|
||||
// Will error out if file without .xz already exists
|
||||
// Maybe extracting then renameing is a good idea here..
|
||||
// depends on xz: not pre-installed on mac, so it becomes a brew dependecy
|
||||
// depends on xz: not pre-installed on mac, so it becomes a brew dependency
|
||||
func decompressXZ(src string, output io.Writer) error {
|
||||
fmt.Println("Extracting compressed file")
|
||||
cmd := exec.Command("xzcat", "-k", src)
|
||||
|
@ -56,7 +56,7 @@ func ToPodGen(ctx context.Context, podName string, podYAML *v1.PodTemplateSpec)
|
||||
}
|
||||
p.DNSServer = servers
|
||||
}
|
||||
// search domans
|
||||
// search domains
|
||||
if domains := dnsConfig.Searches; len(domains) > 0 {
|
||||
p.DNSSearch = domains
|
||||
}
|
||||
|
@ -199,8 +199,8 @@ func TestEscapeSystemdArguments(t *testing.T) {
|
||||
[]string{"foo", `"command with backslash \\"`},
|
||||
},
|
||||
{
|
||||
[]string{"foo", `command with two backslashs \\`},
|
||||
[]string{"foo", `"command with two backslashs \\\\"`},
|
||||
[]string{"foo", `command with two backslashes \\`},
|
||||
[]string{"foo", `"command with two backslashes \\\\"`},
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -94,7 +94,7 @@ func PrepareFilters(r *http.Request) (*map[string][]string, error) {
|
||||
return &filterMap, nil
|
||||
}
|
||||
|
||||
// MatchLabelFilters matches labels and returs true if they are valid
|
||||
// MatchLabelFilters matches labels and returns true if they are valid
|
||||
func MatchLabelFilters(filterValues []string, labels map[string]string) bool {
|
||||
outer:
|
||||
for _, filterValue := range filterValues {
|
||||
|
@ -378,7 +378,7 @@ class TestApi(unittest.TestCase):
|
||||
self.assertEqual(r.status_code, 200, r.text)
|
||||
objs = json.loads(r.text)
|
||||
self.assertIn(type(objs), (list,))
|
||||
# There should be only one offical image
|
||||
# There should be only one official image
|
||||
self.assertEqual(len(objs), 1)
|
||||
|
||||
def do_search4():
|
||||
|
@ -114,7 +114,7 @@ load helpers
|
||||
@test "podman stop - unlock while waiting for timeout" {
|
||||
# Test that the container state transitions to "stopping" and that other
|
||||
# commands can get the container's lock. To do that, run a container that
|
||||
# ingores SIGTERM such that the Podman would wait 20 seconds for the stop
|
||||
# ignores SIGTERM such that the Podman would wait 20 seconds for the stop
|
||||
# to finish. This gives us enough time to try some commands and inspect
|
||||
# the container's status.
|
||||
|
||||
|
@ -354,7 +354,7 @@ Cmd[1] | $s_echo
|
||||
WorkingDir | $workdir
|
||||
Labels.$label_name | $label_value
|
||||
"
|
||||
# FIXME: 2021-02-24: Fixed in buildah #3036; reenable this once podman
|
||||
# FIXME: 2021-02-24: Fixed in buildah #3036; re-enable this once podman
|
||||
# vendors in a newer buildah!
|
||||
# Labels.\"io.buildah.version\" | $buildah_version
|
||||
|
||||
|
45
test/system/170-run-userns.bats
Normal file
45
test/system/170-run-userns.bats
Normal file
@ -0,0 +1,45 @@
|
||||
#!/usr/bin/env bats -*- bats -*-
|
||||
# shellcheck disable=SC2096
|
||||
#
|
||||
# Tests for podman build
|
||||
#
|
||||
|
||||
load helpers
|
||||
|
||||
@test "podman --group-add keep-groups while in a userns" {
|
||||
skip_if_rootless "choot is not allowed in rootless mode"
|
||||
skip_if_remote "--group-add keep-groups not supported in remote mode"
|
||||
run chroot --groups 1234 / ${PODMAN} run --uidmap 0:200000:5000 --group-add keep-groups $IMAGE id
|
||||
is "$output" ".*65534(nobody)" "Check group leaked into user namespace"
|
||||
}
|
||||
|
||||
@test "podman --group-add keep-groups while not in a userns" {
|
||||
skip_if_rootless "choot is not allowed in rootless mode"
|
||||
skip_if_remote "--group-add keep-groups not supported in remote mode"
|
||||
run chroot --groups 1234,5678 / ${PODMAN} run --group-add keep-groups $IMAGE id
|
||||
is "$output" ".*1234" "Check group leaked into container"
|
||||
}
|
||||
|
||||
@test "podman --group-add without keep-groups while in a userns" {
|
||||
skip_if_rootless "choot is not allowed in rootless mode"
|
||||
skip_if_remote "--group-add keep-groups not supported in remote mode"
|
||||
run chroot --groups 1234,5678 / ${PODMAN} run --uidmap 0:200000:5000 --group-add 457 $IMAGE id
|
||||
is "$output" ".*457" "Check group leaked into container"
|
||||
}
|
||||
|
||||
@test "podman --remote --group-add keep-groups " {
|
||||
if is_remote; then
|
||||
run_podman 125 run --group-add keep-groups $IMAGE id
|
||||
is "$output" ".*not supported in remote mode" "Remote check --group-add keep-groups"
|
||||
fi
|
||||
}
|
||||
|
||||
@test "podman --group-add without keep-groups " {
|
||||
run_podman run --group-add 457 $IMAGE id
|
||||
is "$output" ".*457" "Check group leaked into container"
|
||||
}
|
||||
|
||||
@test "podman --group-add keep-groups plus added groups " {
|
||||
run_podman 125 run --group-add keep-groups --group-add 457 $IMAGE id
|
||||
is "$output" ".*the '--group-add keep-groups' option is not allowed with any other --group-add options" "Check group leaked into container"
|
||||
}
|
Reference in New Issue
Block a user