Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tracking upstream projects that do not support hermetic-usr for configuration #76

Open
1 of 37 tasks
bluca opened this issue Sep 16, 2023 · 24 comments
Open
1 of 37 tasks

Comments

@bluca
Copy link
Member

bluca commented Sep 16, 2023

This issue will be used to track Linux projects that do not currently support hermetic-usr configuration style (ie: /usr/lib/foo as default, /run/foo as ephemeral local override, /etc/foo as persistent local override). The purpose is to have a cross-distribution list of items to slowly work through, to be able to have a bootable and working minimal Linux image-based system with only /usr.

This list is not definitive and will get updated as we go.

  • glibc:
  • update-alternatives (from dpkg) uses /etc/alternatives. There is https://github.com/openSUSE/libalternatives but this only works for binaries, not e.g. manual pages
  • SELinux
    • policycoreutils/sestatus (/etc/sestatus.conf)
    • selinux-policy installs the policy in /etc/selinux/ and /var/lib/selinux/. Especially the last is a problem, as this mixes user changes with policy defaults. /var/lib/selinux needs to be split: the package defaults belongs somewhere to /usr, which should be merged with the admin changes (should be stored in /etc/, not /var) at runtime.
  • apparmor
  • sudo has /etc/sudo.conf, /etc/sudoers and /etc/sudo_logsrvd.conf
  • audit (/etc/audit/auditd.conf, /etc/libaudit.conf)
  • rsync (/etc/rsyncd.conf)
  • chrony (/etc/chrony.conf)
  • podman and releated tools/libraries (/etc/containers)
  • apt
  • dpkg
  • dnf5 which requires /etc/dnf/dnf.conf
  • systemd "empty" main config files in /etc/systemd
  • udev "empty" main config files in /etc/udev
  • Xorg: /etc/X11/xinit/xinitrc.d/50-systemd-user.sh
  • mailx (/etc/mail.rc)
  • util-linux (/etc/blkid.conf)
  • fcoe-utils (/etc/fcoe/)
  • open-iscsi (/etc/iscsi/iscsid.conf)
  • krb5 (/etc/krb5.conf)
  • libnl (/etc/libnl/)
  • libssh (/etc/libssh/)
  • e2fsprogs (/etc/mke2fs.conf)
  • nftables (/etc/nftables/)
  • smartmontools (/etc/smartd.conf, /etc/smartd_warning.sh)
  • wpa_supplicant (/etc/wpa_supplicant/wpa_supplicant.conf)
  • attr (/etc/xattr.conf)
  • zypper (/etc/zypp/zypp.conf, /etc/zypp/zypper.conf)
@thkukuk
Copy link

thkukuk commented Sep 19, 2023

A first bunch, starting with a minimal OS running containers.

  • update-alternatives (from dpkg) uses /etc/alternatives. There is https://github.com/openSUSE/libalternatives but this only works for binaries, not e.g. manual pages
  • selinux-policy installs the policy in /etc/selinux/ and /var/lib/selinux/. Especially the last is a problem, as this mixes user changes with policy defaults. /var/lib/selinux needs to be splitted: the package defaults belongs somewhere to /usr, which should be merged with the admin changes (should be stored in /etc/, not /var) at runtime.
  • sudo has /etc/sudo.conf, /etc/sudoers and /etc/sudo_logsrvd.conf
  • audit (/etc/audit/auditd.conf, /etc/libaudit.conf)
  • rsync (/etc/rsyncd.conf)
  • chrony (/etc/chrony.conf)
  • podman and releated tools/libraries (/etc/containers)

@julian-klode
Copy link
Collaborator

APT and dpkg both don't support it. I haven't figured out the behavior for APT yet, tbh, it's weird because essentially everything is drop-ins for apt.conf these days.

@thkukuk
Copy link

thkukuk commented Sep 19, 2023

glibc for /etc/services (used by getservbyname/getservbyport, which make little sense and are not widely used, but there still are some applications which do). It should be moved under /usr.

getservbyname/getservbyport are using NSS as backend. There are NSS modules for nearly every location, not only /etc/services, NIS or LDAP, but also for /usr. There is e.g. https://github.com/openSUSE/libnss_usrfiles, which, with the /etc/nsswitch.conf option services: files usrfiles looks at first for entries in /etc/services and afterwards in /usr/etc/services. More such modules exists, so in my opinion, this task is solved, it's just in the responsibility of the Linux distributior to package the best fitting variant and configure it. openSUSE Tumbleweed/MicroOS are doing this since many years.
So this is solved for aliases, ethers, protocols, rpc and services.
/etc/shells is not handled by NSS, so solving that will be more complicated.

@fbuihuu
Copy link

fbuihuu commented Sep 20, 2023

I dare to add to the list :

  • systemd ships all its main config files in /etc/systemd or /etc/udev.

There's currently systemd/systemd#28919 to address this issue by giving the possibility to downstream to ship the config files in /usr/lib but for some reasons the idea has not been well received.

@fbuihuu

This comment was marked as outdated.

@poettering
Copy link
Collaborator

@fbuihuu systemd's config files in /etc/ are just decoration. Entirely redundant, they are pretty much just helpful hints to people who want to sue traditional populated /etc/. If you delete them for modern systems that come up without /etc/ then behaviour is not changed whatsoever.

All options listed in them just give users hints on the available settings and their defaults, and those options are fully commented, hence these files are NOPs.

@thkukuk
Copy link

thkukuk commented Sep 26, 2023

