Ранее мы
установили
Python 2.4 на Debian 7 amd64; потом поставили
Zope 2.10.7 и сам Naudoc 6. Вместе с сопутствующими
библиотеками.
Теперь подключим
расширения, типа MySQL и LDAP; поставим
фронтэнд Apache httpd.
Лично я выбрал
бы Nginx
с пробросом через VirtualHostMonster Zope, но в
данном случае заказчик захотел сделать
«по букварю».
Но,
предварительно, разберемся с logrotate для
Zope/Naudoc
Из коробки, ни
Наудок, ни Zope не настроены на ротацию
логов, которые, для нашего конфига,
растут в /opt/naudoc/log/
Настройка
ротации логов
su -l nano /etc/logrotate.d/zope /opt/naudoc/log/*.log { # daily weekly missingok rotate 5 compress delaycompress notifempty sharedscripts postrotate [ -f /opt/naudoc/var/Z2.pid ] && kill -USR2 `cat /opt/naudoc/var/Z2.pid` endscript }
Поехали.
Для работы
интегрированного решения, необходимо
установить модуль расширения языка
python — mysql-python. Хотя, по словам авторов
Наудок, нужды использовать БД MySQL нету.
Но модуль мы на всякий случай поставим.
Начнем с
установки easy_install для нашего Python 2.4
su -l wget https://bitbucket.org/pypa/setuptools/raw/bootstrap-py24/ez_setup.py /opt/python24/bin/python ez_setup.py
aptitude install mysql-client libmysqlclient-dev /opt/python24/bin/easy_install mysql-python
Настройка
взаимодействия NauDoc с LDAP-сервером требует
модуль
python-ldap
su -l aptitude install libldap-dev openldap-utils slapd aptitude install libsasl2-dev libsasl2-modules /opt/python24/bin/easy_install pyasn1 /opt/python24/bin/easy_install pyasn1_modules wget https://pypi.python.org/packages/source/p/python-ldap/python-ldap-2.4.18.tar.gz#md5=9bee878cc3582d7184b0a48083446efb tar xvzf python-ldap-2.4.18.tar.gz cd python-ldap-2.4.18
Компилять
сразу бесполезно, сначала надо поправить
конфиг с учетом того, что библиотеки
теперь находятся чуть-чуть не там где
раньше
find / -iname "*ldap*.h" /usr/include/ldap.h find / -iname "*ldap*.a" /usr/lib/x86_64-linux-gnu/libldap.a
nano setup.cfg
diff -u setup.cfg.orig setup.cfg --- setup.cfg.orig 2014-11-27 00:32:55.989686001 +0300 +++ setup.cfg 2014-11-27 00:36:11.937686000 +0300 @@ -1,10 +1,10 @@ [_ldap] -library_dirs = /opt/openldap/lib64 /usr/lib +library_dirs = /opt/openldap/lib64 /usr/lib /usr/lib/x86_64-linux-gnu include_dirs = /opt/openldap/include /usr/include/sasl /usr/include defines = HAVE_SASL HAVE_TLS HAVE_LIBLDAP_R extra_compile_args = extra_objects = -libs = ldap_r +libs = ldap_r lber sasl2 ssl crypto [install] compile = 1
Вот теперь
можно компилять
/opt/python24/bin/python setup.py clean --all /opt/python24/bin/python setup.py build /opt/python24/bin/python setup.py install
Перезапуск
Zope/NauDoc
service zope2.10 stop; service zope2.10 start
После того как
сервер будет запущен, зайдите в NauDoc по
стандартной ссылке:
http://localhost:8080/docs
и следуйте инструкциям мастера первого
запуска, там все несложно.
Для активации
модулей NauDoc Pro необходимо зайти в систему
под учетной записью администратора,
затем перейти на вкладку «Сервис», пункт
меню «Модули расширения». Там будет
много галочек.
Чтобы активировать
модуль расширения "Внешнее хранение
файлов", недостаточно только поставить
галочку. Надо еще включить опцию в
конфигурации в исходном коде
nano /opt/naudoc/Products/CMFNauTools/Config.py EnableFSStorage = 1
Перезапустить
service zope2.10 stop; service zope2.10 start
Открыть корневую
страницу системы http://localhost:8080/docs
и следовать
указаниям мастера. По завершении
проверка
наличия файлов во внешней папке
find /opt/naudoc/var/docs/
Настройка
работы NauDoc через Apache
Установка
веб-сервера Apache httpd и направление трафика
сайта через него.
Открыт доступ
только через HTTPS и только к системе
документооборота. Доступ к Zope возможен
только через создание SSH туннеля.
Доступ к сайту
будет регулироваться через проверку
крипто ключей.
Для Apache нужен
модуль mod_fastcgi, согласно ванильной
кофигурации.
Для его установки
надо пополнить список доступных
репозиториев пакетов
su -l nano /etc/apt/sources.list deb http://cdn.debian.net/debian/ wheezy main contrib non-free deb-src http://cdn.debian.net/debian/ wheezy main contrib non-free deb http://security.debian.org/ wheezy/updates main contrib non-free deb-src http://security.debian.org/ wheezy/updates main contrib non-free deb http://cdn.debian.net/debian/ wheezy-updates main contrib non-free deb-src http://cdn.debian.net/debian/ wheezy-updates main contrib non-free
aptitude update aptitude install apache2-mpm-itk apache2 openssl libapache2-mod-fcgid aptitude install libapache2-mod-fastcgi
Создание и
настройка сайта Apache httpd
a2dissite default cp /etc/apache2/sites-available/default-ssl /etc/apache2/sites-available/naudoc-ssl.conf a2ensite naudoc-ssl.conf a2enmod ssl a2enmod fastcgi a2enmod rewrite
Сертификат
сайта
mkdir -p /etc/ssl/localcerts openssl req -newkey rsa:2048 -x509 -days 3650 -nodes -out /etc/ssl/localcerts/apache.pem -keyout /etc/ssl/localcerts/apache.key -subj "/C=RU/ST=Moscow/L=Moscow/O=Mycompany/OU=Mycompany DMS/CN=mydomain.net" chmod 600 /etc/ssl/localcerts/apache*
Конфиги
nano /etc/apache2/sites-available/naudoc-ssl.conf ServerName mydomain.net <IfModule mod_ssl.c> NameVirtualHost *:443 <VirtualHost *:443> ServerAdmin webmaster@localhost ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined SSLEngine on SSLCertificateFile /etc/ssl/localcerts/apache.pem SSLCertificateKeyFile /etc/ssl/localcerts/apache.key DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> <Directory "/var/www/naudoc"> Order allow,deny Allow from all Options FollowSymLinks Includes ExecCGI AllowOverride All SetHandler fastcgi-script </Directory> FastCgiExternalServer /var/www/naudoc -socket /var/run/zope.soc -idle-timeout 600 -pass-header Authorization RewriteEngine on RewriteRule !^/dms/(.*) /dms/ [R] RewriteRule ^/dms/docs/(.*) /var/www/naudoc/docs/$1 RewriteRule ^/dms/(.*) /var/www/naudoc/docs/$1 <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule>
nano /etc/apache2/ports.conf <IfModule mod_ssl.c> Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule>
nano /opt/naudoc/etc/zope.conf #… модифицированные строки, весь файл слишком велик для полного цитирования <fast-cgi> address /var/run/zope.soc </fast-cgi> #...
Перезапуск
service zope2.10 stop; service zope2.10 start service apache2 stop; service apache2 start
Диагностика
веб-служб
netstat -ltupn curl -k https://localhost/ openssl s_client -connect mydomain.net:443 -state -debug apache2 -v Server version: Apache/2.2.22 (Debian) Server built: Jul 24 2014 15:34:03
В общем, теперь
оно должно работать. Можно на этом и
остановиться.
Но нам надо
больше!
А теперь
закрутим гайки
Для повышения
уровня защищенности системы веб-сервер
должен быть настроен так, чтобы
пользователи не обладающие правильными
сертификатами блокировались. К системе
доступ получают только те, у кого в
браузер установлен правильный сертификат.
Правильный
сертификат, это криптографический ключ,
выданный и подписанный системным CA.
Настройка
проводится в три шага:
1 Создать
собственный доверенный сертификат
(Certificate Authority), для того чтобы с помощью
него подписывать и проверять клиентские
сертификаты.
2 Создать
клиентские сертификаты, подписанные
доверенным сертификатом, для последующей
передачи их клиентам.
3 Сконфигурировать
веб-сервер для запроса и проверки
клиентских сертификатов.
Команды,
создающие
самоподписанный
ключ CA
su -l mkdir -p ~/CA && cd $_ openssl req -new -sha256 -newkey rsa:4096 -nodes -keyout ca.key -x509 -days 3650 \ -subj "/C=RU/ST=Moscow/L=Moscow/O=Portal/OU=DMS/CN=Portal CA/emailAddress=naudoc@dms.ru" \ -out ca.crt # посмотреть данные ключа и сертификата openssl rsa -noout -text -in ca.key|less openssl x509 -noout -text -in ca.crt|less
Создайте
конфигурационный файл с именем ca.config
следующего содержания
nano ca.config [ ca ] default_ca = CA_CLIENT # При подписи сертификатов # использовать секцию CA_CLIENT [ CA_CLIENT ] dir = ./db # Каталог для служебных файлов certs = $dir/certs # Каталог для сертификатов new_certs_dir = $dir/newcerts # Каталог для новых сертификатов database = $dir/index.txt # Файл с базой данных # подписанных сертификатов serial = $dir/serial # Файл содержащий серийный номер # сертификата (в шестнадцатиричном формате) certificate = ./ca.crt # Файл сертификата CA private_key = ./ca.key # Файл закрытого ключа CA default_days = 365 # Срок действия подписываемого # сертификата default_crl_days = 365 # Срок действия CRL (см. $4) default_md = sha256 # Алгоритм подписи policy = policy_anything # Название секции с описанием # политики в отношении данных сертификата [ policy_anything ] countryName = optional # Код страны - не обязателен stateOrProvinceName = optional # ...... localityName = optional # ...... organizationName = optional # ...... organizationalUnitName = optional # ...... emailAddress = optional # ...... commonName = supplied # ...... - обязателен
Создайте
структуру каталогов и файлов, соответсвующую
описанной в конфигурационном файле
mkdir db mkdir db/certs mkdir db/newcerts touch db/index.txt echo "01" > db/serial
Создание
клиентского закрытого ключа и запроса
на сертификат (CSR)
Для создания
подписанного клиентского сертификата
предварительно необходимо создать
запрос на сертификат, для его последующей
подписи
Ключ и сертификат
для веб-сервера (Apache)
openssl req -new -sha256 -newkey rsa:4096 -nodes -keyout apache.key -days 3650\ -subj "/C=RU/ST=Moscow/L=Moscow/O=Portal/OU=DMS/CN=mydomain.net" \ -out apache.csr # посмотреть данные ключа и запроса openssl rsa -noout -text -in apache.key|less openssl req -noout -text -in apache.csr|less
Подпись запроса
на сертификат (CSR) с помощью доверенного
сертификата (CA). При подписи запроса
используются параметры заданные в файле
ca.config
openssl ca -config ca.config -in apache.csr -out apache.crt -batch -days 3650 cp ./db/newcerts/01.pem ./apache.pem # посмотреть данные сертификата openssl x509 -noout -text -in apache.crt|less # отозвать сертификат openssl ca -config ca.config -revoke apache.pem # or openssl ca -config ca.config -revoke apache.crt
Подготовка
данных для передачи клиенту (это уже не
про Apache).
Для передачи
полученных в результате предыдущих
операций файлов клиенту, обычно
используется файл в формате
PKCS#12
Пример:
openssl pkcs12 -export -in apache.crt -inkey apache.key \ -certfile ca.crt -out apache.p12 -passout pass:secret
Еще один пример,
создание
сертификата для клиента
vasnake@gmail.com
su -l pushd ~/CA openssl req -new -sha256 -newkey rsa:4096 -nodes -keyout valik.key -days 3650\ -subj "/C=RU/ST=Moscow/L=Moscow/O=Portal/OU=DMS/CN=vasnake@gmail.com/emailAddress=vasnake@gmail.com" \ -out valik.csr openssl ca -config ca.config -in valik.csr -out valik.crt -batch -days 3650 openssl pkcs12 -export -in valik.crt -inkey valik.key \ -certfile ca.crt -out valik.p12 -passout pass:secret chmod -R 600 ../CA echo "cert in attachment" | mutt -a "valik.p12" -s "portal keys" -- vasnake@gmail.com
Создание
списка отзыва (CRL)
Список отзыва
нужен для блокирования вышедших из
употребления сертификатов. В конфигурации
CA указано, что список отзыва надо
обновлять не реже раза в год.
openssl ca -gencrl -config ca.config -out ca.crl # посмотреть openssl crl -in ca.crl -text -noout|less chmod -R 600 ../CA
Настройка
веб-сервера
Для реализации
процесса авторизации по клиентским
сертификатам необходимо сконфигурировать
веб-сервер для решения следующих задач:
1. Запрет
доступа к защищаемой области по протоколу
HTTP
2. Запрос и
проверка клиентских сертификатов
Скопировать
сертификаты и ключи в папку с конфигами
cp apache.crt /etc/ssl/localcerts/apache.crt cp apache.key /etc/ssl/localcerts/apache.key cp ca.crt /etc/ssl/localcerts/ca.crt cp ca.crl /etc/ssl/localcerts/ca.crl
Отредактировать
конфиг сайта
nano /etc/apache2/sites-available/naudoc-ssl.conf ServerName mydomain.net <IfModule mod_ssl.c> NameVirtualHost *:443 <VirtualHost *:443> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all SSLRequireSSL SSLVerifyClient require SSLRequire %{SSL_CLIENT_I_DN_O} eq "Portal" \ and %{SSL_CLIENT_I_DN_OU} in {"DMS", "IT"} # Журнал ошибок Апача показал # ERROR request body exceeds maximum size (131072) for SSL buffer # при попытке сохранить на сервер объемный шаблон документа, поэтому: SSLRenegBufferSize 10485760 </Directory> <Directory "/var/www/naudoc"> Order allow,deny Allow from all Options FollowSymLinks Includes ExecCGI AllowOverride All SetHandler fastcgi-script </Directory> FastCgiExternalServer /var/www/naudoc -socket /var/run/zope.soc -idle-timeout 600 -pass-header Authorization RewriteEngine on RewriteRule !^/dms/(.*) /dms/ [R] RewriteRule ^/dms/docs/(.*) /var/www/naudoc/docs/$1 RewriteRule ^/dms/(.*) /var/www/naudoc/docs/$1 ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined SSLEngine on SSLCACertificateFile /etc/ssl/localcerts/ca.crt SSLCARevocationFile /etc/ssl/localcerts/ca.crl SSLCertificateFile /etc/ssl/localcerts/apache.crt SSLCertificateKeyFile /etc/ssl/localcerts/apache.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule>
Настройка
веб-сервера на перенаправление
пользователей с http на https
чтобы
пользователя, зашедшего на
http://mydomain.net/
отправляли на
https://mydomain.net/
открыть порт
в файрволле
nano /etc/iptables.up.rules # Generated by iptables-save v1.4.14 on Sun Nov 23 03:00:39 2014 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [12:2680] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -m recent --update --seconds 55 --name DEFAULT --rsource -j DROP -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -m recent --set --name DEFAULT --rsource -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Sun Nov 23 03:00:39 2014 # EOF bash /root/disable_fw.sh bash /etc/network/if-pre-up.d/iptables
сконфигурить
Апач
nano /etc/apache2/ports.conf Listen 80 <IfModule mod_ssl.c> Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule> # EOF cp /etc/apache2/sites-available/default /etc/apache2/sites-available/naudoc.conf nano /etc/apache2/sites-available/naudoc.conf ServerName mydomain.net NameVirtualHost *:80 <VirtualHost *:80> Redirect permanent / https://mydomain.net/ </VirtualHost> # EOF a2ensite naudoc.conf service apache2 stop; service apache2 start
Вот как-то так.
В следующий
раз расскажу, как сделать почтовый шлюз
используя Яндекс.Почта для домена. Или
про интеграцию Naudoc с LDAP. Или про оба
сразу, посмотрим.
original post http://vasnake.blogspot.com/2015/02/naudoc.html
Комментариев нет:
Отправить комментарий