1

我正在尝试在 CentOS 7 环境中获取 filebeat(用于 logstash 转发)以在我创建的用户帐户下运行:filebeat 而不是 root。我尝试将/etc/rc.d/init.d/filebeat文件编辑为以下内容,但无济于事。我可能做错了什么,但对 BASH 脚本仍然有点陌生,我可能把它放在错误的地方?我尝试遵循此处建议的实施说明

为简洁起见,我只显示上述文件的第一部分,因为后面部分没有改变:

#!/bin/bash
#
# filebeat          filebeat shipper
#
# chkconfig: 2345 98 02
#

### BEGIN INIT INFO
# Provides:          filebeat
# Required-Start:    $local_fs $network $syslog
# Required-Stop:     $local_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Sends log files to Logstash or directly to Elasticsearch.
# Description:       filebeat is a shipper part of the Elastic Beats
#                                        family. Please see: https://www.elastic.co/products/beats
### END INIT INFO



PATH=/usr/bin:/sbin:/bin:/usr/sbin
export PATH

[ -f /etc/sysconfig/filebeat ] && . /etc/sysconfig/filebeat
pidfile=${PIDFILE-/var/run/filebeat.pid}
agent=${PB_AGENT-/usr/bin/filebeat}
args="-c /etc/filebeat/filebeat.yml"
test_args="-e -configtest"
wrapper="filebeat-god"
wrapperopts="-r / -n -p $pidfile"
RETVAL=0
service_user="filebeat"
# Source function library.
. /etc/rc.d/init.d/functions

# Determine if we can use the -p option to daemon, killproc, and status.
# RHEL < 5 can't.
if status | grep -q -- '-p' 2>/dev/null; then
    daemonopts="--user $service_user --group $service_group --pidfile $pidfile"
    **chown -R $service_user /etc/filebeat || return 1
    chown $service_user $pidfile || return 1
    chmod g+w $pidfile || return 1**
    pidopts="-p $pidfile"
    touch
fi

以前,我使用类似于以下内容创建了一个用户帐户 filebeat:

useradd filebeat -u 5044 -c "Filebeat Service Account" -d /dev/null -s /sbin/nologin

但是,当我在启动后尝试查看该过程时,它仍然显示为由 root 拥有:

[root@testvm ~]# ps -aef | grep filebeat
root     26030     1  0 13:16 ?        00:00:00 /usr/bin/filebeat -c /etc/filebeat/filebeat.yml
4

1 回答 1

2

在 RHEL/CentOS 7 上,systemd 管理服务,因此不使用 init.d 文件。您应该修改 Filebeat 的单元文件,以便以不同的用户身份运行服务。单元文件安装在/lib/systemd/system/filebeat.service.

您需要向该部分添加一个User选项Service

[Service]
User=<username>

用户必须对日志文件具有读取权限,并且必须对包含日志文件的目录具有搜索权限(执行位)。Filebeat用来stat收集文件的inode,stat根据man page需要目录的执行权限。

于 2016-08-16T13:29:44.343 回答