Commit Graph
80194 Commits
Author SHA1 Message Date
Zbigniew Jędrzejewski-Szmek ace814f0a8 update-done: create /etc and /var if they didn't exist
Previously, we would fail. But this doesn't seem useful: we may want to
mark the update as done even if /etc/ or /var/ no updates were necessary
and there was no need to create /etc/ or /var/ yet.
2025-03-20 15:57:14 +01:00
Zbigniew Jędrzejewski-Szmek 2ff40c758e update-done: add --root= arg
The idea is to use this when building an image to mark the image as not
needing updates after the reboot. In general it is impossible to say if
any of the early boot update services can be safely skipped, except when
the creator of the image knows all the contents there and has made sure
that all the updates have been processed. (This is in fact what happens
in a typical package-based installation: the packages have scriptlets which
implement the changes during or after the installation process.)

With this patch, the image build process can do 'systemd-update-done --root=…'
at the appropriate point to avoid triggering of ldconfig.service,
systemd-hwdb-update.service, etc.

I didn't write --image=, because it doesn't seem immediately useful. The
approach with --root is most useful when we're building the image "offline",
which means that we have a directory we're working on.
2025-03-20 15:57:14 +01:00
Zbigniew Jędrzejewski-Szmek 20f7f0a891 update-done: add basic argument parsing and --help
We certainly want to reject calls with any args specified. Previously
we would just silently ignore any args.
2025-03-20 15:15:48 +01:00
Zbigniew Jędrzejewski-Szmek bca9a6e2be update-done: split out run() 2025-03-20 14:36:20 +01:00
Zbigniew Jędrzejewski-Szmek 04db1a6aec update-done: adjust comments
The man page was right, but the comment in the generated file was wrong. The
timestamp is *not* the timestamp when the update is being done. While at it,
say to what directory the message applies. This makes it easier for a casual
reader to figure out what is happening.

Also rename the function to better reflect what it does.

