Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: NixOS/nixpkgs
base: 7cbb09a2ecc8
Choose a base ref
...
head repository: NixOS/nixpkgs
compare: 5feba458a260
Choose a head ref
  • 9 commits
  • 5 files changed
  • 2 contributors

Commits on Dec 12, 2018

  1. Copy the full SHA
    eb88005 View commit details
    Browse the repository at this point in the history
  2. nixos/nscd: Disable caching of group and passwd

    Systemd provides an option for allocating DynamicUsers
    which we want to use in NixOS to harden service configuration.
    However, we discovered that the user wasn't allocated properly
    for services. After some digging this turned out to be, of course,
    a cache inconsistency problem.
    
    When a DynamicUser creation is performed, Systemd check beforehand
    whether the requested user already exists statically. If it does,
    it bails out. If it doesn't, systemd continues with allocating the
    user.
    
    However, by checking whether the user exists,  nscd will store
    the fact that the user does not exist in it's negative cache.
    When the service tries to lookup what user is associated to its
    uid (By calling whoami, for example), it will try to consult
    libnss_systemd.so However this will read from the cache and tell
    report that the user doesn't exist, and thus will return that
    there is no user associated with the uid. It will continue
    to do so for the cache duration time.  If the service
    doesn't immediately looks up its username, this bug is not
    triggered, as the cache will be invalidated around this time.
    However, if the service is quick enough, it might end up
    in a situation where it's incorrectly reported that the
    user doesn't exist.
    
    Preferably, we would not be using nscd at all. But we need to
    use it because glibc reads  nss modules from /etc/nsswitch.conf
    by looking relative to the global LD_LIBRARY_PATH.  Because LD_LIBRARY_PATH
    is not set globally (as that would lead to impurities and ABI issues),
    glibc will fail to find any nss modules.
    Instead, as a hack, we start up nscd with LD_LIBRARY_PATH set
    for only that service. Glibc will forward all nss syscalls to
    nscd, which will then respect the LD_LIBRARY_PATH and only
    read from locations specified in the NixOS config.
    we can load nss modules in a pure fashion.
    
    However, I think by accident, we just copied over the default
    settings of nscd, which actually caches user and group lookups.
    We already disable this when sssd is enabled, as this interferes
    with the correct working of libnss_sss.so as it already
    does its own caching of LDAP requests.
    (See https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/usingnscd-sssd)
    
    Because nscd caching is now also interferring with libnss_systemd.so
    and probably also with other nsss modules, lets just pre-emptively
    disable caching for now for all options related to users and groups,
    but keep it for caching hosts ans services lookups.
    
    Note that we can not just put in /etc/nscd.conf:
    enable-cache passwd no
    
    As this will actually cause glibc to _not_ forward the call to nscd
    at all, and thus never reach the nss modules. Instead we set
    the negative and positive cache ttls  to 0 seconds as a workaround.
    This way, Glibc will always forward requests to nscd, but results
    will never be cached.
    
    Fixes #50273
    arianvp committed Dec 12, 2018
    Copy the full SHA
    e712417 View commit details
    Browse the repository at this point in the history
  3. nixos/nscd: Disable negative caching of hosts

    Hopefully fixes #50290
    arianvp committed Dec 12, 2018
    Copy the full SHA
    99d3279 View commit details
    Browse the repository at this point in the history
  4. Copy the full SHA
    335b41b View commit details
    Browse the repository at this point in the history
  5. Copy the full SHA
    de76c16 View commit details
    Browse the repository at this point in the history
  6. nixos/nscd: also add netgroup to the config

    It was the last database that wasn't listed.
    arianvp committed Dec 12, 2018
    Copy the full SHA
    a74619c View commit details
    Browse the repository at this point in the history
  7. Copy the full SHA
    ef6ed03 View commit details
    Browse the repository at this point in the history
  8. Copy the full SHA
    1d5f4cb View commit details
    Browse the repository at this point in the history
  9. Merge pull request #50316 from arianvp/fix-dynamic-user

    Disable nscd caching
    Mic92 committed Dec 12, 2018
    Copy the full SHA
    5feba45 View commit details
    Browse the repository at this point in the history