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

среда, 27 мая 2020 г.

Пароли в SHA256 в OpenLDAP

Понадобилось нам поднять для определенных целей OpenLDAP. С условием, что пароли, вернее хэши наших пользователей, мы будем брать из уже существующей SQL-базы. Из входящих данных у нас был SQL-запрос, вызвращающий пользователей с хэшами и утверждение нашего DBA, что пароли хешированы в SHA256.

Получаю хэш пользователя из базы, проверяю через
echo -n "test" | sha256sum
9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08  -
Строка совпадает. Быстро ваяем скрипт, который заполняет нужные поля в LDAP, в том числе вставляет эту строку в качестве пароля.

Пробуем авторизоваться:
ldapwhoami -vvv -h 127.0.0.1 -p 389 -D "cn=Иванов Иван,ou=staff,dc=example,dc=com" -W
Enter LDAP Password:                                                                                             
ldap_bind: Invalid credentials (49)
Что-то не работает.

Google подтверждает, что OpenLDAP умеет в SHA256, однако разные статьи говорят, что для этого надо либо использовать сторонний модуль slapd-sha2.so, либо воспользоваться услугами самой операционной системы, ведь пароли в Linux хранятся в SHA256/SHA512.

Выбираю второй вариант. Пишут, что надо добавить префикс {CRYPT}. Чтобы указать, что это хэш sha256, делаю предположение, что надо добавить $5$:
cat ./chpass.ldif 
dn: cn=Иванов Иван,ou=staff,dc=example,dc=com
changetype: modify
replace: userPassword
userPassword: {CRYPT}$5$9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

Заливаю изменение, проверяю...

ldap_bind: Invalid credentials (49)

Нахожу в OpenLDAP FAQ:
Just to state the obvious, SHA-256 and SHA-512 based "glibc" crypt algorithms $5$ and $6$ are totally different from plain (or salted) "{SHA256}" algorithms. The libc crypt variants do a lot of nonsensical transpositions to increase the computational load.

Черт, пишут что алгоритмы различаются.

Чтобы удостоверится, вставляем свой хэш из /etc/shadow в качестве пароля с префиксом {CRYPT}$6$.

Работает, конечно.

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

Параллельно в гугле находим, что идентичный команде sha256sum хэш даёт команда:
echo -n "test" | openssl dgst -sha256
(stdin)= 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
Да и онлайн сервис по распознаванию хэшей подтверждает, что это действительно sha256.
Тогда как на результат команды:
openssl passwd -5
говорит Unknown.

Ладно, читаем мануалы дальше. Различие в "соли". Passwd в Linux и в openssl делают пароль с солью, а sha256sum, понятное дело, без. И как раз-таки в OpenLDAP это должно работать, при использовании префикса {SHA256}

Видимо надо искать модуль. И находим информацию, что в актуальных версиях OpenLDAP модуль уже присутствует в системе. А файл slapd-sha2.so мы не могли найти потому, что он называется по-другому. Сотни статей по openldap+sha256 уже не актуальны, кто бы мог подумать :)

Для подтверждения этого выкачиваю исходники openldap с гита, нахожу модуль и в его Makefile'е вижу сему подтверждение. Файл на выходе действительно называется pw-sha2.la / pw-sha2.so.

Пробую просто добавить префикс {SHA256}:
cat ./chpass.ldif 
dn: cn=Иванов Иван,ou=staff,dc=example,dc=com
changetype: modify
replace: userPassword
userPassword: {SHA256}9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

Заливаю, пробую, не работает.

Может модуль не подгружен?
Конфиг OpenLDAP сейчас хранится в самом OpenLDAP, так что смотрим:

# slapcat -b cn=config -a "(objectClass=olcModuleList)"
...
olcModuleLoad: {1}pw-sha2.la
...
И видим, что модуль загружен.