Next package list:

  • glibc:
  • mailx (/etc/mail.rc)
  • util-linux (/etc/blkid.conf)
  • fcoe-utils (/etc/fcoe/)
  • SELinux
    • policycoreutils/sestatus (/etc/sestatus.conf)
  • open-iscsi (/etc/iscsi/iscsid.conf)
  • krb5 (/etc/krb5.conf)
  • libnl (/etc/libnl/)
  • libssh (/etc/libssh/)
  • e2fsprogs (/etc/mke2fs.conf)
  • nftables (/etc/nftables/)
  • smartmontools (/etc/smartd.conf, /etc/smartd_warning.sh)
  • wpa_supplicant (/etc/wpa_supplicant/wpa_supplicant.conf)
  • attr (/etc/xattr.conf)
  • zypper (/etc/zypp/zypp.conf, /etc/zypp/zypper.conf)

@thkukuk
Copy link

thkukuk commented Sep 27, 2023

For glibc I missed yesterday:

  • nscd (/etc/nscd.conf)

This are now all packages from our minimal installation of MicroOS as ContainerHost beside openssh.
I spoke already with the openssh developers about this some time ago, they rejected all ideas to modify configuration file handling. So we (openSUSE) reconfigured the configuration file setup to mimic hermetic-usr as far as possible, open issue is AcceptEnv, which you cannot overwrite.

Question is how far do we want to go with that list? I could go as next through a typical server installation and desktop system, but I don't know if this would be really helpful, as the list is already long and it would mix up packages with different priority.

@bluca
Copy link
Member Author

bluca commented Sep 27, 2023

This are now all packages from our minimal installation of MicroOS as ContainerHost beside openssh. I spoke already with the openssh developers about this some time ago, they rejected all ideas to modify configuration file handling. So we (openSUSE) reconfigured the configuration file setup to mimic hermetic-usr as far as possible, open issue is AcceptEnv, which you cannot overwrite.

Yeah I had the same experience some years past, openssh as a project is just not interested in anything that doesn't directly benefit BSD. Should we set up a Linux-focused fork, where we can co-maintain patches?

Question is how far do we want to go with that list? I could go as next through a typical server installation and desktop system, but I don't know if this would be really helpful, as the list is already long and it would mix up packages with different priority.

I think this is a good starting point, being core packages they are the highest value to fix. Once we have made a dent in the current list, then we could start looking at a server installation.

@keszybz
Copy link
Member

keszybz commented Oct 4, 2023

nscd (/etc/nscd.conf)

nscd is on its way out: https://fedoraproject.org/wiki/Changes/RemoveNSCD.
IIRC, the intent was to also propose the same from glibc upstream if the experiment in Fedora is successful.

@ReillyBrogan
Copy link

Apparmor is another one that doesn't support any kind of vendordir at the moment.

@schubi2
Copy link

schubi2 commented Dec 4, 2023

/etc/rsyncd.conf should be solved with:
RsyncProject/rsync#551

util-linux (/etc/blkid.conf):
util-linux/util-linux#2616

@schubi2
Copy link

schubi2 commented Dec 6, 2023

I have fixed mailx (/etc/mail.rc) in SUSE OBS: https://build.opensuse.org/request/show/1131341
I would like to do it upstream too, but I do not find the code stream to which I can make a PR.
Does anyone know where mailx is hosted upstream ?
I know, it is really old code :-)

@bluca
Copy link
Member Author

bluca commented Dec 6, 2023

In Debian we ship bsd-mailx: https://tracker.debian.org/pkg/bsd-mailx which according to package metadata comes from https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/mail/

@schubi2
Copy link

schubi2 commented Dec 6, 2023

In Debian we ship bsd-mailx: https://tracker.debian.org/pkg/bsd-mailx which according to package metadata comes from https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/mail/

Thanks for hint ! I have sent a patch to [email protected] .

@poettering
Copy link
Collaborator

I filed this bug against Fedora's authselect now:

authselect/authselect#355

@schubi2
Copy link

schubi2 commented Dec 13, 2023

I have made a PR for fcoe-utils:
openSUSE/fcoe-utils#24

@schubi2
Copy link

schubi2 commented Dec 15, 2023

I have submitted a patch for selinux:
SELinuxProject/selinux#415

@Conan-Kudo
Copy link

DNF 5 supports hermetic configuration since 5.1.4.

rpm-software-management/dnf5#813
rpm-software-management/dnf5#820
rpm-software-management/dnf5#882

@DaanDeMeyer
Copy link
Member

What about ca-certificates? That one seems to be prominently missing from the list? Debian already seems to put certificates in /usr/share/ca-certificates, whereas Fedora uses /etc/pki and OpenSUSE /var/lib/ca-certificates? It'd be great if we could standardize on /usr/share/ca-certificates in some form (not familiar with the details)

@schubi2
Copy link

schubi2 commented Dec 29, 2023

I have submitted a patch for open-iscsi:
open-iscsi/open-iscsi#437

@Conan-Kudo
Copy link

What about ca-certificates? That one seems to be prominently missing from the list? Debian already seems to put certificates in /usr/share/ca-certificates, whereas Fedora uses /etc/pki and OpenSUSE /var/lib/ca-certificates? It'd be great if we could standardize on /usr/share/ca-certificates in some form (not familiar with the details)

A /usr/share/pki hierarchy as an equivalent to the one in /etc/pki would allow moving most of this stuff.

@DaanDeMeyer
Copy link
Member

Another one that seems to be missing is openssl

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

10 participants