Commit Graph

216 Commits

Author SHA1 Message Date
Qi Wang
34e82f81bd validate fds --preserve-fds
validate file descriptors passed from podman run and podman exec --preserve-fds.

Signed-off-by: Qi Wang <qiwan@redhat.com>
2020-08-04 15:09:17 -04:00
Giuseppe Scrivano
8df7ab24b0 rootless: system service joins immediately the namespaces
when there is a pause process running, let the "system service" podman
instance join immediately the existing namespaces.

Closes: https://github.com/containers/podman/issues/7180
Closes: https://github.com/containers/podman/issues/6660

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-08-03 22:08:17 +02:00
Giuseppe Scrivano
d188b2fe22 rootless: add a check for the host id included in the range
add a check to verify whether the additional IDs also contain the host
ID.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-07-30 23:16:50 +02:00
Giuseppe Scrivano
d86ef45441 rootless: child exits immediately on userns errors
if the parent process failed to create the user namespace, let the
child exit immediately.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-07-30 21:46:04 +02:00
Giuseppe Scrivano
8408cfd35c rootless: do not ignore errors if mappings are specified
when setting up the user namespace do not ignore errors from
newuidmap/newgidmap if there are mappings configured.

The single user mapping is a fallback only when there are not mappings
specified for the user.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-07-30 21:43:09 +02:00
Daniel J Walsh
6979d140f1 Add podman image mount
There are many use cases where you want to just mount an image
without creating a container on it. For example you might want
to just examine the content in an image after you pull it for
security analysys.  Or you might want to just use the executables
on the image without running it in a container.

The image is mounted readonly since we do not want people changing
images.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-07-28 10:27:44 -04:00
Daniel J Walsh
a5e37ad280 Switch all references to github.com/containers/libpod -> podman
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-07-28 08:23:45 -04:00
Daniel J Walsh
8f7ed50cb2 Cleanup handling of podman mount/unmount
We should default to the user name unmount rather then the internal
name of umount.

Also User namespace was not being handled correctly. We want to inform
the user that if they do a mount when in rootless mode that they have
to be first in the podman unshare state.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-07-27 16:53:02 -04:00
Valentin Rothberg
8489dc4345 move go module to v2
With the advent of Podman 2.0.0 we crossed the magical barrier of go
modules.  While we were able to continue importing all packages inside
of the project, the project could not be vendored anymore from the
outside.

Move the go module to new major version and change all imports to
`github.com/containers/libpod/v2`.  The renaming of the imports
was done via `gomove` [1].

[1] https://github.com/KSubedi/gomove

Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
2020-07-06 15:50:12 +02:00
Douglas Schilling Landgraf
11e237bc3a rootless_linux: improve error message
Improve the error message for rootless mode.

Git-Url: https://github.com/containers/libpod/issues/6572
Signed-off-by: Douglas Schilling Landgraf <dougsland@redhat.com>
2020-06-21 06:35:25 -04:00
Giuseppe Scrivano
89d4940a37 rootless: move ns open before fork
commit 788fdc685b introduced a race
where the target process dies before the child process opens the
namespace files.  Move the open before the fork so if it fails the
parent process can attempt to join a different container instead of
failing.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-04-29 11:44:24 +02:00
Giuseppe Scrivano
788fdc685b rootless: move join namespace inside child process
open the namespace file descriptors inside of the child process.

Closes: https://github.com/containers/libpod/issues/5873

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-04-20 17:40:25 +02:00
Giuseppe Scrivano
8360fcf82c rootless: skip looking up parent user ns
since we join directly the conmon user namespace, there is no need to
look up its parent user namespace, as we can safely assume it is the
init namespace.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-04-20 17:40:24 +02:00
Giuseppe Scrivano
c33371fadb rootless: use snprintf
use directly snprintf instead of strlen+strcpy.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-04-13 13:35:38 +02:00
Giuseppe Scrivano
1091440e5d rootless: fix usage with hidepid=1
when /proc is mounted with hidepid=1 a process doesn't see processes
from the outer user namespace.  This causes an issue reading the
cmdline from the parent process.