Кстати, у нас уже есть выкачанные исходники OpenLDAP. Без особой надежды лезу в них поковырятся, мож пойму, что ему надо. В readme модуля sha2 до сих пор сказано, что надо собрать slapd-sha2.so, скопировать его в нужное место и подключить через конфиг slapd.conf (т.е. инструкция в исходниках сама устарела, ведь и библиотека называется по-другому, и конфиг OpanLDAP уж много лет как в самом OpenLDAP).

Но в том же readme ниже нахожу команду для создания хэша для тестирования:
$ echo -n "secret" | openssl dgst -sha256 -binary | openssl enc -base64
K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=
Что ж, мы были близки. Пароль надо завернуть в base64. И это при том, что в LDAP оно еще раз заворачивается в base64. Но не строчное его представление, а "бинарное".

Делаю base64 над своим паролем, вставляю с префиксом {SHA256}:

# echo -n "test" | openssl dgst -sha256 -binary | base64
n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=

# cat ./chpass.ldif 
dn: cn=Иванов Иван,ou=staff,dc=example,dc=com
changetype: modify
replace: userPassword
userPassword: {SHA256}n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=

Заливаю, проверяю, работает!

Result: Success (0)

В скрипте это можно сделать так:
echo -n "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08" | xxd -r -p | base64

четверг, 5 июня 2014 г.

Сервер vsftpd с аутентификацией через radius

Настройка сервера VSFTPD с аутентификацией через Radius в Debian:
# aptitude install vsftpd libpam-radius-auth
# cat /etc/pam.d/vsftpd
# Standard behaviour for ftpd(8).

auth    sufficient      pam_radius_auth.so client_id=openvpn
account sufficient      pam_radius_auth.so client_id=openvpn
@include common-account
@include common-session
@include common-auth
auth    required        pam_shells.so
Client_id -- это атрибут Nas-identifier в радиус-запросе.
# cat /etc/pam_radius_auth.conf
# server[:port]  shared_secret      timeout (s)
10.100.4.100    mymegasecretkey       3
# cat /etc/vsftpd.conf
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=NO
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
nopriv_user=ftp
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
user_sub_token=$USER
guest_username=ftp
guest_enable=YES

среда, 4 июня 2014 г.

Сервер OpenVPN с аутентификацией через Radius

Настройка сервера OpenVPN с аутентификацией через Radius в Debian:
# aptitude install openvpn openvpn-auth-radius
# cat /etc/openvpn/radiusplugin.cnf
NAS-Identifier=openvpn
Service-Type=2
Framed-Protocol=1
NAS-Port-Type=5
NAS-IP-Address=10.100.10.85
OpenVPNConfig=/etc/openvpn/server.conf
subnet=255.255.255.0
overwriteccfiles=true
server
{
        # The UDP port for radius accounting.
        acctport=1815
        # The UDP port for radius authentication.
        authport=1812
        # The name or ip address of the radius server.
        name=10.100.4.100
        # How many times should the plugin send the if there is no response?
        retry=1
        # How long should the plugin wait for a response?
        wait=1
        # The shared secret.
        sharedsecret=mymegasecretkey
}
# cat /etc/openvpn/server.conf
local my_public_ip
port 443
proto tcp
dev tun
tun-mtu 1500
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key 
dh /etc/openvpn/keys/dh1024.pem
server 10.8.0.0 255.255.255.0
client-cert-not-required
username-as-common-name
ifconfig-pool-persist ipp.txt
push "route 10.100.0.0 255.255.0.0"
push "route 10.102.0.0 255.255.0.0"
keepalive 10 120
comp-lzo
persist-key
persist-tun
status /var/log/openvpn/status.log 1
plugin /usr/lib/openvpn/radiusplugin.so
log-append  /var/log/openvpn/openvpn.log
verb 3

понедельник, 30 января 2012 г.

Шифрование домашнего каталога

Миграция на шифрованный раздел.

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

Было:
+----------------------------------------------------+
|                  Disk /dev/sda                     |
| +-------+---------------------------------------+  |
| | sda1  | sda2     lvm                          |  |
| |       | +------+------+------+--------------+ |  |
| |  /    | | /usr | /var | swap | /home        | |  |
| |       | +------+------+------+--------------+ |  |
| +-------+---------------------------------------+  |
|                                                    |
+----------------------------------------------------+

