Обновление Samba 4.5.3 с поддержкой AD

Обновил samba до версии 4.5.3. Дело в том, что я раньше собирал этот пакет как samba4, но вышло обновление в Centos 7 где samba4 заобсолетили и обновили до 4.4.x причем собрана она у них без поддержки AD. Такое обновление мне все сломало, пришлось спешно обновляться с 4.2 до 4.5. благо все прошло без особых проблем. Только клиенты на база Windows XP SP3 перестали авторизовываться, но это вылечилось добавлением в конфиг одной строчки:

[global]

ntlm auth = yes

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

# samba-tool dbcheck

ext4 file-based шифрование

Начиная с ядра 4.1 добавлена опция CONFIG_EXT4_ENCRYPTION. Эта штука включает реализацию шифрования в драйвере ext4. С его помощью можно шифровать отдельные части файловой системы, например отдельно взятую директорию.
Так вышло что я использую на десктопе ROSA Fresh, однако последний релиз этой системы хоть и имеет версию ядра выше 4.1 а вот инструментарий для такого функционала отсутствует. Необходимые утилиты появились лишь в e2fsprogs-1.43. Но не беда. На ABF я нашел свежую сборку R9 (это пока даже не альфа) и там как раз ядро v4.8.7 и e2fsprogs-1.43.3, т.е. все необходимое уже есть. Качаем, ставим в виртуалку и пробуем.
Я ставил опыты на файлововой системе, смонтированной в /home, устройство /dev/sda6.
1. Сначала включим функционал (не включайте это на загрузочном разделе. GRUB это не поймет и не сможет загрузить систему)

sudo tune2fs -O encrypt /dev/sda6

2. Теперь создадим файлик с солью:

echo 0x$(head -c 16 /dev/urandom | xxd -p)>~/.cryptoSalt

3. Создадим директорию которую будем шифровать:

mkdir ~/crypted

4. Ну и применим к ней шифрование, ключ набиваем с клавиатуры:

/usr/sbin/e4crypt add_key -S `cat ~/.cryptoSalt` ~/crypted

Теперь в директории ~/crypted можно создавать папочки и файлики как обычно.
После перезагрузки Вы не сможете прочитать содержимое. Точнее сможете видеть, что там есть файлы и директории, но их имена будут искажены, а содержимое файлов и вовсе не читается. Чтобы снова видеть все в нормальном виде, нужно снова выполнить

/usr/sbin/e4crypt add_key -S `cat ~/.cryptoSalt` ~/crypted

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

Обновление PostgreSQL 9.6, 9.5 для 1C

Собрал обновления PostgreSQL 9.6.1, 9.5.5 для 1C. Для 9.4 больше собирать не буду, потому как сам их не использую. Если кому нужно — пишите.
Все сборки делаю только под Linux RH-based 6.x и 7.x, x86 и x86_64.
Ссылки на репозитории:
6.x x86_64
6.x x86
7.x x86_64
7.x x86

1C и временные файлы

diskio
Вот так меняется нагрузка на диск, если на сервере с Centos 7 на котором работает 1C и PostgreSQL выполнить:

systemctl enable tmp.mount

и перезагрузить. А все потому, что рабочий процесс 1С активно что то пишет в /tmp периодически создавая и удаляя файлы вида /tmp/v8*

# ls -la /tmp/v8*
-rw-r----- 1 usr1cv8 grp1cv8    0 окт 25 09:25 /tmp/v8l8JHMkf
-rw-r----- 1 usr1cv8 grp1cv8    0 окт 25 09:23 /tmp/v8lEjNyic
-rw-r----- 1 usr1cv8 grp1cv8    0 окт 25 09:03 /tmp/v8lP1GUax
-rw-r----- 1 usr1cv8 grp1cv8    0 окт 25 09:25 /tmp/v8lSHrEO6
-rw-r----- 1 usr1cv8 grp1cv8 1019 окт 25 08:58 /tmp/v8_P1GUax_1.tmp
-rw-r----- 1 usr1cv8 grp1cv8 3621 окт 25 08:58 /tmp/v8_P1GUax_2.tmp
-rw-r----- 1 usr1cv8 grp1cv8 6385 окт 25 08:58 /tmp/v8_P1GUax_3.tmp