Inspired by https://github.com/systemd/systemd/issues/36045.
2025-03-20 14:36:20 +01:00
Daan De Meyer 511bf79b4e userdb: Add userdb.user.* and userdb.group.* credentials (#36740)
Let's allow providing extra userdb users and groups via credentials.
Similarly to systemd-udev-load-credentials.service, we ship
systemd-userdb-load-credentials.service which transform the JSON
user/group records provided via the corresponding credentials to static
userdb dropins in /run/userdb.
2025-03-19 10:30:52 +01:00
Daan De Meyer 04a44e25b9 units: Add systemd-machined.socket 2025-03-19 09:28:12 +01:00
Daan De Meyer 95f94bc804 Update TODO 2025-03-18 22:46:10 +01:00
Daan De Meyer a8a44b7ce5 mkosi: Create testuser at runtime
Now that we have userdb credentials, let's ship testuser as a userdb
credential instead of including it in the image.
2025-03-18 22:46:10 +01:00
Daan De Meyer fe0342edf4 userdb: Add userdb.user.* and userdb.group.* credentials
Let's allow providing extra userdb users and groups via credentials.
Similarly to systemd-udev-load-credentials.service, we ship
systemd-userdb-load-credentials.service which transform the JSON
user/group records provided via the corresponding credentials to static
userdb dropins in /etc/userdb.

Replaces #33811
2025-03-18 22:46:10 +01:00
Daan De Meyer e5039d459e mkosi: Make sure systemd-userdbd.socket is enabled 2025-03-18 22:46:10 +01:00
Daan De Meyer 5ecc08e033 mkosi: Add unix_chkpwd to sanitizer wrapped binaries
unix_chkpwd will retrieve the user name of the uid it is invoked as
and as such needs the asan workaround.
2025-03-18 22:46:10 +01:00
Daan De Meyer 9165d92406 mkosi: Bump to Fedora 42
Beta was just released, let's switch to Fedora 42 which coincidentally
also has a crucial fix for its nsswitch.conf to make the next commits
actually work.
2025-03-18 20:35:59 +01:00
Daan De Meyer d2ce0db7a7 Several fixes and cleanups around sd_listen_fds() (#36788) 2025-03-18 20:10:33 +01:00
Lennart Poettering bc78fc4de3 update TODO 2025-03-18 18:12:48 +01:00
Yu Watanabe b8d5303733 nspawn: make failure in sd_listen_fds() critical
Also, drop doubled call of sd_listen_fds().
2025-03-19 02:09:40 +09:00
Yu Watanabe 024bb0c63e oomd: do not ignore failure in sd_lisen_fds()
Also, use -EBADF for an invalid file descriptor.
2025-03-19 01:47:48 +09:00
Yu Watanabe d50b9cbe56 vmspawn: do not use r for loop count
In a future, we may call some functions and r may be used for storing
error code of them. Let's not use r for the maximum number of loop count.
2025-03-19 01:47:48 +09:00
Yu Watanabe a65d2de6d1 sd-varlink: fix overwrite of loop count
Fixes a bug introduced by 206504a594 (v255).
2025-03-19 01:47:20 +09:00
Yu Watanabe 59cb9b12ab initctl: fix error handling
Fixes a bug introduced by cc090ca7fe (v246).
2025-03-19 01:44:01 +09:00
Yu Watanabe a0272b8356 nsresourced: fix assignment of target_gid
Follow-up for 00b1f67313.

Fixes CID#1593901.
2025-03-18 12:13:38 +00:00
Lennart Poettering 160a4281f5 man: base64 is not hex 2025-03-18 12:13:15 +00:00
Lennart Poettering 7b0c843b87 TODO 2025-03-18 11:48:37 +01:00
Lennart Poettering 8d3acc8387 update TODO 2025-03-18 10:45:32 +01:00
Yu Watanabe 910dcd7049 getty-generator: unify add_serial_getty() and add_container_getty()
This also makes the generator not trigger an assertion added by
1cd3c49d09. If getty.ttys.container
credential contains a line prefixed with '/dev/', then the assertion
    assert(!path_startswith(tty, "/dev/"));
was triggered. This drops the offending assertion, and such lines
are handled gracefully now.

Also, an empty string, "/dev/", and "/dev/pts/" (that is, a directory
without tty name) are gracefully skipped now.
2025-03-18 18:25:10 +09:00
Lennart Poettering 0364329a03 xattr-util: refuse embedded NUL bytes in getxattr_at_malloc() (#36713) 2025-03-18 09:10:19 +01:00
Lennart Poettering 2d47f43b43 cgroup-util: remove cg_get_xattr(), it's apparently unused 2025-03-18 07:17:10 +01:00
Lennart Poettering 33cbda04eb xattr-util: rework getxattr_at_malloc()
Let's return the size in a return parameter instead of the return value.
And if NULL is specified this tells us the caller doesn't care about the
size and expects a NUL terminated string. In that case look for an
embedded NUL byte, and refuse in that case.

This should lock things down a bit, as we'll systematically refuse
embedded NUL strings now when we expect strings.
2025-03-18 07:17:10 +01:00
Sonia Zorba 147511c643 hwdb: fix backspace not working on HP Pavilion laptop (#36777)
PR #34685 moved the handling of keys 66/65 from specific models to
generic HP laptops.

Key 66 has been linked to the `pickup_phone` function; however, this
action key is not available on all HP laptop models, particularly older
versions. On my HP Pavilion laptop, key 66 is mapped to the `backspace`
function, which caused the backspace key to stop working after the
change.

The following PR fixes the issue on my **HP Pavilion Laptop 15-eg0xxx**.
I have placed the modifications under the Pavilion section, but I cannot
guarantee that this solution will apply to all Pavilion models.

Additionally, I have included a line that checks for "HP" instead of
solely searching for "Hewlett-Packard," as my model is simply labeled as
HP.
2025-03-18 09:25:51 +09:00
Yu Watanabe c9c2679a62 some user record fixes (#36776)
Fixes: https://github.com/systemd/systemd/issues/36775
2025-03-18 09:24:05 +09:00
Mike Yuan 2b983b43c6 run: Ref() the unit again after reconnecting to the bus
Follow-up for c8f59296bf

Currently, the unit is only reffed in transient_unit_set_properties()
via AddRef(), which however would be dropped if a reconnection
is attempted. Make sure to explicitly re-add reference in that case.
2025-03-18 09:23:44 +09:00
Yu Watanabe 8e29a5b9b3 nsresourced,vmspawn: allow unpriv "tap" based networking in vmspawn (#36688)
This extends nsresourced to also allow delegation of a network tap
device (in addition to veth) to unpriv clients, with a strictly enforced
naming scheme.

also tightens security on a couple of things:

* enforces polkit on all nsresourced ops too (though by default still
everything is allowed)
* put a limit on delegated network devices
* forcibly clean up delegated network devices when the userns goes away
2025-03-18 07:34:03 +09:00
Lennart Poettering 91d11d53a1 tree-wide: refuse user/group records lacking UID or GID
userdb allows user/group records without UID/GID (it only really
requires a name), in order to permit "unfixated" records. But that means
we cannot just rely on the field to be valid. And we mostly got that
right, but not everywhere. Fix that.
2025-03-17 22:37:14 +01:00
Lennart Poettering d43a440767 nspawn: go via user_record_home_directory() accessor for .home_directory UserRecord field
Fixes: #36775
2025-03-17 22:23:18 +01:00
Lennart Poettering ca4560f6a8 tree-wide: go via user_record_gid() accessor for UserRecord's .gid field
Sometimes we went for the field directly, where we really should go via
the accessor. Fix it.
2025-03-17 22:21:58 +01:00
Lennart Poettering 2f3314bce6 update TODO 2025-03-17 21:39:06 +01:00
Lennart Poettering ef197d6ab2 test: add test for nsresourced 2025-03-17 21:39:05 +01:00
Lennart Poettering 6e09c46a51 nsresource: turn feature absence error into EOPNOTSUPP
Let's make it easy for local clients to treat feature absence as a
simple EOPNOTSUPP check.
2025-03-17 16:03:18 +01:00
Lennart Poettering 3b6d1fb49f varlink: add full introspection comments for io.systemd.NamespaceResource 2025-03-17 16:03:18 +01:00
Lennart Poettering d2f3ddfc65 nsresourced: check polkit before executing our operations
Let's tighten rules on namespace operations: let's always ask PK for
permission before doing anything.

Note that if polkit is absent we'll still allow things, and the default
PK policy will also still allow things, but there's now a clear way how
people can not allow things if they want, by modifying the PK policy.
2025-03-17 16:03:18 +01:00
Lennart Poettering b2c43674a7 nsresourced: put a limit on delegated network interfaces too 2025-03-17 16:03:18 +01:00
Lennart Poettering 7d2e2900f1 nsresourced: explicitly remove network interfaces when their userns goes away
Let's tighten the screws a bit on the network interfaces we delegate,
and explicitly destroy them, just like we destroy delegated cgroups.

Ideally, this should happen automatically because the userns goes away
that pins the veth, or because the client holding an fd for a tap device
goes away as the userns goes away. But you never know who keeps a
reference, hence let's explicitly destroy this too.
2025-03-17 16:03:18 +01:00
Lennart Poettering e29d5385b6 vmspawn: support unpriv tap networking 2025-03-17 16:03:18 +01:00
Lennart Poettering 716bf93c4b nsresource: add client-side wrapper for creating tap links 2025-03-17 16:03:18 +01:00
Lennart Poettering 19ac01efef network: also manage namespace tap links 2025-03-17 16:03:18 +01:00
Lennart Poettering 1365034727 nsresourced: add ability to delegate tap device 2025-03-17 16:03:18 +01:00
Lennart Poettering 00b1f67313 nsresourced: permit differing uid/gid 2025-03-17 16:03:18 +01:00
Lennart Poettering 5c9327e353 namespace: simplify apply_one_mount() a bit
Drop a bunch of unnecessary casts, format strings, and {} blocks.
2025-03-17 16:03:18 +01:00
Lennart Poettering 783b40bd73 namespace-util: introduce userns_acquire_self_root()
This is a simple helper for creating a userns that just maps the
callers user to UID 0 in the namespace. This can be acquired unpriv,
which makes it useful for various purposes, for example for the logic in
is_idmapping_supported(), hence port it over.

(is_idmapping_supported() used a different mapping before, with the
nobody users, but there's no real reason for that, and we'll use
userns_acquire_self_root() elsewhere soon, where the root mapping is
important).
2025-03-17 16:03:18 +01:00
Lennart Poettering 6431c34b8a namespace-util: make "setgroups" users property writable via userns_acquire()
Unprivileged namespaces are only allowed if the "setgroups" file is set
to "deny" for processes. And we need to write it before writing the
gidmap. Hence add a parameter for that.

Then, also patch all current users to actually enable this. The usecase
generally don't need it (because they don't care about unprivileged
userns), but it doesn't hurt to enable the concept anyway in all current
users (none of them actually runs complex userspace in them, but they
mostly use userns_acquire() for idmapped mounts and similar).

Let's anyway make this option explicit in the function call, to indicate
that the concept exists and is applied.
2025-03-17 16:03:18 +01:00