Стало:
+----------------------------------------------------+
|                  Disk /dev/sda                     |
| +-------+---------------------------------------+  |
| | sda1  | sda2     lvm                          |  |
| |       | +------+------+------+--------------+ |  |
| |  /    | | /usr | /var | swap | luks         | |  |
| |       | |      |      |      | +----------+ | |  |
| |       | |      |      |      | | /home    | | |  |
| |       | |      |      |      | +----------+ | |  |
| |       | +------+------+------+--------------+ |  |
| +-------+---------------------------------------+  |
|                                                    |
+----------------------------------------------------+
* Кстати, схема-то упрощенная. У lvm не обозначена еще volume group :) *

Для этого мне понадобилось:

Включить в ядре опции:
 Cryptographic API -> SHA224 and SHA256 digest algorithm (CONFIG_CRYPTO_SHA256)
и
Device Drivers -> 
Multiple devices driver support (RAID and LVM) ->
Device mapper support ->
Crypt target support (CONFIG_DM_CRYPT)
Далее я пересобрал ядро и установил пакет cryptosetup.

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

На домашнем разделе занято всего ~50 гигабайт.

Значит уменьшаю home до 60 гигабайт, создаю новый том lvm и шифрую его:
# lvresize -r -L60G /dev/mapper/vg-home

# lvcreate -n hm -l 51734 vg

# cryptosetup luksFormat /dev/mapper/vg-hm
Пароль в последнем шаге должен совпадать с паролем пользователя, т.к. пароль автоматически передается во время входа в систему.

Создаю на новом домашнем разделе файловую систему и переношу туда данные со старого раздела
# cryptsetup luksOpen /dev/mapper/vg-hm secret
# mkfs.ext4 /dev/mapper/secret
# mkdir /mnt/temp
# mount /dev/mapper/vg-hm /mnt/temp
# cp -r /home/* /mnt/temp
# umount /mnt/temp
Теперь устанавливаю pam_mount. У этого пакета необходимо включить USE-флаг crypt.

Добавляю в /etc/pam.d/system-auth строчки (выделены):
auth            required        pam_env.so 
auth            required        pam_unix.so try_first_pass likeauth nullok 
auth            optional        pam_permit.so
auth            optional        pam_mount.so

account         required        pam_unix.so 
account         optional        pam_permit.so

password        required        pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3 
password        required        pam_unix.so try_first_pass use_authtok nullok sha512 shadow 
password        optional        pam_permit.so
  
session         required        pam_limits.so 
session         required        pam_env.so 
session         required        pam_unix.so 
session         optional        pam_permit.so
session         optional        pam_mount.so
А в /etc/security/pam_mount.conf.xml следующее:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
<!--
        See pam_mount.conf(5) for a description.
-->

<pam_mount>

                <!-- debug should come before everything else,
                since this file is still processed in a single pass
                from top-to-bottom -->

<debug enable="0" />

                <!-- Volume definitions -->
<volume user="yuri" path="/dev/mapper/vg-hm" mountpoint="~" cipher="aes-cbc-essiv:sha256" />

                <!-- pam_mount parameters: General tunables -->

<!--
<luserconf name=".pam_mount.conf.xml" />
-->

<!-- Note that commenting out mntoptions will give you the defaults.
     You will need to explicitly initialize it with the empty string
     to reset the defaults to nothing. -->
<mntoptions allow="nosuid,nodev,loop,encryption,nonempty,allow_root,allow_other" />
<!--
<mntoptions deny="suid,dev" />
<mntoptions allow="*" />
<mntoptions deny="*" />
-->
<mntoptions require="nosuid,nodev" />

<!-- requires ofl from hxtools to be present -->
<logout wait="0" hup="0" term="0" kill="0" />


                <!-- pam_mount parameters: Volume-related -->

<mkmountpoint enable="1" remove="true" />

</pam_mount>
И не забыть убрать строчку с home из /etc/fstab.

вторник, 8 февраля 2011 г.

