agama/rust/zypp-agama
Ladislav Slezák 078af95a65
Optionally disable remote access (#3269)
## Problem

- https://jira.suse.com/browse/AGM-153
- For security reasons it should be possible to disable remote access to
the Agama web server. A server which is not reachable cannot be hacked.
😃

## Solution

- Add a new `inst.listen_on` boot option, the possible values:
- `inst.listen_on=all` - listen on all network interfaces (allow local
and remote access). This is the default behavior used even without the
`inst.listen_on` option, added just for completeness.
- `inst.listen_on=localhost` - listen only on loop back (localhost)
device. This disables remote access, Agama can be accessed only locally.
- `inst.listen_on=<ip>` - listen on the specified IP address. Both IPv4
and IPv6 addresses are supported. It is possible to use multiple IP
addresses separated by comma. Addresses not found in the system are
ignored.
- `inst.listen_on=<interface>` - listen on the specified network
interface. Multiple interfaces can be separated by comma. Not found
interfaces are ignored.

Agama always listens on the local loop back interface even when
specifying a specific network interface or IP address for listening. The
reason is to avoid reporting connection errors by the Firefox started in
the Live ISO.

## Details

- The `--address2` CLI option has been removed, instead it is possible
to specify `--address` option multiple times.
- The PR includes the @mvidner's patch
https://github.com/agama-project/agama/pull/3111 - fallback to an IPv4
address when listening to IPv6 address fails (when IPv6 is disabled with
the `ipv6.disable=1` boot option)
- Added the `agama-web-server.sh` wrapper script started from the
systemd service. It evaluates the boot parameters and builds the address
parameters for the Agama server.

## Notes

- The other network services like SSH can be disabled using the standard
`systemd.mask` boot option. For example to disable the SSH service use
this boot option: `systemd.mask=sshd.service`. (I'll document this as
well...)

## Testing

- Tested manually in all scenarios: with disabled remote access,
listening on the specified IPv6 (including link local address) or IPv4
address, listening on specified interface, listening on multiple
interfaces
- Tested Martin's patch with the `ipv6.disable=1` boot option, Agama
properly listens on the IPv4 addresses in that case.

---------

Co-authored-by: Martin Vidner <mvidner@suse.com>
2026-03-12 14:12:15 +01:00
..
benches add working C code together with bench and example 2026-02-09 14:03:02 +01:00
examples add working C code together with bench and example 2026-02-09 14:03:02 +01:00
fixtures add unit tests 2025-12-23 11:11:03 +01:00
src Optionally disable remote access (#3269) 2026-03-12 14:12:15 +01:00
tests cargo fmt 2025-12-23 11:11:23 +01:00
zypp-agama-sys Optionally disable remote access (#3269) 2026-03-12 14:12:15 +01:00
Cargo.toml Clean-up unused dependencies 2026-03-03 11:40:36 +00:00
README.md reorganize a code and also apply code review suggestions 2025-11-12 21:48:42 +01:00

Zypp Agama

crate which purpose is to have thin layer to libzypp for agama purpose.

How to Add New Libzypp Call

  • at first create its C API in zypp-agama-sys/c-layer/include directory and write its implementation to cxx file.
  • generate new FFI bindings (in low level, unsafe Rust), in rust/zypp-agama-sys by running cargo build
  • write a (regular, safe) Rust wrapper, in src

Libzypp Notes

  • libzypp is not thread safe
  • for seeing how it works see yast2-pkg-bindings and zypper as some parameters in calls are ignored
  • goal is to have thin layer close to libzypp and build logic on top of it in more advanced language

Interesting Resources