代码之家  ›  专栏  ›  技术社区  ›  twisted

将apache2 CustomLog管道传输到以其他用户身份运行的程序

  •  0
  • twisted  · 技术社区  · 2 年前

    我有一个程序a2log2pg,它接受apache2自定义日志并将其写入数据库。

    在apache2。conf,我有一行代码定义了一个CustomLog并将其通过管道传输到a2log2pg。

    CustomLog "|/usr/bin/a2log2pg" combined
    

    其中combined是apache日志格式之一。

    尽管一切都很好,但这种技术会导致a2log2pg以root身份运行。我宁愿以非特权用户的身份运行它,特别是一个名为a2logger的用户。

    为此,我一直在尝试使用这句话:

    CustomLog "| sudo -u a2logger /usr/bin/a2log2pg" combined
    

    但apache随后拒绝启动。apache日志中的错误为:

    No such file or directory: AH00104: unable to start piped log program ' sudo -u a2logger /usr/bin/a2log2pg'
    

    是否有其他语法允许此操作?

    暂时把apache放在一边,如果我尝试类似的东西,但仅使用shell脚本,它就可以工作:

    $ cat 1234.txt
    one
    two
    three
    four
    
    $ cat countlines.sh
    #!/bin/bash
    counter=0
    while read line
    do
      ((++counter))
    done<&0
    echo $USER counted $counter lines
    

    然后,以root身份登录

    # cat 1234.txt | sudo -u a2logger ./countlines.sh
    a2logger counted 4 lines
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Erwin    2 年前

    您需要在那里提供绝对路径并避免前导空格,如下所示:

    CustomLog "|/usr/bin/sudo -u a2logger /usr/bin/a2log2pg" combined