Шифрованный образ раздела

Изредка бывает необходимо зашифровать не целый раздел, а отдельный образ раздела, хранящийся в виде файла. Плюсы в таком подходе - лёгкость переноса образа на другую машину, отсутствие необходимости двигать разделы и т.д.

Использовать будем старый добрый LUKS, с той небольшой разницей, что работа будет вестись с loop-устройством.
Создали сам образ из псевдослучайных значений:
# dd if=/dev/urandom of=/mnt/250/image.img bs=4M count=10
Создаём ассоциацию образа и loop-устройства:
# losetup /dev/loop0 /mnt/250/image.img
Вместо непосредственно указания loop-устройства можно поставить опцию -f, что значит "найти незанятое устройство".
А дальше работа с /dev/loop0 ничем не отличается от обычной работы cryptosetup:
# cryptosetup luksFormat /dev/loop0
# cryptosetup luksOpen /dev/loop0 secret
# mkfs.ext3 /dev/mapper/secret
# mount /dev/mapper/secret /mnt/secret
Отключение в таком порядке:
# umount /mnt/secret
# cryptosetup luksClose secret
# losetup -d /dev/loop0

вторник, 7 декабря 2010 г.

Создание локального сервера обновлений антивируса Comodo

UPD: доступна новая версия скрипта.

Небольшая фирма использует в своей работе исключительно лицензионные программы. По возможности бесплатные. Поскольку в качестве ОС на рабочих машинах используется Windows, пришлось искать антивирус. Выбор был остановлен на Comodo Internet Secutity, поскольку допускает использование бесплатной версии даже на предприятиях, о чем прямо сказано в EULA:
2.1. Comodo Security Software. Comodo Internet Security (CIS) may be used royalty-free for both commercial and personal use. CIS includes the Comodo Firewall and Antivirus products. No technical or customer support is provided for CIS separate from the Products described in section 2.5. Installation of CIS may include installation of additional Products. Use of these Products may be disabled until you pay for the Products.

Использование бесплатной версии имеет несколько минусов - отсутствие централизованного развертывания/управления/обновления. Каждый экземпляр антивируса выкачивает обновления самостоятельно. Было решено создать локальное зеркало обновлений антивируса.

пятница, 13 августа 2010 г.

Предоставление общего доступа к приводу DVD через Samba

Казалось бы, это элементарная операция, не требующая какой-либо инструкции. Но в Fedora 13 (да и в других свежих дистрибутивах) это не так просто. Вместо HAL монтированием устройств теперь занимается udisks, ранее известный как DeviceKit-disks.

вторник, 29 июня 2010 г.

Обратный туннель SSH

Памятка о том, как поднять обратный туннель ssh.

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

пятница, 11 июня 2010 г.

Аутентификация в Squid через OpenLDAP

Достаточно внести следующие изменения в /etc/squid/squid.conf
auth_param basic program /usr/lib/squid/squid_ldap_auth -v 3 -b "dc=yourcompany,dc=com" -D uid=some-user,ou=People,dc=yourcompany,dc=com  -w password -f uid=%s ldap.yourcompany.com
auth_param basic children 5
auth_param basic realm Web-Proxy
auth_param basic credentialsttl 1 minute
acl ldap-auth proxy_auth REQUIRED
http_access allow ldap-auth
http_access allow localhost
http_access deny all

Squid, конечно же, должен быть собран с USE-флагом ldap.

вторник, 8 июня 2010 г.

Смена пароля пользователя в LDAP

Чтобы разрешить пользователю, чья учетная запись хранится на сервере OpenLDAP, самостоятельно менять пароль, нужно лишь сделать следующие изменения:

В файле /etc/openldap/slapd.conf заменить часть
access to *
by self write
by users read
by anonymous auth

на
access to attrs=userPassword
by self write
by * auth

access to *
by * read

суббота, 17 апреля 2010 г.

Настройка ssh-клиента

В файл ~/.ssh/config можно поместить следующие строки:
Host g
HostName server1
User user1
Host c
HostName server2
User user2

