This article shows configuration and dependent gem installation instructions for enabling Linux capabilities on Fluentd core.
Linux capabilities grant privileges to processes and executables that are otherwise reserved for the root user (UID 0). You can use these in conjunction with Fluentd plugins to enable the underlying Ruby executable read access to input sources.
Prerequisites
gcc and make etc. for building C extension sources
libcap-ng package and its development package
libcap-ng-dev on Debian GNU/Linux and Ubuntu
libcap-ng-devel on CentOS 7/8, Fedora 33, AmazonLinux 2
pkg-config package for linking libcap-ng library
Ruby and its development packages
ruby-dev on Debian GNU/Linux and Ubuntu
ruby-devel on CentOS 7/8, Fedora 33, AmazonLinux 2
Fluentd v1.12 or later
Install capability handling gem
Fluentd uses the capng_c gem to handle Linux capabilities.
Add this line to your Fluentd' or td-agent's Gemfile:
gem 'capng_c'
And then execute:
$ bundle
Or install it yourself as for Fluentd:
$ fluent-gem install capng_c
Or install it yourself as for td-agent:
$ td-agent-gem install capng_c
Note:capng_c uses pkg-config to link the libcap-ng library. If you couldn't handle Linux capability with capng_c installation, please confirm pgk-config package is installed on your box.
Capability handling on in_tail
The Fluentd core plugin in_tail handles the following Linux capabilities:
CAP_DAC_READ_SEARCH (:dac_read_search on in_tail code)
CAP_DAC_OVERRIDE (:dac_override on in_tail code)
Set up cap_dac_read_search or cap_dac_override to use the Ruby executable:
Actual Example for Linux capability handling in in_tail
When adding cap_dac_override (partial privileges for rw file) and cap_dac_read_search (partial privileges for read only), Fluentd/td-agent can handle to read 640 permission files such as /var/log/syslog:
$ ls -lh /var/log/syslog
-rw-r----- 1 syslog adm 29K Nov 5 14:35 /var/log/syslog
Fluentd, which is running by a non-root user, does not complain with Permission denied. Users can retrieve root files' contents on a non-root process, yay!