To address it, always read the command line from /proc/self instead of
using /proc/PARENT_PID.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-03-19 11:18:23 +01:00
OpenShift Merge Robot
6a03a9a538 Merge pull request #5324 from giuseppe/fix-running-no-pause
rootless: raise error if the process is not found
2020-02-25 21:16:26 +01:00
Giuseppe Scrivano
6dbb89e56c rootless: become root only if the pause file is specified
we need to store the pause process PID file so that it can be re-used
later.

commit e9dc212092 introduced this
regression.

Closes: https://github.com/containers/libpod/issues/5246

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-02-25 18:15:29 +01:00
Giuseppe Scrivano
d400f0b5b2 rootless: fix segfault when open fd >= FD_SETSIZE
if there are more than FD_SETSIZE open fds passed down to the Podman
process, the initialization code could crash as it attempts to store
them into a fd_set.  Use an array of fd_set structs, each of them
holding only FD_SETSIZE file descriptors.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-02-25 17:52:06 +01:00
Giuseppe Scrivano
e9dc212092 rootless: check if the conmon process is valid
if the pause process doesn't exist and  we try to join a conmon
namespace, make sure the process still exists.  Otherwise re-create
the user namespace.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-02-17 19:11:41 +01:00
Giuseppe Scrivano
1d9537e242 rootless: enable shortcut only for podman
disable joining automatically the user namespace if the process is not
podman.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-01-29 16:16:36 -06:00
Giuseppe Scrivano
ab7744d3c1 rootless: set C variables also on shortcut
make sure the rootless env variables are set also when we are joining
directly the user+mount namespace without creating a new process.

It is required by pkg/unshare in containers/common.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-01-20 16:42:45 +01:00
Valentin Rothberg
83764b84ec fix lint in pkg/rootless
Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
2020-01-08 15:44:30 +01:00
Giuseppe Scrivano
a94e625868 rootless: add fallback for renameat2 at runtime
the renameat2 syscall might be defined in the C library but lacking
support in the kernel.

In such case, let it fallback to open(O_CREAT)+rename as it does on
systems lacking the definition for renameat2.

Closes: https://github.com/containers/libpod/issues/4570

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-12-04 10:30:40 +01:00
Giuseppe Scrivano
0a8dcd7112 rootless: provide workaround for missing renameat2
on RHEL 7.7 renameat2 is not implemented for s390x, provide a
workaround.

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1768519

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-11-06 15:27:46 +01:00
Giuseppe Scrivano
a114e9059a rootless: use SYS_renameat2 instead of __NR_renameat2
use the correct definition for the syscall number.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-11-06 13:41:15 +01:00
Giuseppe Scrivano
64f53b4f02 rootless: do not enable lingering mode
do not automatically enable lingering mode.

Closes: https://github.com/containers/libpod/issues/4224

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-10-17 19:12:10 +02:00
Giuseppe Scrivano
550ff9d49a rootless: drop dependency on docker
use the definition from "golang.org/x/sys/unix".

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-10-16 22:22:52 +02:00
Qi Wang
3fff42e0ab show uid_map in podman info
show uid_map gid_map in podman info

Signed-off-by: Qi Wang <qiwan@redhat.com>
2019-10-09 21:27:18 -04:00
Giuseppe Scrivano
2ceb03d05e rootless: automatically recreate the pause.pid file
if the pause process cannot be joined, remove the pause.pid while
keeping a lock on it, and try to recreate it.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-10-09 16:02:21 +02:00
Giuseppe Scrivano
9a61b765d0 rootless: do not close files twice
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-10-09 15:49:12 +02:00
Matthew Heon
62c0b387f5 Set log-level immediately, before rootless setup
If we don't do this, we print WARN level messages that we should
not be printing by default.

Up one WARN message to ERROR so it still shows up by default.

Fixes: #4115
Fixes: #4012

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2019-09-26 16:14:57 -04:00
Giuseppe Scrivano
1a24ac7ad6 pkg/util: use rootless function to read additional users
make pkg/rootless.GetConfiguredMappings public so that it can be used
from pkg/util.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-09-03 14:38:08 +02:00
Giuseppe Scrivano
cfe1d27688 rootless: detect user namespace configuration changes
detect if the current user namespace doesn't match the configuration
in the /etc/subuid and /etc/subgid files.

