Ежемесячные архивы: June 2012

(English) MongoDB-specific widgets for Django admin app

Извините, эта запись доступна только на English

Как установить SAMS2 и Squid на Ubuntu 12.04 LTS с авторизацией через AD

В качестве базы данных будем использовать MySQL. В качестве веб-сервера nginx + php5-fpm.

  1. Устанавливаем все необходимые для нас пакеты: sudo apt-get install build-essential squid3 nginx php5-fpm libpcre3-dev libpcre3 libpcre++-dev libpcre++0 libpcrecpp0 mysql-server libmysqlclient-dev php5-ldap libfpdf-tpl-php libfpdi-php autoconf automake libtool doxygen libldap2-dev php5-gd php5-mysql krb5-user libkrb5-3 ldap-utils samba winbind samba-common-bin
  2. Получаем исходники SAMS2: wget https://github.com/PavelVinogradov/sams2/archive/master.zip
    Распаковываем: unzip master.zip
  3. Собираем скрипт конфигурации: make -f Makefile.cvs
  4. ./configure
    По окончании работы скрипта вы должны увидеть следующее сообщение:Use MySQL API: yes
    Use PostgreSQL API: no
    Use unixODBC API: no
    Use LDAP API: yes
    Using pcre: pcre
    Use dynamic plugin: yes
  5. Файл libtool, который генерирует скрипт, нуждается в патче. Набираем «patch -l» и вставляем следующий текст. В конце нужно два раза нажать Ctrl-D, чтобы он понял, что это конец файла.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    --- libtool.old 2012-02-14 17:34:10.363994833 +0400
    +++ libtool     2012-02-14 15:55:27.142358890 +0400
    @@ -5986,7 +5986,8 @@
            case $dir in
            [\\/]* | [A-Za-z]:[\\/]*) ;;
            *)
    -         absdir=`cd "$dir" && pwd`
    +#        absdir=`cd "$dir" && pwd`
    +         absdir="/usr/lib"
              test -z "$absdir" && \
                func_fatal_error "cannot determine absolute directory name of \`$dir'"
              dir="$absdir"
  6. Если у вас 64-битная система, то файл src/proxy.h нуждается в исправлении, иначе sams2daemon будет падать с ошибкой сегментирования после «mysqlquery.cpp:437 [0x1c1f910->fetch] ok». Для этого открываем src/proxy.h и дописываем ко всем enum тип long следующим образом:
    1
    2
    3
    4
    
    enum ParserType: long
    {
    ...
    };

    (спасибо за этот метод решения проблемы с 64 битами Владимиру)

  7. Собираем SAMS2: make
  8. Устанавлиаваем: sudo make install
  9. Меняем владельца директории sams2 на www-data: sudo chown www-data:www-data -R /usr/local/share/sams2/
  10. Конфигурируем nginx следующим образом:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    server {
            listen   80;
     
     location / {
            root /usr/local/share/sams2;
            index index.php;
            if (!-e $request_filename) {
                rewrite ^(.*)$ /index.php?q=$1 last;
                break;
            }
        }
     
        error_page 404 /index.php;
     
        location ~ .php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
     
            fastcgi_param SCRIPT_FILENAME /usr/local/share/sams2/$fastcgi_script_name;
            fastcgi_param QUERY_STRING $query_string;
            fastcgi_param REQUEST_METHOD $request_method;
            fastcgi_param CONTENT_TYPE $content_type;
            fastcgi_param CONTENT_LENGTH $content_length;
        }
     
    }
  11. Заходим на http://localhost/setup.php там всё делаем по инструкции
  12. Записываем в файл /usr/local/etc/sams2.conf параметры подключения к базе данных:
    имя пользователя для подключения к базе данных
    DB_USER=username
    пароль
    DB_PASSWORD=userpassword
    Также в этом файле нужно поменять пути к squid:
    SQUIDROOTDIR=/etc/squid3
    SQUIDLOGDIR=/var/log/squid3
  13. Делаем symlink (иначе sams не будет работать): sudo ln -s /usr/sbin/squid3 /usr/sbin/squid
  14. Копируем из папки с исходниками скрипт для init.d: sudo cp debian/init.d /etc/init.d/sams2daemon
  15. Даём права на исполнение: sudo chmod a+x /etc/init.d/sams2daemon
  16. Редактируем скрипт /etc/init.d/sams2daemon
    Нужно прописать правильный путь к конфигу sams:
    SAMSPATH=`cat /usr/local/etc/sams2.conf | grep SAMSPATH | tr «SAMSPATH=» «\0″`

    А также включить его:
    SAMS_ENABLE=true

  17. Запускаем: sudo /etc/init.d/sams2daemon start
  18. Проверяем, что запустился:$ ps aux | grep sams
    root 5334 0.0 0.2 22908 2520 pts/0 S 14:27 0:00 sams2daemon

    Если такого процесса нет, значит что-то пошло не так. Ошибки ищите в syslog.

  19. Заходим в админку sams (http://localhost/), стандартные логин и пароль admin и qwerty. Там всё настраиваем по вкусу, настройки достаточно простые, описывать их здесь не буду.
  20. Теперь нужно подключить к сквиду ntlm и kerberos. Это можно сделать по инструкции с сайта сквида: http://wiki.squid-cache.org/ConfigExamples/Authenticate/WindowsActiveDirectory
    Единственное — пункт Kerberos лучше делать иначе, потому что с msktutil лично у меня ничего не получилось:
  21. Вместо того, чтобы мучиться с msktutil делаем всё то же самое из-под Windows на доменном контроллере.
    1. создаём учётную запись компьютера в AD (например proxyserver)
    2. запускаем терминал с правами администратора
    3. setspn -A HTTP/squidproxy.example.local EXAMPLE\proxyserver
    4. 1
      2
      3
      4
      5
      6
      7
      
      ktpass -out c:\PROXY.keytab
      -princ HTTP/squidproxy.example.local@EXAMPLE.LOCAL
      -mapUser EXAMPLE\proxyserver
      -mapOp set
      -pass was1edu
      -crypto RC4-HMAC-NT
      -pType KRB5_NT_PRINCIPAL
    5. Копируем PROXY.keytab на сервер прокси в директорию /etc/squid3/

Всё, squid и sams должны работать и прозрачно аутентифицировать пользователей через AD.