0

I need to know if all distributions of Linux have sysctl.conf be under /etc/sysctl.conf

I was told that Arch Linux does not. Can configurations set under the aforementioned path be overridden by another file in some distros?

2 Answers2

0

Not always. RHEL8 has a dummy file quoting the man page of sysctl.d.

man sysctl.d can read quite a few places.

NAME
       sysctl.d - Configure kernel parameters at boot

SYNOPSIS
       /etc/sysctl.d/*.conf

       /run/sysctl.d/*.conf

       /usr/lib/sysctl.d/*.conf

A run of sysctl --system on a RHEL8 from the box evaluates files in this order:

sysctl --system
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
* Applying /usr/lib/sysctl.d/50-coredump.conf ...
* Applying /usr/lib/sysctl.d/50-default.conf ...
* Applying /usr/lib/sysctl.d/50-libkcapi-optmem_max.conf ...
* Applying /etc/sysctl.d/50-libreswan.conf ...
* Applying /usr/lib/sysctl.d/50-pid-max.conf ...
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.conf ...
bobah
  • 18,364
  • 2
  • 37
  • 70
  • Thank you. Yes, so I've found that it can be under these paths: /etc/sysctl.d/*.conf /run/sysctl.d/*.conf /usr/local/lib/sysctl.d/*.conf /usr/lib/sysctl.d/*.conf /lib/sysctl.d/*.conf /etc/sysctl.conf But I cannot confirm which takes precedence over the other. Do you know if /etc/sysctl.conf would overwrite other files, if present? – jengelbells Oct 08 '20 at 14:08
  • If you run (beware it's not a dry-run command) `sysctl --system` it will load stuff and tell in which order, I've updated the answer with sample run on one of my servers. – bobah Oct 08 '20 at 14:11
0

From man sysctl.conf:

       /etc/sysctl.d/*.conf
       /run/sysctl.d/*.conf
       /usr/local/lib/sysctl.d/*.conf
       /usr/lib/sysctl.d/*.conf
       /lib/sysctl.d/*.conf
       /etc/sysctl.conf

       The paths where sysctl preload files usually exist.  See also sysctl
       option --system.

From man sysctl:

   --system
          Load settings from all system configuration files. Files are
          read from directories in the following list in given order
          from top to bottom.  Once a file of a given filename is
          loaded, any file of the same name in subsequent directories is
          ignored.
          /etc/sysctl.d/*.conf
          /run/sysctl.d/*.conf
          /usr/local/lib/sysctl.d/*.conf
          /usr/lib/sysctl.d/*.conf
          /lib/sysctl.d/*.conf
          /etc/sysctl.conf

On modern systems sysctl configuration is loaded on startup with systemd-sysctl.service. From man systemd-sysctl:

   systemd-sysctl.service is an early boot service that configures sysctl(8) kernel parameters by invoking
   /usr/lib/systemd/systemd-sysctl.

   When invoked with no arguments, /usr/lib/systemd/systemd-sysctl applies all directives from configuration files listed in
   sysctl.d(5).

From what I understand the files are loaded from top to bottom, so configurations stored in /etc/sysctl.conf might overwrite configurations set earlier.

Pro tip: /usr/lib/systemd/systemd-sysctl --cat-config

Any distribution and vendor and package managers and others who have distribute files may store configurations in any of those directories. Packages will store config in /usr/lib/sysctl.d/*.conf. Typically the /etc/sysctl.conf and /etc/sysctl.d/*.conf are left solely for manual administrator work.

KamilCuk
  • 120,984
  • 8
  • 59
  • 111