Назад | Перейти на главную страницу

Squid3 пытается добавить пользовательский external_acl_type

Я пытаюсь создать внешний помощник acl для squid3, чтобы (надеюсь) сократить некоторые строки конфигурации с моего сервера squid3, и я написал для него простой скрипт python:

#!/usr/bin/python

import sys
import logging
import time


logger = logging.getLogger( 'squid_auth' )
logger.setLevel( logging.DEBUG )
fh = logging.FileHandler( 'spam.log' )
fh.setLevel( logging.DEBUG )
formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' )
fh.setFormatter( formatter )
logger.addHandler( fh )


def grant ():
      sys.stdout.write( 'OK\n' )
      sys.stdout.flush()


def deny ():
      sys.stdout.write( 'ERR\n' )
      sys.stdout.flush()


while True:
      line = sys.stdin.readline().strip()
      if line:
              logger.info( line )
              grant()
      else:
              time.sleep( 1 )

и добавил его в свой squid.conf:

external_acl_type custom_acl %SRC %LOGIN %DST /etc/changemyip/squid/config/acl.py
acl CustomAcl external custom_acl
http_access allow CustomAcl

Путь к скрипту правильный (я могу выполнить его в оболочке), программа имеет права на выполнение и все остальное, но, когда я перезагружаю squid, я получаю эту ошибку примерно 5-6 раз, а затем вылетает squid:

Aug 17 14:08:52 server7 (squid): The custom_acl helpers are crashing too rapidly, need help!
Aug 17 14:08:52 server7 squid[28233]: Squid Parent: child process 28290 exited with status 1
Aug 17 14:08:52 server7 squid[28233]: Exiting due to repeated, frequent failures

Как видите, скрипт просто печатает OK\n в стандартный вывод, чтобы предоставить всем. Я даже не начал реализовывать в нем какую-либо логику.

Протестировано с версией squid: 3.1.19

У меня была похожая проблема. Мне удалось это исправить, изменив владельца скрипта на пользователя squid и переместив файл из моего домашнего каталога в корневую файловую систему.

У меня все еще была та же проблема, даже после того, как я следовал полезным указаниям @tyrells.

Исправление?

Нам нужно сделать скрипт python исполняемым, выполнив команду ниже.

sudo chmod u+x /path/to/external-acl.py

Итак, чтобы резюмировать вот пошаговые инструкции.

  1. Переместите ваш скрипт куда-нибудь в корневую файловую систему. Для меня это было /usr/share/acl.py
  2. Исправьте разрешения. sudo chown proxy:proxy /usr/share/acl.py
  3. Сделайте скрипт исполняемым. sudo chmod u+x /usr/share/acl.py
  4. Перезапускаем squid. sudo service squid restart