Показаны сообщения с ярлыком Server. Показать все сообщения
Показаны сообщения с ярлыком Server. Показать все сообщения

29.12.10

Управление запуском сервера Subversion с помощью xinetd.

  В Fedora нет скрипта запуска сервера SVN, в init.d, поэтому его приходится запускать в ручную, либо делать самописные скрипты. Но есть еще один вариант, передать всю работу по запуску-отстанову сервера демону xinetd.
  Установить сам демон можно с помошью команды:
yum install xinetd

  Не забудте так же включить его автоматический запуск:
chkconfig xinetd on

  Для того что бы передать демону xinetd любой сервис в системе следует создать файл настроек для данного сервиса в каталоге /etc/xinetd.d/ . Например,  в нашем случае, создадим файл subversion со следующим содержимым:

service svn
{
        socket_type     = stream
        protocol        = tcp
        user            = svn
        wait            = no
        disable         = no
        server          = /usr/bin/svnserve
        server_args     = -i --root /path/to/repo
        port            = 3690
}


  Где server путь до команды запуска демона, server_args аргументы запуска демона, user имя пользователя от имени которого следует запускать демон. Если нужно что бы демон слушал порт только на определенном интерфейсе то добавьте параметр bind в котором укажите ip интерфейса на котором слушать порт. По умолчания в Fedora в файле /etc/services прописаны параметры:

svn             3690/tcp                        # Subversion
svn             3690/udp                        # Subversion


  Если их нет то следует их внести, что бы демон знал как следует запускать сервис svn. Название сервиса (svn) должно совпадать в обоих настоечных файлах, если меняет его в одном из них то меняйте и в другом.
  Теперь запускаем демон:
service xinetd start

  Проверить слушет ли демон порт можно командой:
netstat -ant | grep 3690

  Ответ должне быть что то вроде этого, если это не так смотрите системный лог файл
tcp        0      0 0.0.0.0:3690                0.0.0.0:*                   LISTEN

  Теперь пробуйте соединится клиентом с сервером.

26.10.10

Установка сервера 1С предприятия на CenOS 5.5

  Создание сервер 1C предприятия на базе CentOS, имеет некоторые нюансы. Не учтенные они могут в последствии вызвать некоторые проблемы. Изначально я устанавливал те пакеты которые предлагают сами 1c, но в процессе использования понял, что данные пакеты собраны очень криво и не будут работать адекватно. Поэтому последние версии я собирал сам, но и тут скрывалось пару подводных камней. Например сборка по x86_64 вызвала непонятные сбои в базе данных на поиск причины которых я потратил не мало времени. Поэтому я использовал 32-битную CentOS.
  Итак скачиваем дистрибутив и устанавливаем его на наш сервер. После установки следует скачать SRPM Postgresql с сайта 1С отсюда, берем версию 8.3.8 как самую стабильную сборку 1С на данный момент. Так же нам понадобится библиотека icu, скачать можно с официального сайта. Нам нужна версия 3.4 находится она здесь, скачайте сжатый архив исходников для LInux:
 #wget ftp://ftp.software.ibm.com/software/globalization/icu/3.4.1/icu-3.4.1.tgz
  На свежеустановленной системе инсталлируем все что нужно для сборки пакетов для системы:
#yum install rpm-build glibc-devel bison flex python-devel tcl-devel readline-devel zlib-devel pam-devel gcc doxygen gcc-c++
  В самом начале создаем непривилигерованного пользователя от имени которого мы будем производить сборку пакетов.
#useradd  builduser
#passwd builduser
Теперь создадим дерево каталогов для сборки пакетов, в Fedora это делается одной командой, здесь придется выполнить две :)
#mkdir -p ~/rpmbuild/{BUILD,RPMS,S{OURCE,PEC,RPM}S}
#echo "%_topdir $HOME/rpmbuild" > ~/.rpmmacros
  Ну вот все приготовительные действия закончены, начнем сборку пакетов. Во первых соберем libicu который требуется для 1c предприятия, для этого помещаем скачанный архив icu-3.4.1.tgz в каталог сборочного дерева для исходных кодов:
#cp icu-3.4.1.tgz ~/rpmbuild/SOURCES/
  Нам понадобится spec файл для сборки пакета, я брал его из более поздней версии исходных кодов, привожу его здесь полностью:
Name:            icu
Version:        3.4.1
Release:        3.1
Summary:        International Components for Unicode

Group:          Applications/Text
License:        X License
URL:            http://www.ibm.com/software/globalization/icu/
Source0:        ftp://ftp.software.ibm.com/software/globalization/icu/%{version}/%{name}-%{version}.tgz
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

BuildRequires:  doxygen

%description
The International Components for Unicode (ICU) libraries provide
robust and full-featured Unicode services on a wide variety of
platforms.

%package     -n lib%{name}
Summary:        International Components for Unicode - libraries
Group:          System Environment/Libraries

%description -n lib%{name}
%{summary}.

%package     -n lib%{name}-devel
Summary:        Development files for International Components for Unicode
Group:          Development/Libraries
Requires:       lib%{name} = %{version}-%{release}

%description -n lib%{name}-devel
%{summary}.

%package     -n lib%{name}-doc
Summary:        Documentation for International Components for Unicode
Group:          Documentation

%description -n lib%{name}-doc
%{summary}.


%prep
%setup -q -n %{name}

%build
cd source
export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
%configure --enable-static --with-data-packaging=library --disable-samples
make # %{?_smp_mflags} # -j(X>1) may "break" man pages as of 3.2, b.f.u #2357
make doc