PostgreSQL 9.6.0 & 1C

Буквально вчера вышел Postgres 9.6, я сегодня я уже тестирую его в связке с 1C.
Пакеты собрал для Centos6 и Centos7. Патч модифицировал сам и чисто механически, т.к. не являюсь программистом.
В принципе у 1C ни каких претензий не обнаружилось пока. Вроде работает, но по боевому я пока не рискую это ставить.

Asterisk в RPM репозитории

asteriskВстала задачка развернуть SIP-сервер для нужд маленького офиса. Гуглегие показало большое количество HOWTO по сборке Asterisk из исходников, да еще и для RH 6.x. Мне такой подход к развертыванию сервисов решительно не нравится, по этому решил я сделать репозиторий с пакетами да еще и под 7.x
Итак, устанавливаем, например Centos 7.2 в минимальной конфигурации и подключаем репозиторий:

cat << EOF > /etc/yum.repos.d/asterisk.repo
[Asterisk]
name=Asterisk-\$releasever
baseurl=http://abf-downloads.rosalinux.ru/asterisk_personal/repository/rosa-server72/\$basearch/main/release/
gpgcheck=0
enabled=1
EOF

И устанавливаем вполне себе штатно:

# yum install asterisk asterisk-configs

В качестве бонуса, так же в пакеты, я собрал русскую озвучку:

asterisk-sounds-core-ru-alaw.noarch : Asterisk core sounds - ru - alaw.
asterisk-sounds-core-ru-g722.noarch : Asterisk core sounds - ru - g722.
asterisk-sounds-core-ru-gsm.noarch : Asterisk core sounds - ru - gsm.
asterisk-sounds-core-ru-ulaw.noarch : Asterisk core sounds - ru - ulaw.

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

1C & PostgreSQL 9.5

Я тут, на на просторах интернета, накопал патчи для Postgres 9.5 для работы с 1C. Собрал пакетики, теперь тестируем. Хочу обратить внимание, что патчики эти не официальные и их использовать можно на свой страх и риск.

Пакетики я собрал как для RH6 так и для RH7-based.

Вот так по простому подключаем репозиторий, например, для Centos 6:

cat << EOF > /etc/yum.repos.d/1c.repo
[1c_personal]
name=1C Personal
baseurl=http://abf-downloads.abf.io/1c_personal/repository/rosa-server66/x86_64/main/release/
enabled=1
gpgcheck=0
EOF

Устанавливаем

# yum install postgresql95-server

Ну а дальше, все как обычно:

# /etc/init.d/postgresql-9.5 initdb
# /etc/init.d/postgresql-9.5 start

Если мы ранее использовали postgresql 9.4 на этой же машине, то можно выполнить обновление базы:

# /etc/init.d/postgresql-9.4 stop
# /etc/init.d/postgresql-9.5 stop
# sudo su - postgres
$ /usr/pgsql-9.5/bin/pg_upgrade -b /usr/pgsql-9.4/bin/ -B /usr/pgsql-9.5/bin/ --old-datadir=/var/lib/pgsql/9.4/data --new-datadir=/var/lib/pgsql/9.5/data
$ logout
# /etc/init.d/postgresql-9.5 start
# /var/lib/pgsql/analyze_new_cluster.sh

После таких манипуляций 1С-Server работает со своими базами в PostgreSQL только уже на версии 9.5. Со стороны пользователей 1С видимых регрессов пока не заметил.

Свое собственноe облако restfs

Я тут, тихим сапом, взялся осваивать c++. В результате моих изысканий родилось что то чуть более чем «Hello world». В качестве задачки я взялся за реализацию некоего REST API для облачного хранения файликов.
Первый прототип выложил на GitHub restfs.
Умеет оно совсем не много.
— создавать пользователей
— логиниться под этим пользователем (получать сессионный токен)
— создавать и просматривать директории
— заливать и скачивать файлики.

