Извините, эта запись доступна только на English
Архивы по Категориям: twitter
(English) MongoDB-specific widgets for Django admin app
Как установить SAMS2 и Squid на Ubuntu 12.04 LTS с авторизацией через AD
В качестве базы данных будем использовать MySQL. В качестве веб-сервера nginx + php5-fpm.
- Устанавливаем все необходимые для нас пакеты: 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
- Получаем исходники SAMS2: wget https://github.com/PavelVinogradov/sams2/archive/master.zip
Распаковываем: unzip master.zip - Собираем скрипт конфигурации: make -f Makefile.cvs
- ./configure
По окончании работы скрипта вы должны увидеть следующее сообщение:Use MySQL API: yes
Use PostgreSQL API: no
Use unixODBC API: no
Use LDAP API: yes
Using pcre: pcre
Use dynamic plugin: yes - Файл 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"
- Если у вас 64-битная система, то файл src/proxy.h нуждается в исправлении, иначе sams2daemon будет падать с ошибкой сегментирования после «mysqlquery.cpp:437 [0x1c1f910->fetch] ok». Для этого открываем src/proxy.h и дописываем ко всем enum тип long следующим образом:
1 2 3 4
enum ParserType: long { ... };
(спасибо за этот метод решения проблемы с 64 битами Владимиру)
- Собираем SAMS2: make
- Устанавлиаваем: sudo make install
- Меняем владельца директории sams2 на www-data: sudo chown www-data:www-data -R /usr/local/share/sams2/
- Конфигурируем 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; } }
- Заходим на http://localhost/setup.php там всё делаем по инструкции
- Записываем в файл /usr/local/etc/sams2.conf параметры подключения к базе данных:
имя пользователя для подключения к базе данных
DB_USER=username
пароль
DB_PASSWORD=userpassword
Также в этом файле нужно поменять пути к squid:
SQUIDROOTDIR=/etc/squid3
SQUIDLOGDIR=/var/log/squid3 - Делаем symlink (иначе sams не будет работать): sudo ln -s /usr/sbin/squid3 /usr/sbin/squid
- Копируем из папки с исходниками скрипт для init.d: sudo cp debian/init.d /etc/init.d/sams2daemon
- Даём права на исполнение: sudo chmod a+x /etc/init.d/sams2daemon
- Редактируем скрипт /etc/init.d/sams2daemon
Нужно прописать правильный путь к конфигу sams:
SAMSPATH=`cat /usr/local/etc/sams2.conf | grep SAMSPATH | tr «SAMSPATH=» «\0″`А также включить его:
SAMS_ENABLE=true - Запускаем: sudo /etc/init.d/sams2daemon start
- Проверяем, что запустился:$ ps aux | grep sams
root 5334 0.0 0.2 22908 2520 pts/0 S 14:27 0:00 sams2daemonЕсли такого процесса нет, значит что-то пошло не так. Ошибки ищите в syslog.
- Заходим в админку sams (http://localhost/), стандартные логин и пароль admin и qwerty. Там всё настраиваем по вкусу, настройки достаточно простые, описывать их здесь не буду.
- Теперь нужно подключить к сквиду ntlm и kerberos. Это можно сделать по инструкции с сайта сквида: http://wiki.squid-cache.org/ConfigExamples/Authenticate/WindowsActiveDirectory
Единственное — пункт Kerberos лучше делать иначе, потому что с msktutil лично у меня ничего не получилось: - Вместо того, чтобы мучиться с msktutil делаем всё то же самое из-под Windows на доменном контроллере.
- создаём учётную запись компьютера в AD (например proxyserver)
- запускаем терминал с правами администратора
- setspn -A HTTP/squidproxy.example.local EXAMPLE\proxyserver
-
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
- Копируем PROXY.keytab на сервер прокси в директорию /etc/squid3/
Всё, squid и sams должны работать и прозрачно аутентифицировать пользователей через AD.
Проксирование POP/IMAP через NGINX c помощью Django
Одной из не так часто используемых возможностей nginx является возможность проксировать POP/IMAP. Когда это может быть полезно? Ну например для распределения нагрузки в высоконагруженной почтовой службе. Второй вариант — для прозрачной для пользователей переадресации на стороннюю почтовую службу.
Передо мной стояла следующая задача: в компании было принято решение использовать вместо своих серверов в качестве почтовой службы Яндекс.Почту для Домена. В основном решение было продиктовано огромным потоком спама, с которым не справлялся SpamAssassin, да и с самим объёмом почты сервер справлялся не без труда (на нём было множество других служб). При этом требовалось перенести почту без изменения паролей пользователей. Пароли, естественно, хранились в виде хэшей, поэтому автоматически установить пользователям на Яндексе такие же пароли было невозможно.
Поэтому я принял решение оставить авторизацию пользователей на своих серверах. Как раз с помощью nginx. А для упрощения администрирования этой системы, я написал два Django-приложения: одно для управления пользователями и авторизацией в nginx, а второе для синхронизации первого приложения с Яндекс.Почтой для домена. Читать далее »
(English) Using metaclasses in Python
Извините, эта запись доступна только на English
Свежие комментарии