%install
rm -rf $RPM_BUILD_ROOT source/__docs
make -C source install DESTDIR=$RPM_BUILD_ROOT
make -C source install-doc docdir=__docs
chmod +x $RPM_BUILD_ROOT%{_libdir}/*.so.*


%check || :
make -C source check


%clean
rm -rf $RPM_BUILD_ROOT


%post -n lib%{name} -p /sbin/ldconfig

%postun -n lib%{name} -p /sbin/ldconfig


%files
%defattr(-,root,root,-)
%doc license.html readme.html
%{_bindir}/derb
%{_bindir}/genbrk
%{_bindir}/gencnval
%{_bindir}/genrb
%{_bindir}/makeconv
%{_bindir}/pkgdata
%{_bindir}/uconv
%{_sbindir}/*
%{_mandir}/man1/derb.1*
%{_mandir}/man1/gencnval.1*
%{_mandir}/man1/genrb.1*
%{_mandir}/man1/makeconv.1*
%{_mandir}/man1/pkgdata.1*
%{_mandir}/man1/uconv.1*
%{_mandir}/man8/*.8*

%files -n lib%{name}
%defattr(-,root,root,-)
%{_libdir}/*.so.*

%files -n lib%{name}-devel
%defattr(-,root,root,-)
%{_bindir}/%{name}-config
%{_mandir}/man1/%{name}-config.1*
%{_includedir}/layout
%{_includedir}/unicode
%{_libdir}/*.a
%{_libdir}/*.so
%{_libdir}/%{name}
%dir %{_datadir}/%{name}
%dir %{_datadir}/%{name}/%{version}
%{_datadir}/%{name}/%{version}/mkinstalldirs
%{_datadir}/%{name}/%{version}/config
%doc %{_datadir}/%{name}/%{version}/license.html

%files -n lib%{name}-doc
%defattr(-,root,root,-)
%doc source/__docs/%{name}/html/*

 В SPEC для icu я исправил под более старую версию пакета некоторые параметры.
 Итак создаем данный spec файл в каталоге ~/rpmbuild/SPECS/:
#vi ~/rpmbuild/SPECS/icu.spec
 И проводим сборку пакета от непривилегированного пользователя builduser:
#rpm -bb  ~/rpmbuild/SPECS/icu.spec
 Если все хорошо, устанавливаем собранные пакеты, командой от root:
#rpm -ihv /home/builduser/rpmbuild/RPMS/i386/libicu-devel-3.4.1-3.1.i386.rpm  /home/builduser/rpmbuild/RPMS/i386/libicu-3.4.1-3.1.i386.rpm
 Теперь от пользователя builduser скачиваем postgresql:
#wget http://v8.1c.ru/overview/postgresql_patches/8-3-8/postgresql-8.3.8-1.1C.src.rpm
 Устанавливаем его в дерево каталогов, запустив от пользователя builduser команду:
#rpm -ihv postgresql-8.3.8-1.1C.src.rpm
 Немного исправим spec файл для postgresql от 1С, который после установки SRPM должен находится в каталоге SPECS, , в нем следует найти такие строки:
cp %{local_libdir}/libicuuc.so.34 %{buildroot}/%{_libdir}/pgsql
cp %{local_libdir}/libicui18n.so.34 %{buildroot}/%{_libdir}/pgsql
cp %{local_libdir}/libicudata.so.34 %{buildroot}/%{_libdir}/pgsql
 И исправить их на такие:
cp %{_libdir}/libicuuc.so.34 %{buildroot}/%{_libdir}/pgsql
cp %{_libdir}/libicui18n.so.34 %{buildroot}/%{_libdir}/pgsql
cp %{_libdir}/libicudata.so.34 %{buildroot}/%{_libdir}/pgsql
 Возможно вы захотите что бы postgres использовал библиотеку libicu от самих 1C, тогда вам придется установить сначала сам сервер 1C, о чем я написал ниже, и в SPEC файле указать пути до библитек из сборки 1С:

cp /opt/1C/v8.1/i386/libicuuc.so.34 %{buildroot}/%{_libdir}/pgsql
cp /opt/1C/v8.1/i386/libicui18n.so.34 %{buildroot}/%{_libdir}/pgsql
cp /opt/1C/v8.1/i386/libicudata.so.34 %{buildroot}/%{_libdir}/pgsql

 И запускаем сборку:
#rpmbuild -bb ~/rpmbuild/SPECS/postgresql-8.3.1C.spec
 Если сборка завершилась удачно, в сборочном дереве, в каталоге RPMS мы получим наши rpm файлы для установки. Устанавливать их следует командой:
#rpm -ihv /home/builduser/rpmbuild/RPMS/i386/postgresql-*
 После установки нужно изменить файл профиля для пользователя postgres который создается при установке postgresq, точнее следует указать какую локаль следует использовать серверу Postgresq, для этого открываем файл /var/lib/pgsql/.bash_profile и добавляем следующие строчки:

LANG=ru_RU.UTF-8
export LANG
 Кстати там я заметил переменную PGDATA которая казалось бы должна определять где будет лежать база данных, но она не работает. Такая же переменная существует в скрипте запуска сервера, думаю что если поменять ее значение в обоих местах то можно добиться что бы база лежала в нужном месте, я не стал заморачиватся так как все равно делаю бекапы на другой компьютер в сети. Итак после того как переменная будет записана делаем инициализацию базы данных:
#service postgres initdb
 Теперь поправим конфигурационный файл что бы можно было заходить локально без пароля, что бы этот самый пароль установить. Открываем файл /var/lib/pgsql/data/pg_hba.conf и изменяем там строчку:
host    all         all         127.0.0.1/32          md5
на:
host    all         all         127.0.0.1/32          trust
теперь можно запустить сервер:
#service postgres start
и войти в систему под пользователем postgres:

#psql -h 127.0.0.1 -U postgres
И поменять пароль доступа для пользователя postgres:

>ALTER USER postgres PASSWORD 'password';
 Теперь вновь открываем конфиг /var/lib/pgsql/data/pg_hba.conf и меняем там в строчке:
host    all         all         127.0.0.1/32          trust
 Слово trust на md5.
 Сделаем перезагрузку сервера:
 #service postgres reload
 Теперь с postgresql законченно. Следующий шаг установка самого сервера 1C. Скачайте ваш дистрибутив с сайта 1C, напрмиер в домашнюю директорию и установите его командой:
#rpm -ihv ~/1C_Enterprise-*
 Следует скачать драйвера от аппаратного ключа и сервер лицензия для него же, взять их можно отсюда: aksusdb и hasplm.
 Скачиваем и распаковываем их. Втыкаем ключи. Файлы hasplm-redhat-8.30-1.i386.rpm и aksusbd-redhat-1.8.1-3.i386.rpm копируем на сервер и ставим командой:
#rpm -ihv hasplm-redhat-8.30-1.i386.rpm aksusbd-redhat-1.8.1-3.i386.rpm
 Все защита установлена, теперь запускаем сервер предприятий:
#service srv1cv81 start
Если все стартовало нормально, ставим клиент. Я ставил клиента с SMB ресурса с опцией /adm что позволяет обновить все клиенты в сети. Но это не обязательно. Кстати клиент для 1C неплохо работает под wine. Теперь с помощью консоли управления сервером создаем базу данных, как приведено ниже на скриншотах, тока не забудьте поставить данные актуальные для вас ;) :





Все прошло хорошо? Тогда запускаем клиент указываем существующую базу данных our_base на сервере 1с_server и загружаем свой конфигурацию! На этом пока все.

17.9.10

Установка и настройка сервера управления предприятием Alfresco

  Система управления предприятием Alfresco один из самых мощных проектов из подобных Opensource проектов. Продукт написан на Java и имеет приятный и понятный пользовательский интерфейс. К сожалению система не доступна из репозитариев, но установщик Community версии достаточно хорошо работает из коробки. Итак, для начала скачем пакет для Linux с официального сервера Alfresco здесь. После того как пакет будет скачан, следует установить его. Запускать его можно как от обычного пользователя так и от root. Запустите установку пакета, предварительно присвоив ему бит запускаемости:
#chmod +x Alfresco-Community-3.3g-Linux-x86-Install
#./Alfresco-Community-3.3g-Linux-x86-Install

  Я устанавливал пакет на сервер где не было X-ов, если запускать установщик под ними, то вы увидите мастер установщик, наподобие стандартных мастеров Windows. Я же буду говорить о консольном варианте, в общем то между ними не очень много различий. Итак запустив установщик, подтвердите установку клавишей Y, и укажите, либо оставьте по умолчанию, папку куда будет установлен сервер. По умолчанию сервер встает на /opt/Alfresco/ что мне лично подошло, поэтому я ничего не менял.
Также нужно установить и настроить сервер MySql, устанавливается командой
#yum install mysql-server

  Когда я пробовал ставить систему Alfresco на домашней машине, я столкнулся с проблемой с русскими именами в названиях документов и папок в системе Alfresco, вместо кириллицы система выдавала знаки вопросов. Решило проблему принудительная установка кодировок Mysql сервера, в конфиге /etc/my.cnf я добавил следующие директивы:

В раздел  mysqld:
[mysqld]
default-character-set=utf8
В раздел client:
[client]
default-character-set=utf8

  Для создания базы данных в Mysql выполните команды Mysql:
mysql> create database alfresco default character set utf8 collate utf8_bin;
mysql>grant all on alfresco.* to 'alfresco'@'localhost' identified by 'alfresco' with grant option;

  По умолчанию Alfresco, а вернее веб сервер tomcat работает на порту 8080, но у меня на данном сервере крутится еще несколько веб сервисов, поэтому я решил проксировать клиентов на порт 8080 с помощью http сервера Apache. Для этого в конфиг апача я добавил секцию директив:

NameVirtualHost *:80
<virtualhost *:80\="">
    ServerName alfresco.domain.local
    ProxyPass   /  http://alfresco.domain.local:8080/
    ProxyPassReverse  /  http://alfresco.domain.local:8080/
</virtualhost>


  Теперь следует настроить стартовые скрипты alfresco:
alf_start.sh
alf_stop.sh
alfresco.sh

  В первом скрипте, alf_start.sh, следует указать директорию куда вы установили сервер Alfresco вместо метки @@ALF_HOME@@.
Во втором скрипте аналогично.
В третьем скрипте уксзваем, так же вместо @@ALF_HOME@@ нужную нам папку, а также путь до директории с запускаемым файлом java вместо метки @@JAVA_HOME@@ ( у меня путь был /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre)

  Теперь запустим наш сервер и попробуем зайти на него с любого веб-браузера:
#/opt/Alfresco/alf_start.sh
Using CATALINA_BASE:   /opt/Alfresco/tomcat
Using CATALINA_HOME:   /opt/Alfresco/tomcat
Using CATALINA_TMPDIR: /opt/Alfresco/tomcat/temp
Using JRE_HOME:        /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre
Using CLASSPATH:       /opt/Alfresco/tomcat/bin/bootstrap.jar

  Если все хорошо, то в браузере набираем адрес который вы установили в виртуальных хостах вашего Apache, либо если вы не стали ставить апач, то имя сервера с указание порта 8080. У меня путь выглядел слудющим образом:
http://alfresco.domain.local/share
   Следует подождать, при первом запуске система инициализирует базу данных в Mysql а также Java сервер, (кстати продолжительный запуск сервиса ожидает вас и при готовой базе, если вы перезагружали сервис).

Теперь останавливаем сервис:
#/opt/Alfresco/alf_stop.sh

  По умолчанию система имеет англоязычный интерфейс, поэтом следует скачать русификатор для нее. Скачать его можно здесь  или выбрать нужный языковой пакет здесь.

  Пакет устанавливается путем добавления содержимого архива в папку:
/Путь/до/папки/сервера/tomcat/shared/classes/alfresco/messages

  А также указать нужный язык в конфигурационном файле:
/Путь/до/папки/сервера/tomcat/shared/classes/alfresco/extension/web-client-config-custom.xml
  В этом файле надите и раскоментируте следующий ниже параметр:
<config condition="Languages" evaluator="string-compare">
    <languages>
       <language locale="ru_RU">Русский</language>
    </languages></config>"

  Теперь запускаем систему вновь и используем по назначению. Подробнее об использовании системы можно почитать в официально Wiki проекта, а также в официальных уроках.

9.12.09

Демон LogWatch.

В недавнем прошлом я как то обнаружил что каталог /var занял почти все полезное место на отведённом ему разделе жёсткого диска, с помощью команды du выяснил что заняла все место папка кеша некоего демона logwatch, на тот момент о демоне я ничего не знал, но стало интересно что же это за демон и зачем он нужен. После прочтения мана понял что данный демон создаёт ежедневные отчёты состояния системы на основе логов других демонов, группирует и систематизирует данные и отправляет этот отчёт на указанное мыло. Так как я отключил демон sendmail в системе отчёты от logwatch кешировались системой и не отправлялись накапливая постепенно забив весь раздел. Решил исправить эту ситуацию указав валидный внешний email. Теперь на всех своих системах я включаю данный демон и в итоге имею неплохой инструмент мониторинга за состоянием системы без постоянного контроля по удаленке. Итак:

Настойка демона logwatch.

Настройка системы производиться с помощью конфигов в /etc/logwatch/ . основной конфигурационный файл logwatch.conf находиться по пути /etc/logwatch/conf/logwatch.conf. Содержимое моего конфига:
LogDir = /var/log
TmpDir = /var/cache/logwatch
MailTo = my@e-mail
MailFrom = Logwatch
Range = yesterday
Save = /root/logwatch
Detail = High
Service = All
Service = "-zz-network"
Service = "-zz-sys"
mailer = "sendmail -t"

Значения этих директив следующие:

Директория в которой хранятся логи системы.
LogDir = /var/log

Та самая директория для хранения временных файлов. которая отожрала у меня все место на разделе.
TmpDir = /var/cache/logwatch

Электронный адрес на который следует отправлять отчёты.
MailTo = my@e-mail

В поле письма "От кого" будет указанная ниже строчка.
MailFrom = Logwatch

Если есть желание что бы сведения сохранялись локально то укажите этот параметр
Save = /root/logwatch

Установите высокую степень отображения что бы видеть максимум информации из логов, можно также установить Low и Med параметры или числа от 0 до 10 для регулирования степени детализации.

Detail = High

Укажите за какой промежуток времени собирать отчёт. Также можно указывать параметры today и all.
Range = yesterday

Что бы оптимизировать сбор отчётов под ваши нужды существует директива Service которая и регулирует как и с каких логов следует собирать информацию. Сами скрипты находятся в директории /usr/share/logwatch/scripts/services/. Мои директивы означают что я включаю в отч1т обработку всех логфайлов, за исключением скриптов -zz-network, -zz-sys которые собирают информацию о конфигруации сети и железа.

Service = All
Service = "-zz-network"
Service = "-zz-sys"



Если нужно выделить только конкретные отчёты то укажите какие конкретно вместо параметра All. Для отправки отчёта используется почтовый демон. По умолчанию в fedora это sendmail
mailer = "sendmail -t"
Если у вас другой демон для отправки системных сообщений укажите команду которую следует выполнить logwatch что отправить отчёт. Например для postfix следует указать:
mailer = "postfix.sendmail -t"

После того как вы сохраните конфиг, запустите службу sendmail если вы ее остановили командой
service sendmail start

а так же включите автоматический запуск службы
chkconfig sendmail on

Можете проверить работоспособность демона запустив команду logwatch. Она создаст и отправит вам на email отчёт о состоянии системы.

25.10.09

Создание клиент-сервер OpenVPN соединения с аутентификацией по сертификату.

Достаточно быстрый способ создания сервера, и соединения клиента с помощью NetworkManager. Я использую OpenVPN для соединения со своими серверами, и с машин под управлением Windows и Linux, что очень удобно, также данный VPN передерживается NetworkManager что облегчает его быструю настройку на Linux.

Создание туннеля OpenVPN с аутентификацией пользователей с помощью сертификатов.

Сначала установим openvpn с репозиториев на сервер:
#yum install openvpn

после установки создадим ключи для сервера и клиентов, для этого в составе пакета есть группа скриптов, которая устанавливается в /usr/share/openvpn. Скопируем оттуда каталог easy-rsa в домашнюю директорию ~ :
#cp -r /usr/share/openvpn/easy-rsa ~/

В получившемся каталоге easy-rsa будет два каталога 1.0 и 2.0, нам нужен 2.0. Вторая версия скриптов easy-rsa. В каталоге следует поправить файл vars, в котором задайте ваши данные для директив:

export KEY_COUNTRY="RU"
export KEY_PROVINCE="PROVINCE"
export KEY_CITY="City"
export KEY_ORG="Organisation"
export KEY_EMAIL="mail@mail.com"


По умолчанию скрипт генерирует все сертификаты в каталог ./key можно оставить так. Но лучше мы будем генерировать ключи прямо в каталог openvpn, что бы не пришлось возиться с обновлением файлов после того как будем добавлять новых пользователей.  Укажем другой каталог файле vars директива KEY_DIR:
export KEY_DIR="/etc/openvpn/keys/"

Создадим каталог для наших ключей keys:
#mkdir /etc/openvpn/keys/

Укажем скриптам что брать настройки следует из vars:
#source ./vars
#./clean-all

Генерируем сертификаты для серверной части. Первый будет ca сертификат:
#./build-ca
Generating a 1024 bit RSA private key
......++++++
............++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [PROVINCE]:
Locality Name (eg, city) [City]:
Organization Name (eg, company) [Organisation]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [Organisation CA]:
Name []:
Email Address [mail@mail.com]:

Запускаем генерацию ключа (вместо server вставьте свои данные):

#./build-key-server server
Generating a 1024 bit RSA private key
............................++++++
..............................................++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [PROVINCE]:
Locality Name (eg, city) [City]:
Organization Name (eg, company) [Organisation]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [server]:
Name []:
Email Address [mail@mail.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:passwd
An optional company name []:
Using configuration from /root/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'PROVINCE'
localityName :PRINTABLE:'City'
organizationName :PRINTABLE:'Organisation'
commonName :PRINTABLE:'server'
emailAddress :IA5STRING:'mail@mail.com'
Certificate is to be certified until Oct 23 12:59:41 2019 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Теперь нужно сгенерировать ключ Диффи-Хелмана для защиты обмена ключами:
#./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.......................................................................+.........................................++*++*++*
В итоге в каталоге keys должно получиться примерно следующее:
-rw-r--r-- 1 root root 3883 2009-10-25 15:59 00.pem
-rw-r--r-- 1 root root 3766 2009-10-25 16:02 01.pem
-rw-r--r-- 1 root root 1233 2009-10-25 15:54 ca.crt
-rw------- 1 root root 887 2009-10-25 15:54 ca.key
-rw-r--r-- 1 root root 245 2009-10-25 16:06 dh1024.pem
-rw-r--r-- 1 root root 210 2009-10-25 16:02 index.txt
-rw-r--r-- 1 root root 20 2009-10-25 16:02 index.txt.attr
-rw-r--r-- 1 root root 21 2009-10-25 15:59 index.txt.attr.old
-rw-r--r-- 1 root root 105 2009-10-25 15:59 index.txt.old
-rw-r--r-- 1 root root 3 2009-10-25 16:02 serial
-rw-r--r-- 1 root root 3 2009-10-25 15:59 serial.old
-rw-r--r-- 1 root root 3883 2009-10-25 15:59 server.crt
-rw-r--r-- 1 root root 700 2009-10-25 15:59 server.csr
-rw------- 1 root root 887 2009-10-25 15:59 server.key

Теперь что касается клиентов создаём клиентские ключи подобным образом (вместо client вставьте свои данные). Сгенерируйте ключи для всех пользователей вашей сети, которым нужен будет доступ по VPN:
#./build-key client
Generating a 1024 bit RSA private key
.++++++
............................++++++
writing new private key to 'client.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [PROVINCE]:
Locality Name (eg, city) [City]:
Organization Name (eg, company) [Organisation]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [client]:
Name []:
Email Address [mail@mail.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:passwd
An optional company name []:
Using configuration from /root/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'PROVINCE'
localityName :PRINTABLE:'City'
organizationName :PRINTABLE:'Organisation'
commonName :PRINTABLE:'client'
emailAddress :IA5STRING:'mail@mail.com'
Certificate is to be certified until Oct 23 13:02:29 2019 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated



Теперь притупим к конфигурированию непосредственно сервера. В каталоге /usr/share/doc/openvpn-2.1/sample-config-files/ есть примеры конфигурационных файлов, нам нужен оттуда файл server.conf. Скопируем его в каталог конфигураций openvpn:
#cp /usr/share/doc/openvpn-2.1/sample-config-files/server.conf /etc/openvpn/

Изменим некоторые директивы конфига под наши нужды. Укажем порт который будет слушать openvpn:
port 1194

Протокол передачи данных (Можно tcp или udp):

proto udp

Виртуальный интерфейс который будет использовать openvpn
dev tun0


Укажем виртуальную сеть которую будет использовать openvpn:
server 10.8.0.0 255.255.255.0

Укажем лог файл и его уровень для отладки:
status openvpn-status.log
log openvpn.log
log-append openvpn.log
verb 3

Все на этом заканчиваем с настройками сервера, запускаем службу:
#/etc/init.d/openvpn start
И укажем их местонахождение в конфиге сервера с помощью директив:
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem


Если все в норме в логе будут несколько информативных сообщений, заканчивающихся сообщением Initialization Sequence Completed.
Теперь очередь за клиентом. Скопируем с помощью носителя ключи client.crt, client.key, dh1024.pem, ca.crt из папки ~/easy-rsa/2.0/keys в папку клиента ~/.keys.
Для соединения с сетью я рекомендую использовать NetworkManager (идёт по умолчанию в Fedora). Данная система позволяет настраивать множество различных типов сетевых соединений без использования root и заносить настройки с помощью однотипных графических форм.
Для того что бы NetworkManager умел работать с OpenVPN нужно установить для него плагин из репозитариев:
#yum install NetworkManager-openvpn

После того, как плагин установиться вызовем утилиту настроек сетевых соединений в меню Система\Параметры\Сетевые соединения. Откроется нижеследующее окно:

Нажав кнопку добавить, вызовем визард VPN, в ниспадающем меню которого выберем OpenVPN:

Нажатие на кнопку Create... откроет форму в которую занесем данные о наших сертификатах. Если надо поставим галочку подключаться автоматически:


Указываем имя соединения, адрес сервера в поле Шлюз, в ниспадающем меню указываем тип соединения Сертификаты (TSL), в поле сертификат выбираем client.crt, в поле Сертификат CA указываем ca.crt, в поле личный ключ - client.key и наконец в поле пароль личного ключа вносим пароль который мы вводили при генерации ключа клиента. Если вы выбрали протокол tcp в настройках сервера то, клиенту следует указать использовать tcp, щёлкнув на кнопке Дополнительно... и поставив соответственную галку:

Все, подтверждаем наши настройки поклацав на соответствующие кнопки.
Для активации VPN щёлкните на апплете сетевых соединений. В выпавшем меню выбираем: Соединения VPN\"Имя нашего соединения" и если все настроено правильно появиться уведомление о подключении к сети. Что бы получить доступ к подсети, а не только к самому серверу, через этот VPN, необходимо включить маршрутизацию пакетов на сервере выполнив:
#echo "1" > /proc/sys/net/ipv4/ip_forward
А так же настроить iptables для того что бы он NATил пакеты из VPN. В комплекте с пакетом для этих целей идёт скрипт который облегчает эту задачу. Найдёте его по пути: /usr/share/doc/openvpn-2.1/sample-config-files/firewall.sh. Данная система позволяет также соединяться по VPN машинам под управлением Windows для чего есть соответствующий пакет на официальном сайте.
 Отозвать сертификат можно скриптом  revoke-full из каталога easy-rsa:
./revoke-full client

6.8.09

Samba+OpenLDAP+Smbldap-tools

Здесь опишу как я делал систему авторизации пользователей windows в samba+ldap. Простейший сервер для сетевой авторизации, без прописывания в DNS и DHCP, без авторизации с помощью керберос, но сетевыми профилями хранящимися на сервере. Самое необходимое для небольшого офиса, что бы не покупать дорогущий сервер Windows с AD при минимальных временных затратах. Данный сервер был установлен на Fedora 10. Использовались пакеты из репозитария.Ничего не перекомпилировалось, все так сказать из коробки. Итак:

Сервер для авторизации windows клиентов с контролем доступа к ресурсам на основе Samba+OpenLDAP+Smbldap-tools

Для начала были установлены следующие пакеты:
# yum install samba openldap-servers smbldap-tools
После установки компонентов и их зависимостей, настраиваем ldap сервер. Для данной работу нужно сконфигурировать два файла. ldap.conf - конфиг клиента используемого самим сервером, и конечно же, slapd.conf - для конфигурации сервера. Оба файла находятся в /etc/openldap/ для своего сервера я использовал следующие конфигурации:
Конфиг ldap.conf

BASE dc=domain,dc=local
URI ldap://127.0.0.1/


Конфиг slapd.conf

include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/samba.schema
allow bind_v2
loglevel 256
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
database bdb
suffix "dc=domain,dc=local"
rootdn "cn=root,dc=domain,dc=local"
rootpw {MD5}secret_hash

access to attrs=userPassword,sambaLMPassword,sambaNTPassword
by self write
by anonymous auth
by * none

access to dn.base=""
by * read

access to dn.base="cn=Subschema"
by * read

access to attrs=shadowLastChange
by self write
by * read

access to *
by * read

directory /var/lib/ldap
index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq
index objectClass,uid,uidNumber,gidNumber,memberUid eq
index cn,mail,surname,givenname eq,subinitial
database monitor


Разберём указанные директивы файла ldap.conf.

указываем базовый DN нашего домена должно указываться в отличительном формате LDAP:
BASE dc=domain,dc=local

Далее идет опция указывающая местонахождения сервера LDAP, в данном случае это 127.0.0.1:
URI ldap://127.0.0.1/

Теперь рассмотрим директивы непосредственно самого сервера OpenLDAP указаные в его основном конфиге slapd.conf:
директивами include обозначаеться местонахождение файлов схем. Схемы являються своеобразными скриптами написанными на языке который понимает OpenLDAP, они служат для более простого создания нужной информации в базе данных LDAP сервера. В нашем случае используються стандарные схемы которые идут в комплекте с пакетами samba и другими. Нам нужны только эти:
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/samba.schema

Разрешаем доступ к ldap по протоколу LDAP версии 2
allow bind_v2
На время настроек устанавливаем высокий уровень логов, для выявления ошибок:
loglevel 256
Стандартная директива указывающая на пид файл демона
pidfile /var/run/openldap/slapd.pid

Директива указувающая на файл в котором прописаны аргументы запуска демона из командной строки. То есть те аргументы котрые вы бы прописали для запускаемого вручную bp rjvfylyjq cnhjrb демона LDAP:
argsfile /var/run/openldap/slapd.args

Указываем формат базы данных. В данном случае это bdb:
database bdb

Суфикс DN нашего домена:
suffix "dc=domain,dc=local"

Указываем корневого пользователя для нашего сервера:
rootdn "cn=root,dc=domain,dc=local"
Далее следует указать хеш пароля для вышеуказаного пользователя сгенерированный командой:
#slappasswd -h {MD5}

в директиве:
rootpw {MD5}secret_hash
куда вместо secret_hash следует вписать хеш сгененрированный вышеуказанной командой. Далее указываем правила доступа к данным храняшимся в LDAP:

Доступ к записям в базе LDAP где храняться пароли Samba пользователей. Разрешаем запись для авторизированных пользователей, анонимным пользователям даем право на авторизацию, остальным запрещаем доступ к парольным записям:
access to attrs=userPassword,sambaLMPassword,sambaNTPassword
by self write
by anonymous auth
by * none
Устанавливаем на данные право только для чтения всем клиентам:
access to dn.base=""
by * read

access to dn.base="cn=Subschema"
by * read

Атрибут обновления Shadow на запись только авторизированным клиентам:
access to attrs=shadowLastChange
by self write
by * read
Остальное только для чтения для всех:
access to *
by * read
Теперь настроим Samba сервер. Основной конфиг самбы находиться в /etc/samba/ называеься smb.conf. Привожу свой рабочий конфиг:
netbios name = MAIN
workgroup = DOMAIN
server string = LDAP PDC
hosts allow = 10.12.0.0/24 127.0.0.0/8
security = user
encrypt passwords = yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
interfaces = lo eth0
bind interfaces only = yes
local master = yes
os level = 65
domain master = yes
preferred master = yes
null passwords = no
hide unreadable = yes
hide dot files = yes
domain logons = yes
logon path = \\%L\profiles\%U
logon drive = H:
logon home = \\%L\%U
wins support = yes
name resolve order = wins lmhosts host bcast
dns proxy = no
time server = yes
log level = 3 vfs:2
log file = /var/log/samba/log.%m
max log size = 0
add user script = /usr/sbin/smbldap-useradd -m "%u"
add machine script = /usr/sbin/smbldap-useradd -w -i "%u"
add group script = /usr/sbin/smbldap-groupadd -p "%g"
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"
passdb backend = ldapsam:ldap://127.0.0.1/
ldap delete dn = Yes
ldap ssl = no
winbind nested groups = no
ldap suffix = dc=domain,dc=local
ldap admin dn = cn=root,dc=domain,dc=local
ldap group suffix = ou=Group
ldap user suffix = ou=People
ldap machine suffix = ou=People
ldap idmap suffix = ou=Idmap
dos charset = CP866
syslog = 0

[netlogon]
path = /var/lib/samba/netlogon/
guest ok = Yes
browseable = no
write list = root
writable = no
share modes = no

[profiles]
comment = Network Profiles Service
path = %H
read only = No
store dos attributes = Yes
create mask = 0660
directory mask = 0770

[homes]
path = /home/%U
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
read only = No
# inherit acls = Yes
create mask = 0660
directory mask = 0770
case sensitive = no
hosts allow = 10.12.0.0/24

[IPC$]
path = /tmp
hosts allow = 10.12.0.0/24 127.0.0.1
hosts deny = 0.0.0.0/0



Разберем указаные директивы. В начале у меня идут директивы работающие с именными параметрами сервера. В первой директиве указано что NetBios имя нашего сервера MAIN
netbios name = MAIN

Рабочая группа домена WORKGROUP
workgroup = WORKGROUP

Расширенное описание сервера которое будет видно для windows клиентов
server string = LDAP PDC

Сетевые настройки. Доступ до сервера разрешаем только для указных подсетей. В данном случае это петлевой интерфейс и локалка 10.12.0.0 с маской 255.255.255.0.
hosts allow = 10.12.0.0/24 127.0.0.0/8

Для контроллера домена уровень доступа выставляем в user:
security = user

Указываем что пароли при передаче по сети следует шифровать:
encrypt passwords = yes

Опции для соединения клиентов с сервером:
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

Интерфейсы которые на которых демон будет ожидать соединения:
interfaces = lo eth0

Проверяем пакеты на соответствие широковещательному адресу для указанных интерфейсов, если пакет не соответствует этому адресу то не обрабатываем его:
bind interfaces only = yes

Ниже следуют некоторые настройки для NetBios сервера. Указываем что наш сервер должен пытаться стать мастер-браузером NetBios в сети:
local master = yes

Указываем уровень сервера в выборах мастер-браузера сети. Максимальное значение 255. Данный параметр сравнивается с параметрами остальными присутствующих в подсети клиентов NetBios и в зависимости от величин устанавливается какой сервер будет мастер-браузеров:
os level = 65

Указываем что наш сервер может составлять списки машин в сети, и передавать их, в случае более высокого уровня у какой либо из машин, для мастер-браузера сети:
domain master = yes

Если у вас один сервер в сети лучше всего выставить в принудительный захват роли мастер-браузера, если нет то следует очень осторожно обращаться с данным параметром, так как он может вызвать высокий широковещательный трафик в сети:
preferred master = yes

Некоторые параметры безопастности. Запрещаем пустые пароли:
null passwords = no

Запрещаем показывать нечитаемые для клиентов файлы:
hide unreadable = yes

Запрещаем показывать файлы которые начинаются с точки. (Для LInux являются скрытыми файлами):
hide dot files = yes

Поддержка режима работы для станций Win9x и режима работы как контроллер NT4:
domain logons = yes

Выключаем поддержку вложенных групп:
winbind nested groups = no

Парметры указывающие пути до домашних директорий на сервере для пользователей, а так же сетевой диск с данными профиля, где под %L будет пониматься наш сервер, а %U имя пользователя :
logon path = \\%L\profiles\%U
logon drive = H:
logon home = \\%L\%U

Включаем поддержку WINS:
wins support = yes

Указываем в каком порядке использовать методы резолвинга имён хостов в сети. В данном случае используются сначала wins, потом файл самбы lmhost, потом файл hosts системы, потом при помощи широковещательной рассылки:
name resolve order = wins lmhosts host bcast

Указываем что если демон wins не смог разрешить имя NetBios, то следует сделать запрос к серверу DNS:
dns proxy = no

Указываем что данный серве являеться сетевым сервером времени для Windows машин:
time server = yes

Указываем уровень вывода отладочной информации в лог. Также указываем вывод информации о чтении-записи в файловые системы.
log level = 3 vfs:2

Указываем лог-файл для сервера, в данном случае использеться разный лог для разных машин что указывает переменная %m:
log file = /var/log/samba/log.%m

Указываем, что не следует ограничивать размер файла лога:
max log size = 0

Далее следуют скрипты обработки данных для работы с LDAP и samba из пакета smbldap-tools:
Скрипт добавления пользователя в домен:
add user script = /usr/sbin/smbldap-useradd -m "%u"

Скрипт добавления машины в домен:
add machine script = /usr/sbin/smbldap-useradd -w -i "%u"

Скрипт добавления группы пользователей в домен:
add group script = /usr/sbin/smbldap-groupadd -p "%g"

Скрипт добавления пользователей в группу домена:
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"

Скрипт удаления пользователея из группы домена:
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
Скрипт установки первичной группы для пользователя домена:
set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"

Указываем параметры для работы с LDAP:
Адрес сервера LDAP. В нашем случае Samba и LDAP сервера находяться на одной машине:
passdb backend = ldapsam:ldap://127.0.0.1/

Разрешаем операции удаления в данных в LDAP:
ldap delete dn = Yes

Не используем ssl соединение c LDAP:
ldap ssl = no

Указываем суффикс для сервера:
ldap suffix = dc=domain,dc=local

Указываем DN администратора для соединения с LDAP:
ldap admin dn = cn=root,dc=domain,dc=local

Суффикс группы в базе LDAP:
ldap group suffix = ou=Group

Суффикс пользователей в базе LDAP:
ldap user suffix = ou=People

Суффикс машин в базе LDAP (тут указан тот же суффикс что и для пользователей из-за некоторой ошибки при работе с LDAP при присоединении компьютера к домену) :
ldap machine suffix = ou=People

IDmap суффикс в базе LDAP:
ldap idmap suffix = ou=Idmap

Указываем кодировку для Windows клиентов (для корректной поддержки кириллицы в именах файлов):
dos charset = CP866

Указываем что демону syslog передавать только сообщения о ошибках:
syslog = 0
На этом раздел [global] закрыт. Делее следуют разделы в которых указываются общие ресурсы и доступ к ним.

Системный ресурс [profiles] это ресурс на котором записывается профиль пользователя. У меня установлены следующие директивы:
комментарий к ресурсу который увидит пользователь Windows:
comment = Network Profiles Service

Путь до ресурса. Зависит от имени пользователя и домена.
path = %H

Указываем что данные на шара могут быть перезаписаны пользователем:
read only = No

Указываем что демон должен прочитать DOS атрибуты(Скрытй, Архивный, Только для чтения) файлов, из расширенных атрибутов прежде чем преобразовать атрибуты DOS в атрибуты UNIX:
store dos attributes = Yes

Указываем маску для файлов создаваемых пользователем:
create mask = 0660

И маску для директорий создаваемых пользователем:
directory mask = 0770

Далее следует каталог для пользовательской домашней директории [homes].
Путь на сервере в зависимости от имени пользователя, в папке /home/:
path = /home/%U

Маска для пользователей которым разрешён вход на ресурс:

valid users = %S, %D%w%S

Указываем что данный ресур не будет виден из проводника windows:
browseable = No

Не чувствительность к регистру символов для этого ресурса:
case sensitive = no

До данной директории допускаем только клиентов нашей подсети:
hosts allow = 10.12.0.0/24

Указываем ресурс [IPC$] (Inter Process Communication) данный ресурс предназначен для создания именованных каналов, для обмена различной служебной информацией меж компютерами. Путь ресурса будет в папочке /tmp системы:
path = /tmp

Разрешаем доступ до ресурса только для нашей подсети и запрещаем для всех остальных:
hosts allow = 10.12.6.0/24 127.0.0.1
hosts deny = 0.0.0.0/0

С конфигом smb.conf закончили. Нужно внести пароль для DN указаного в директиве 'ldap admin dn' в конфиге smb.conf, выполнив команду:
# smbpasswd -W
И введя соответсвующий пароль.

Далее следует указать настройки для локальной аутентификации. Для этого указываем в фале nsswitch.conf что для авторизации также используем winbind, добавляя параметр winbind для директив passwd, shadow, group:
passwd: files ldap winbind
shadow: files ldap winbind
group: files ldap winbind

Так же следует изменить файл /etc/ldap.conf принадлежащей пакету nss_ldap:
host main
base dc=domain,dc=local
bind_policy soft
pam_password md5
ssl no
nss_map_attribute uniqueMember member
pam_filter objectclass=posixAccount
nss_base_passwd ou=Computers,dc=domain,dc=local
nss_base_passwd ou=People,dc=domain,dc=local
nss_base_shadow ou=Computers,dc=domain,dc=local
nss_base_shadow ou=People,dc=domain,dc=local
nss_base_group ou=Group,dc=domain,dc=local
debug 0
logdir /var/log/nss_ldap

Директивы файла означают следующее:

Имя сервера:
host main

База на сервере LDAP:
base dc=domain,dc=local

Возвращение ошибки для nss_ldap при недоступности ldap:
bind_policy soft

Шифруем пароли методом md5:
pam_password md5

Не используем ssl:
ssl no

Указываем что атрибут member будет использоваться при запросах как атрибут uniqueMember:
nss_map_attribute uniqueMember member

Фильтр поиска по базе LDAP:
pam_filter objectclass=posixAccount

Далее следуют указание где искать данные для passwd, shadow, group,
nss_base_passwd ou=Computers,dc=domain,dc=local
nss_base_passwd ou=People,dc=domain,dc=local
nss_base_shadow ou=Computers,dc=domain,dc=local
nss_base_shadow ou=People,dc=domain,dc=local
nss_base_group ou=Group,dc=domain,dc=local

Уровень отображения ошибок. Можно при настройке использовать уровень 256 что бы видеть отладочные сообщения:
debug 0

Место нахождения log-файла:
logdir /var/log/nss_ldap

Теперь настроим утилиту для взаимодействия с LDAP и самбой smbldap-tools. У утилиты есть два конфигурационых файла, находящихся в /etc/smbldap-tools/. Это smbldap_bind.conf и smbldap.conf, первый содержит параметры соединения с базой LDAP, второй содержит парметры для взаимодействия с базой LDAP. Итак smbldap_bind.conf:

masterDN="cn=root,dc=domain,dc=local"
masterPw="secret"
Параметры означают следующее:
Директива masterDN содержит DN в формате LDAP для основного доступа:
masterDN="cn=root,dc=domain,dc=local"

Параметр masterPw содержит пароль основного доступа
masterPw="secret"
Можно также настроит и вторичный доступ к серверу директивами slaveDN и slavePw. Я не стал усложнять и указал root пользователя из конфига LDAP, хотя ради безопастности можно создать отдельного пользователя в базе LDAP который бы имел права на изменение параметров других пользователей.


SID="S-1-5-21-76483924-3502640226-4065347779"
sambaDomain="DOMAIN"
slaveLDAP="127.0.0.1"
slavePort="389"
masterLDAP="127.0.0.1"
masterPort="389"
ldapTLS="0"
verify="require"
cafile="/etc/pki/tls/certs/ldapserverca.pem"
clientcert="/etc/pki/tls/certs/ldapclient.pem"
clientkey="/etc/pki/tls/certs/ldapclientkey.pem"
suffix="dc=domain,dc=local"
usersdn="ou=People,${suffix}"
computersdn="ou=Computers,${suffix}"
groupsdn="ou=Group,${suffix}"
idmapdn="ou=Idmap,${suffix}"
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
scope="sub"
hash_encrypt="MD5"
crypt_salt_format="%s"
userLoginShell="/bin/bash"
userHome="/home/%U"
userHomeDirectoryMode="700"
userGecos="User"
defaultUserGid="513"
defaultComputerGid="515"
skeletonDir="/etc/skel"
defaultMaxPasswordAge="45"
userSmbHome="\\MAIN\%U"
userProfile="\\MAIN\profiles\%U"
userHomeDrive="H:"
mailDomain="domain.local"
with_smbpasswd="0"
with_slappasswd="0"


Рассмотрим директивы поподробнее. Первая это SID локальной системы. Что бы его получить следует запустить сервисы Samba:
#/etc/init.d/smb start
#/etc/init.d/nmb start


После чего выполнить команду
#net getlocalsid


которая в ответ выдаст SID локальной системы. Его следует скопировать в нижеследующую директиву:
SID="S-1-5-21-76483924-3502640226-4065347779"

Домен Samba кторый указали в конфиге smb.conf:
sambaDomain="DOMAIN"

Указываем адресс основного сервера LDAP и порт который слушает LDAP:
masterLDAP="127.0.0.1"
masterPort="389"
Не используем TLS:
ldapTLS="0"

требуем проверки сертификата сервера:
verify="require"
Пути до сертификатов сервера и клиента соотвественно:
cafile="/etc/pki/tls/certs/ldapserverca.pem"
clientcert="/etc/pki/tls/certs/ldapclient.pem"
clientkey="/etc/pki/tls/certs/ldapclientkey.pem"
Суфикс в формате LDAP:
suffix="dc=domain,dc=local"

основные DN сервера:
usersdn="ou=People,${suffix}"
computersdn="ou=Computers,${suffix}"
groupsdn="ou=Group,${suffix}"
idmapdn="ou=Idmap,${suffix}"

Указываем как брать свобные UNIX UID и GID для новых пользователей:
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"

Диапазон по умолчанию:
scope="sub"

Метод шифрования:
hash_encrypt="MD5"
Формат соли для шифрования:
crypt_salt_format="%s"

Параметры пользователей которые будут прописаны в LDAP.
Шелл для пользователя:
userLoginShell="/bin/bash"

Домашняя директория с точки зрения сервера:
userHome="/home/%U"

Права дуступа для домашних каталогов:
userHomeDirectoryMode="700"

Вспомогательное поле для пользовователей, содержашее дополнительную информацию:
userGecos="User"

Samba GID для пользователея по умолчанию:
defaultUserGid="513"

Samba GID для компютера по умолчанию:
defaultComputerGid="515"

Директория которая буде копироваться в профиль новых пользователей:
skeletonDir="/etc/skel"

Время жизни пароля по умолчанию в сутках:
defaultMaxPasswordAge="45"

Путь до домашней директории пользователя Samba:
userSmbHome="\\MAIN\%U"
Путь до профиля пользователя Samba:
userProfile="\\MAIN\profiles\%U"

Сетевой диск с домашней директорией подключаемы у клиента:
userHomeDrive="H:"

Почтовый домен:
mailDomain="mail.domain.local"

Позволяет не использовать smbpasswd и slappasswd предпочитая Crypt:: библиотеки:
with_smbpasswd="0"
with_smbpasswd="0"
Теперь следует запустить службу LDAP
#/etc/init.d/ldap start
Теперь с помощью скриптов из smbldap-tools заполняем базу данных:
#smbldap-populate

Будут внесены основные пользователи и группы. Остальных пользователей добавляем командой:
#smbldap-useradd -a -m -P user

После этого в можно заводить пользовательский машины в домен.

Может что то забыл. Буду дополнять и исправлять статью по мере нахождения ошибок.
Статья по настройке Very Secure FTP для анонимного и пользовательского доступа.

Настройка Vsftpd для анонимного и пользовательского входа.

Данная система настроена и работает на сервере с операционной системой CentOS release 4.7 (Final), используются пакеты из родного репозитария CentOS, без перекомпиляций. От сервера требовалось: Разрешить анонимный вход для пользователей только на чтение и только к определённому каталогу. Разрешить аутентифицированным пользователям доступ к определённым каталогам за запись. Основной конфигурационный файл находиться в каталоге /etc/vsftpd/ . я использовал следующие директивы:

ftpd_banner=Welcome to FTP server!
anonymous_enable=YES
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
user_config_dir=/etc/vsftpd_user_conf
chroot_local_user=YES
guest_enable=YES
guest_username=virtual
chown_username=virtual
pam_service_name=ftp
listen=YES

Разберём каждую

При входе на сервер клиенту будет высвечиваться сообщение указанное в
строке этой директивы:
ftpd_banner=Welcome to FTP server!

Разрешаем подключаться анонимным пользователям
anonymous_enable=YES

Разрешаем подключаться локальным пользователям. В нашем случае это пользователи в базе данных, в более общем случае это пользователи описанные в /etc/passwd
local_enable=YES

Запрещаем запись файлов для всех (для нужных пользователей запись
откроем в их конфигах)
write_enable=NO

Запрещаем загрузку файлов на сервер анонимным пользователям.
anon_upload_enable=NO

А также запрещаем создание каталогов и вообще изменение чего-бы то ни было для анонимных пользователей:
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

Что бы управлять доступами аутентифицированных пользователей создаём каталог в котором будут храниться конфиги для них:
#mkdir /etc/vsftpd_user_conf

и прописываем данный каталог в конфиг vsftpd
user_config_dir=/etc/vsftpd_user_conf

Что бы пользователь вbдел свой каталог как корневую директорию и не мог покинуть указанную директорию, должна быть указана следующая директива:
chroot_local_user=YES

Указываем что все аутентифицированные пользователи будут иметь права гостя на сервере
guest_enable=YES

Для создания гостевой учётной записи создадим учётную запись virtual со
следующими параметрами
virtual:x:32009:32009::/home/ftp:/sbin/nologin

и группу для него
virtual:x:32009:

и укажем эту учётную запись для гостевого входа:
guest_username=virtual
chown_username=virtual

указываем серверу как использовать pam аутентификацию, для этого указываем на файл ftp который находиться в каталоге конфигурации /etc/pam.d . О содержимом этого файла будет сказано ниже:
pam_service_name=ftp


Указываем что демон vsftpd запускался в одиночном режиме:
listen=YES


Далее можно запустить демон для проверки конфига и проверки  анонимного соединения

#/etc/init.d/vsftpd start

теперь из консоли наберем
#ftp our_hostname_or_ip

В ответ на приглашение типа:
Connected to our_hostname_or_ip (10.10.10.10).
220 Welcome to FTP server!
Name (our_hostname_or_ip:username):

введём логин
#anonymous

на запрос пароля жмем энтер, должно получиться следущее:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

Если все правильно то вход выполнен и на команду ls будет выведен список директорий в каталоге /var/ftp (Является домашним для автоматически создаваемого пользователя ftp)

Теперь создадим файл в котором списком будут следовать логины и пароли наших пользователей. После заполнения базы этот файл следует удалить или поставить на него права 0000.

Например файл logins.txt:

vasya
password
tanya
lond_passwod

и так далее.

Теперь сгенирируем db базу данных из нашего файла со списком, для этого выполним команду:

#db_load -T -t hash -f logins.txt /etc/vsftpd/vsftpd_login.db

в результате будет сгенерирована база с хешами из файла logins.txt.

Что бы научить pam работать с этой базой, в файле /etc/pam.d/ftp
сделаем ссылку на нашу базу:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

!Обратите внимание что файл с базой прописывается без расширения.

Теперь следует создать конфиги для наших пользователей в папке /etc/vsftpd_user_conf которая указана в директиве user_config_dir в основном конфиге.

Каждому пользователю соответствует свой файл с именем этого пользователя. Например для пользователя vasya следует создать файл vasya в котором описать настройки сервера именно для этого пользователя:

anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
local_root=/home/ftp/vasya
anon_other_write_enable=YES
anon_umask=0002

Что означает:
Путь до каталога пользователя. На этом каталоге должны стоять права на чтение и изминение для реального пользователя virtual которого описали выше:
local_root=/home/ftp/vasya

Разрешить пользователю удалять любые файлы в своем каталоге
anon_world_readable_only=NO

Разрешить пользователю запись и создание каталогов в своей директории
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES

Обратная маска для файлов создаваемых пользователем в восмеричном
формате.

После создания всех файлов для всех пользователей следует удалить или
закрыть доступ для файла logins.txt.

Рестартуем демон
/etc/init.d/vsftpd restart
На этом все настройки закончены.

4.8.09

Сразу. Пока не забыл

Давно написал несколько статей на AspLinux.net, думаю здесь их тоже следует опубликовать, также думаю следует их немного исправить дабы вернуть им актуальность. Итак статья:

squid-авторизация в AD с контролем доступа к сайтам

Настройки описанные в данной статье не претендуют на абсолютно верные. Данные настройки созданы после прочтения кучи факов и ман. Данная настройка работает на ASPLinux 11.2. Пакеты, используемые в данной конфигурации, не пересобирались, использовались пакеты, идущие на дистрибутиве. Использована сеть с адресным полем 10.12.0.0/255.255.255.0 В данной статье подразумевается что у вас уже должным образом настроены samba и winbind В данной конфигурации заблокирована почти вся графика для экономии трафика. Если данная функция не нужна, отключите соответствующие настройки в конфиге.

Рекомендую так же удалить стандартные HTML-файлы, отображающие ошибки, и сделать свои для наилучшего понимания пользователями.
Итак,

Конфигурирование Squid c авторизацией в AD

Squid - прокси-сервер. Основная конфигурация настраивается с помощью файла squid.conf, который в данном случае находится в каталоге /etc/squid/
В принципе, может работать и при дефолтном конфиге, но лучше настроить все руками.

Конфиг, используемый мною:

cache_mgr admin@domain.ru
visible_hostname my_proxy
log_mime_hdrs on
ignore_unknown_nameservers on
connect_timeout 120 seconds
half_closed_clients on

forwarded_for off
error_directory /etc/squid/error

hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin ?
no_cache deny QUERY
http_port 10.12.0.10:3128

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp

acl all src 0.0.0.0/0.0.0.0
acl localnet src 10.12.0.0/255.255.255.0

acl nobanners src 0/0
acl banners url_regex "/etc/squid/conf/banners.acl"

acl My_SNMP snmp_community squidmrtg
snmp_port 3401

acl ICQ_port port 5190
acl ICQ_server dstdomain login.icq.com login.oscar.aol.com ibucp-vip-d.blue.aol.com ibucp-vip-m.blue.aol.com bucp2-vip-m.blue.aol.com bucp-m08.blue.aol.com 205.188.153.98 205.188.153.97 64.12.161.153
http_access allow ICQ_port localnet
http_access allow ICQ_server localnet

acl Jabber_port port 5222
http_access allow Jabber_port localnet

acl CONNECT method CONNECT

acl goodusers proxy_auth "/etc/squid/conf/good"
http_access deny goodusers banners
http_access allow goodusers

acl free_image proxy_auth "/etc/squid/conf/free_image"

acl aolaccess dst "/etc/squid/conf/host.acl"

acl banusers proxy_auth "/etc/squid/conf/user-deny"
acl nu proxy_auth "/etc/squid/conf/naglyi_user"

http_access allow aolaccess banusers localnet
http_access deny banusers localnet

acl squid_block_badlang url_regex -i "/etc/squid/squidblock/badlang.block.txt"
acl squid_unblock_badlang url_regex -i "/etc/squid/squidblock/badlang.unblock.txt"
acl squid_block_entertain url_regex -i "/etc/squid/squidblock/entertain.block.txt"
acl squid_unblock_entertain url_regex -i "/etc/squid/squidblock/entertain.unblock.txt"
acl squid_block_games url_regex -i "/etc/squid/squidblock/games.block.txt"
acl squid_unblock_games url_regex -i "/etc/squid/squidblock/games.unblock.txt"
acl squid_block_pirate url_regex -i "/etc/squid/squidblock/pirate.block.txt"
acl squid_block_mp3 url_regex -i "/etc/squid/squidblock/mp3.block.txt"
acl squid_unblock_pirate url_regex -i "/etc/squid/squidblock/pirate.unblock.txt"
acl squid_block_porn url_regex -i "/etc/squid/squidblock/porn.block.txt"
acl squid_unblock_porn url_regex -i "/etc/squid/squidblock/porn.unblock.txt"
acl squid_block_video url_regex -i "/etc/squid/squidblock/video.block.txt"
acl squid_block_reklama url_regex -i "/etc/squid/squidblock/reklama.block.txt"
acl squid_unblock url_regex -i "/etc/squid/squidblock/unblock.txt"
acl squid_block url_regex -i "/etc/squid/squidblock/block.txt"
acl squid_nu_block url_regex -i "/etc/squid/squidblock/nu_block"

http_access deny nu squid_nu_block all

http_access deny squid_block all
http_access allow squid_unblock localnet

http_access deny squid_block_badlang all
http_access deny squid_block_entertain all
http_access deny squid_block_games all
http_access deny squid_block_mp3 all
http_access deny squid_block_pirate all
http_access deny squid_block_porn all
http_access deny squid_block_video all
http_access deny squid_block_reklama all

http_access allow squid_unblock_badlang localnet
http_access allow squid_unblock_games localnet
http_access allow squid_unblock_pirate localnet

acl bigfiles url_regex -i "/etc/squid/conf/bigfile.txt"
acl image url_regex -i "/etc/squid/conf/image.txt"
acl free_image_site url_regex -i "/etc/squid/conf/free_image_site"

http_access allow image free_image localnet
http_access allow image free_image_site localnet
http_access deny bigfiles all

http_access deny nobanners banners


acl myusers proxy_auth REQUIRED
http_access allow myusers

refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320


acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8

snmp_access allow localhost
snmp_access deny all

acl SSL_ports port 443 563

acl Safe_ports port 80
acl Safe_ports port 21 20
acl Safe_ports port 443 563
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777

http_access allow manager localhost
http_access deny manager

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny to_localhost

http_access allow localnet
http_access allow localhost
http_reply_access allow all
icp_access allow all

coredump_dir /var/spool/squid
http_access deny all

maximum_object_size 10 MB
cache_mem 20 MB


Рассмотрим некоторые параметры.

Имя вашего хоста которое будет видно для скриптов удалённых сайтов:
visible_hostname my_proxy

Опция позволяющая выцепить все заголовки отправляемых пользователями, не включайте ее если эта информация вам не нужна:

log_mime_hdrs off

Данная опция позволяет предотвратить получение ответа пользователем не с того сервера на который он отправлял запрос:
ignore_unknown_nameservers off

Время ожидания ответа
от сервера, после окончания которого пользователю выведется соответствующее сообщение:
connect_timeout 120 seconds

Закрытие сокета для клиентов которые отключились раньше чем получили ответ:
half_closed_clients on

Скрыть IP внутренней локалки для внешних сайтов:

forwarded_for off

Каталог с файлами которые будет высвечиваться при ошибках. Я изменил файлы умолчательные файлы на свои и что бы они не затирались при обновлении пакета, я поместил их в не стандартный каталог:

error_directory /etc/squid/error

Емаил администратора, который будет высвечиваться на окне ошибки у пользователя.

cache_mgr admin@domai.ru

Порт и адрес, на которых будет работать squid для http:

http_port 10.12.0.12:3128

Аутефикация юзеров в AD контроллера, используется утилита входящая в в пакет samba-winbind:

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp

Зададим имена используемых подсетей

Все адреса интернет я обозначил all:
acl all src 0.0.0.0/0.0.0.0

Локалка это localnet:
acl localnet src 10.12.0.0/255.255.255.0 - ваша локалка

Задается блокирование баннеров:

в файле banners.acl содержится распространённые адреса баннеров найден на www.opennet.ru.
acl nobanners src 0/0
acl banners url_regex "/etc/squid/conf/banners.acl"

Для аськи нужны следующие правила:


acl ICQ_port port 5190
http_access allow ICQ_port localnet

По аналогии можно составить правила для любого клиента:


acl Jabber_port port 5222
http_access allow Jabber_port localnet

Этот правило описывает метод соединения клиентов к серверам аськи и других клиентов быстрых сообщений:
acl CONNECT method CONNECT

Ниже идут списки доступов (acl)
.
Что бы не лазить по конфигу каждый раз когда списки изменяются решил занести их в отдельные файлы, представляют собой просто списки логинов пользователей например:

vasya
director
lawyer

Для того что бы описать alc для сайтов также созданы файлы со списком доменов или IP адресов например:

hostname
host.ru
host.domain.com
187.25.45.15

Пользователи, имеющие доступ ко всем ресурсам инета, прописал в файле good и указал соответствующую группу для них
acl goodusers proxy_auth "/etc/squid/conf/good"
http_access deny goodusers banners
http_access allow goodusers

Я использовал схему урезающую полностью всю графику из веб страниц, некоторым пользователям было сделано исключение, для этого нужно прописать их в соответственную группу в файле
free_image:

acl free_image proxy_auth "/etc/squid/conf/free_image"

Для сайтов одобренных администрацией :) был открыт доступ для всех пользователей (даже тех кто превысил свой лимит трафика). Для этого создан файл со списком логинов
host.acl:
acl aolaccess dst "/etc/squid/conf/host.acl"

Файл содержащий список пользователей которые превысили месячный трафик. Я использовал одну из систем которая обрабатывает логи squid для подсчёта трафика и занесения списка пользователей в этот файл.

acl banusers proxy_auth "/etc/squid/conf/user-deny"

Здесь пользователи, которые окончательно потеряли совесть, им открыт доступ только к сайтам, описаным в host.acl

acl nu proxy_auth "/etc/squid/conf/naglyi_user"

Правила разрешающие доступ к одобренным сайтам всем пользователям:

http_access allow aolaccess banusers localnet

Правила запрещающие доступ
забаненых пользователей:
http_access deny banusers localnet

Списки сайтов, которые юзеры будут смотреть только дома, входили в комплект пакета:

acl squid_block_badlang url_regex -i "/etc/squid/squidblock/badlang.block.txt"
acl squid_unblock_badlang url_regex -i "/etc/squid/squidblock/badlang.unblock.txt"
acl squid_block_entertain url_regex -i "/etc/squid/squidblock/entertain.block.txt"
acl squid_unblock_entertain url_regex -i "/etc/squid/squidblock/entertain.unblock.txt"
acl squid_block_games url_regex -i "/etc/squid/squidblock/games.block.txt"
acl squid_unblock_games url_regex -i "/etc/squid/squidblock/games.unblock.txt"
acl squid_block_pirate url_regex -i "/etc/squid/squidblock/pirate.block.txt"
acl squid_block_mp3 url_regex -i "/etc/squid/squidblock/mp3.block.txt"
acl squid_unblock_pirate url_regex -i "/etc/squid/squidblock/pirate.unblock.txt"
acl squid_block_porn url_regex -i "/etc/squid/squidblock/porn.block.txt"
acl squid_unblock_porn url_regex -i "/etc/squid/squidblock/porn.unblock.txt"
acl squid_block_video url_regex -i "/etc/squid/squidblock/video.block.txt"
acl squid_block_reklama url_regex -i "/etc/squid/squidblock/reklama.block.txt"

Файлы со списакими того что прошло фильтр но не должно было пройти. Для ручного добавления создал эти правила:
acl squid_unblock url_regex -i "/etc/squid/squidblock/unblock.txt" - для разблокирования
acl squid_block url_regex -i "/etc/squid/squidblock/block.txt" - и для заблокирования


Ну и сами правила блокирующие доступы к спискам в файлах выше (помните что очередность правил играет роль):
http_access deny squid_block all
http_access allow squid_unblock

http_access deny squid_block_badlang all
http_access deny squid_block_entertain all
http_access deny squid_block_games all
http_access deny squid_block_mp3 all
http_access deny squid_block_pirate all
http_access deny squid_block_porn all
http_access deny squid_block_video all
http_access deny squid_block_reklama all

http_access allow squid_unblock_badlang localnet
http_access allow squid_unblock_games localnet
http_access allow squid_unblock_pirate localnet


Здесь описывается, какие файлы нужно блокировать по расширениям.

acl bigfiles url_regex -i "/etc/squid/conf/bigfile.txt"

Отдельно заводим список расширений для картинок, что бы иметь возможность разрешать к ним доступ и в то же время запрещать доступ к другим заблокированным расширениям:

acl image url_regex -i "/etc/squid/conf/image.txt"

Список сайтов с не заблокированным содержимым но при этом эти сайты недоступны после отключения за превышение трафика.
acl free_image_site url_regex -i "/etc/squid/conf/free_image_site"

Правило разрешающее указанным
пользователям графику:
http_access allow image free_image localnet

И правило разрешающее графику на указын сайтах:

http_access allow image free_image_site localnet

Правило блокирующее баннеры на сайтах

http_access deny nobanners banners

Заключающие правила, разрешающие всему оставшемуся пройти к пользователю:

acl myusers proxy_auth REQUIRED


Списки портов, взяты из дефолта:

acl SSL_ports port 443 563

acl Safe_ports port 80
acl Safe_ports port 21 20
acl Safe_ports port 443 563
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777

И правила для разрешения соединений на них:
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny to_localhost

http_access allow localnet
http_access allow localhost
http_reply_access allow all

Директория, где находиться ядро squid:

coredump_dir /var/spool/squid

Блокирование всего, что не подошло ни под одно из правил:
http_access deny all

Задание максимального объема обектов в кеше:

maximum_object_size 10 MB

Общий обем кеша:

cache_mem 45 MB

На этом кофигурация squid закончена, можно стартовать службу squid командой:


/etc/rc.d/init.d/squid start

Если осуществляется какое-либо изменение в файлах конфигурации или правил, то чтобы не перезагружать squid, используйте команду:

squid -k reconfigure

На этом статью заканчиваю, всем спасибо за внимание


Моя статья на Asplinux.net

Популярные сообщения