Работает как fcgi daemon, чтобы легко прятаться за nginx. Все это работает в потоках и настраивается простым ini файлом.
Файлики хранит в Elliptics on Yandex а информацию о них хранит в PostgreSQL.

Тут описание в формате RAML о том, как это использовать.

Для более или менее эксплуатации это сыро сыро:
— необходимы методы для изменения и удаления фалов и папок, вызовы для шаринга и блокировок
— необходимо написать кучу документации
— необходимо придумать как для этого написать юнит-тесты и написать их
— необходимо сделать рефакторинг дизайна классов, потому как даже мне становится грустно, когда я на них смотрю.

И это боюсь только начало…

Postgres + GSSAPI

secure-postgresql-deployment-17-728Чисто ради интереса, решил попробовать настроить аутентификацию при подключению к PostgreSQL из ActiveDirectory развернутом на базе Samba 4.3. В общем, оказалось ничего сложного.

1. Заводим обычного пользователя в AD, под которым наш сервер PostgreSQL будет обращаться в AD, и выгружаем keytab следующим образом (из винды, которая в домене):

C:\>ktpass -princ postgresql/srv.krb.local@KRB.LOCAL -mapuser pguser -pass pgpass -out pgpass.keytab

где postgresql — имя службы (обязательно именно такое для PostgreSQL),
srv.krb.local — FQDN сервера, на котором работает PostgreSQL,
KRB.LOCAL — REALM нашего домена,
pguser — пользователь, которого мы завели в домене,
pgpass — пароль этого пользователя в домене,
pgpass.keytab — имя файла куда выгружаем все эти данные.

2. На сервере srv.krb.local необходимо установить и настроить Kerberos клиента. Если этот сервер был ранее введен в домен, то все это у Вас уже настроено. В противном случае необходимо установить пакет krb5-workstation (у Вас же там Centos, правда?) и привести файл /etc/krb5.conf примерно к такому виду:

[libdefaults]
        default_realm = KRB.LOCAL
        dns_lookup_realm = false
        dns_lookup_kdc = true

а в /etc/resolv.conf nameserver должен указывать на DNS сервер, который обслуживает Ваш AD

3. Запишем файл pgpass.keytab куда-нибудь на сервер srv.krb.local, где его сможет прочитать PostgreSQL. Я например его записал в /var/lib/pgsql/krb/pgpass.keytab и выставил права:

$ chown postgres:postgres /var/lib/pgsql/krb/pgpass.keytab
$ chmod 600 /var/lib/pgsql/krb/pgpass.keytab

4. В Файле postgresql.conf задаем параметры:

listen_addresses = '*'
krb_server_keyfile = '/var/lib/pgsql/krb/pgpass.keytab'

а в файле pg_hba.conf пишем:

host  all all 0.0.0.0/0 gss include_realm=0 krb_realm=KRB.LOCAL

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

5. Перечитываем настройки PostgreSQL:

# service postgresql-9.4 reload

6. Пользователи с именами аналогичными тем, что в домене должены обязательно присутствовать в PostgreSQL или же Вам потребуется делать map, используя файл pg_ident.conf, но я на этом останавливаться не буду, а просто создам пользователя в PostgreSQL как в домене, например, administrator.

postgres=# CREATE ROLE administrator LOGIN ;

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

$ whoami
administrator
 
$ klist 
Ticket cache: FILE:/tmp/krb5cc_500
Default principal: administrator@KRB.LOCAL
 
Valid starting     Expires            Service principal
03/02/16 18:09:22  03/03/16 04:09:22  krbtgt/KRB.LOCAL@KRB.LOCAL
        renew until 03/03/16 18:09:16
 
$ psql -h srv.krb.local postgres
psql (9.4.6)
Введите "help", чтобы получить справку.
 
postgres=> \conninfo
Вы подключены к базе данных "postgres" как пользователь "administrator" (сервер "srv.krb.local", порт "5432").
postgres=>

В общем это все.