Тогда к серверам server1 и server2 можно получить доступ, набрав лишь
ssh g
и
ssh c
соответственно. На сам файл рекомендуется установить права доступа 600.
В man ssh_config есть еще много полезных опций.

понедельник, 22 февраля 2010 г.

Надежное удаление с помощью shred

Надежно удалить файл можно с помощью команды shred:
shred -uzv ./topsecret

Команда сначала заполняет файл случайными данными. По умолчанию эта операция повторяется три раза.
-u - показывает, что файл нужно удалить
-z - заполняет файл нулями после случайных данных
-v - подробный вывод, вроде такого:
yuri@gentoobox ~ $ shred -uzv ./topsecret
shred: ./topsecret: проход 1/4 (random)...
shred: ./topsecret: проход 2/4 (random)...
shred: ./topsecret: проход 3/4 (random)...
shred: ./topsecret: проход 4/4 (000000)...
shred: ./topsecret: удаление
shred: ./topsecret: переименован в ./000000000
shred: ./000000000: переименован в ./00000000
shred: ./00000000: переименован в ./0000000
shred: ./0000000: переименован в ./000000
shred: ./000000: переименован в ./00000
shred: ./00000: переименован в ./0000
shred: ./0000: переименован в ./000
shred: ./000: переименован в ./00
shred: ./00: переименован в ./0
shred: ./topsecret: удален

среда, 27 января 2010 г.

Совместное использование Samba и Clamav

Продолжу тему использования модулей vfs в samba.

Модуль vscan позволяет интегрировать антивирусную проверку в samba-сервер.

воскресенье, 24 января 2010 г.

Открытие порта в Selinux

Как сообщить selinux о том, что apache слушает на нестандартном порту.

Имеется web-сервер, который по некоторым причинам должен работать на нестандартном порту. Iptables и httpd.conf настроены, однако
service httpd start
дает сбой. Причина проста - selinux разрешает apache работать только на 80 и 443 порту.

Проверяем:
# semanage port -l|grep http

http_port_t                    tcp      80, 443, 488, 8008, 8009, 8443

Ну, как оказалось, имеются и другие разрешенные порты. Лучше, конечно, заставить apache работать на одном из них. Но если требуется добавить другой порт, надо дать команду
# semanage port -a 2012 -p tcp  -t http_port_t

Проверяем снова:
# semanage port -l|grep http

http_port_t                    tcp      2012, 80, 443, 488, 8008, 8009, 8443

Порт 2012 теперь разрешен для apache.

среда, 16 декабря 2009 г.

Сброс пароля Windows с помощью Linux

Задача: сбросить забытый пароль пользователя Windows

пятница, 6 ноября 2009 г.

Использование стеганографии

Википедия:
Стеганография — это наука о скрытой передаче информации путём сохранения в тайне самого факта передачи.

В отличие от криптографии, которая скрывает содержимое секретного сообщения, стеганография скрывает само его существование.

пятница, 24 апреля 2009 г.

Выкидываем пользователя из системы

Как выкинуть (разлогинить) другого пользователя из системы? Легко - убить его шелл.

четверг, 16 апреля 2009 г.

воскресенье, 29 марта 2009 г.

Аутентификация с помощью Flash-накопителя

Подумал, что было бы неплохо использовать usb-flash (или SD-карту в ридере лэптопа) для авторизации на своих машинах без пароля. Сделать это оказалось очень просто.

пятница, 27 марта 2009 г.

Защита загрузчика GRUB паролем

Ни для кого не секрет, что в Unix/Linux системе очень легко сбросить пароль root, имея физический доступ к компьютеру. Либо загрузившись с LiveCD/LiveUSB, либо передав штатному загрузчику параметры для запуска однопользовательского режима. Если от первого варианта можно (относительно) защититься, отключив в BIOS возможность загрузки со съемных носителей, установив пароль на BIOS и опечатыванием системника (а так же навешиванием замков или завариванием корпуса - кому что нравится :) ), то защита от второго способа - это установка пароля на загрузчик. Далее речь пойдет о GRUB.