If there is a mismatch, raise a warning and suggest the user to
recreate the user namespace with "system migrate", that also restarts
the containers.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-09-03 13:46:48 +02:00
OpenShift Merge Robot
146719718e Merge pull request #3782 from eriksjolund/fix_realloc_in_rootless_linux.c
Fix incorrect use of realloc()
2019-08-11 19:44:58 +02:00
Erik Sjölund
39ce3626e0 Adjust read count so that a newline can be added afterwards
Signed-off-by: Erik Sjölund <erik.sjolund@gmail.com>
2019-08-11 16:44:26 +02:00
Erik Sjölund
4d3cf9b576 Fix incorrect use of realloc()
Signed-off-by: Erik Sjölund <erik.sjolund@gmail.com>
2019-08-11 15:58:20 +02:00
Daniel J Walsh
44126969f1 Fix a couple of errors descovered by coverity
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2019-08-09 15:33:16 -04:00
baude
db826d5d75 golangci-lint round #3
this is the third round of preparing to use the golangci-lint on our
code base.

Signed-off-by: baude <bbaude@redhat.com>
2019-07-21 14:22:39 -05:00
baude
a78c885397 golangci-lint pass number 2
clean up and prepare to migrate to the golangci-linter

Signed-off-by: baude <bbaude@redhat.com>
2019-07-11 09:13:06 -05:00
baude
e053e0e05e first pass of corrections for golangci-lint
Signed-off-by: baude <bbaude@redhat.com>
2019-07-10 15:52:17 -05:00
baude
fec1de6ef4 trivial cleanups from golang
the results of a code cleanup performed by the goland IDE.

Signed-off-by: baude <bbaude@redhat.com>
2019-07-03 15:41:33 -05:00
Giuseppe Scrivano
35ab2184a3 rootless: allow to build without cgo
unfortunately rootless won't work without cgo, as most of the
implementation is in C, but at least allow to build libpod.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-02 16:41:02 +02:00
Giuseppe Scrivano
4b176d4f45 rootless: do not join namespace if it has already euid == 0
do not attempt to join the rootless namespace if it is running already
with euid == 0.

Closes: https://github.com/containers/libpod/issues/3463

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-01 21:58:33 +02:00
OpenShift Merge Robot
5e42bf0717 Merge pull request #3397 from giuseppe/fix-reboot
rootless: enable linger if /run/user/UID not exists
2019-06-28 16:00:55 +02:00
Danila Kiver
7ea7754e4a Exclude SIGTERM from blocked signals for pause process.
Currently pause process blocks all signals which may cause its
termination, including SIGTERM. This behavior hangs init(1) during
system shutdown, until pause process gets SIGKILLed after some grace
period. To avoid this hanging, SIGTERM is excluded from list of blocked
signals.

Fixes #3440

Signed-off-by: Danila Kiver <danila.kiver@mail.ru>
2019-06-28 00:18:13 +03:00
Giuseppe Scrivano
7255468e65 rootless: enable linger if /run/user/UID not exists
at least on Fedora 30 it creates the /run/user/UID directory for the
user logged in via ssh.

This needs to be done very early so that every other check when we
create the default configuration file will point to the correct
location.

Closes: https://github.com/containers/libpod/issues/3410

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-06-27 16:34:35 +02:00
Sascha Grunert
4bfbc355de Build cgo files with -Wall -Werror
To avoid unnecessary warnings and errors in the future I'd like to
propose building all cgo related sources with `-Wall -Werror`. This
commit fixes some warnings which came up in `shm_lock.c`, too.

Signed-off-by: Sascha Grunert <sgrunert@suse.com>
2019-06-21 10:14:19 +02:00
OpenShift Merge Robot
f446ccf0b0 Merge pull request #3379 from openSUSE/rootless-fix
Fix format specifiers in rootless_linux.c
2019-06-21 00:18:24 -07:00
OpenShift Merge Robot
f65ddc0991 Merge pull request #3380 from openSUSE/asprintf-fix
Handle possible asprintf failure in rootless_linux.c
2019-06-20 12:30:27 -07:00
Sascha Grunert
6e318a01a0 Fix execvp uage in rootless_linux.c
The second argument of `execlp` should be of type `char *`, so we need
to add an additional argument there.

Signed-off-by: Sascha Grunert <sgrunert@suse.com>
2019-06-20 15:07:01 +02:00