У ранній статті ми встановлювали MultiOTP на сервері Windows. Зараз ми розглянемо, як встановити MultiOTP на сервер Ubuntu.
Інсталяція Docker
sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" sudo apt update apt-cache policy docker-ce sudo apt install docker-ce sudo systemctl status docker
Інсталяція Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version
Збір контейнера
sudo su nano Dockerfile
Вміст Dockerfile:
FROM php:7.4-apache
RUN apt-get update && \
apt-get install -y git zip unzip && \
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && \
git clone https://github.com/multiOTP/multiotp.git /var/www/html/multiotp
WORKDIR /var/www/html/multiotp
RUN composer install
nano docker-compose.yml
Вміст docker-compose.yml:
version: '3'
services:
multiotp:
build: .
ports:
- "8080:80"
volumes:
- ./config:/var/www/html/multiotp/config
- ./data:/var/www/html/multiotp/data
environment:
- APACHE_DOCUMENT_ROOT=/var/www/html/multiotp
restart: always
Встановлення MultiOTP
git clone https://github.com/multiOTP/multiotp.git cd multiotp nano /home/user/multiotp/composer.json
Вміст composer.json:
{
"name": "multiOTP",
"description": "MultiOTP Authentication Server",
"require": {
"php": "^7.2"
}
}
composer install sudo nano /etc/systemd/system/multiotp.service
Вміст multiotp.service:
[Unit] Description=MultiOTP Service After=network.target [Service] Type=simple ExecStart=/шлях/до/вашого/команди/multiotp WorkingDirectory=/шлях/до/каталогу/вашого/додатку Restart=always [Install] WantedBy=multi-user.target sudo systemctl daemon-reload sudo systemctl start multiotp sudo systemctl status multiotp sudo systemctl enable multiotp
docker run -v /absolute/path/to/multiotp/data:/etc/multiotp -v /absolute/path/to/freeradius/config:/etc/freeradius -v /absolute/path/to/multiotp/log:/var/log/multiotp -v /absolute/path/to/freeradius/log:/var/log/freeradius -p 80:80 -p 443:443 -p 1812:1812/udp -p 1813:1813/udp -d multiotp/multiotp-open-source
Встановлення FreeRADIUS (потрібно встановити всередині контейнера!)
sudo docker exec -it dreamy_fermat /bin/bash sudo apt update sudo apt install freeradius cd /etc/freeradius/ nano users
Вміст users:
ldap {
server = "ldap://dc.it-homyak.com.ua:389"
identity = "multiotp_srv"
password = "Hamster007"
basedn = "dc=it-homyak,dc=com,dc=ua"
filter = "(sAMAccountName=%{%{Stripped-User-Name}:-%{User-Name}})"
base_filter = "(objectClass=person)"
start_tls = no
tls { # Якщо потрібно TLS
start_tls = yes
# ...
}
# Інші налаштування LDAP
}
authorize {
preprocess
chap
mschap
suffix
eap {
ok = return
}
ldap
}
authenticate {
Auth-Type LDAP {
ldap
}
}
session {
radutmp
}
post-auth {
Post-Auth-Type REJECT {
attr_filter.access_reject
}
}
sudo ln -s /etc/freeradius/3.0/mods-available/ldap /etc/freeradius/3.0/mods-enabled/ sudo nano /etc/freeradius/3.0/sites-enabled/default
Вміст default(Оновіть секції authorize, authenticate, session, та post-auth):
authorize {
preprocess
chap
mschap
suffix
eap {
ok = return
}
ldap
files
}
authenticate {
Auth-Type LDAP {
ldap
}
}
session {
radutmp
}
post-auth {
Post-Auth-Type REJECT {
attr_filter.access_reject
}
}
sudo nano /etc/freeradius/3.0/mods-available/ldap
Вміст ldap:
ldap:
ldap {
server = "ldap://dc.it-homyak.com.ua"
identity = "Users\multiotp_srv"
password = "Hamster007"
basedn = "dc=it-homyak,dc=com,dc=ua"
filter = "(sAMAccountName=%{%{Stripped-User-Name}:-%{User-Name}})"
base_filter = "(objectClass=person)"
start_tls = no
tls {
start_tls = no
}
access_attr = "memberOf"
groupname_attribute = "cn"
groupmembership_filter = "(|(&(objectClass=group)(member=%{Ldap-UserDn}))(o$
timeout = 4
timelimit = 3
net_timeout = 1
dictionary_mapping = ${modconfdir}/ldap/ldap.attrmap
edir_account_policy_check = no
keepalive {
idle = 60
probes = 3
interval = 3
}
}
Налаштування конфігу MultiOTP
multiotp -config default-request-prefix-pin=0 multiotp -config default-request-ldap-pwd=0 multiotp -config ldap-server-type=1 multiotp -config ldap-cn-identifier="sAMAccountName" multiotp -config ldap-group-cn-identifier="sAMAccountName" multiotp -config ldap-group-attribute="memberOf" multiotp -config ldap-ssl=0 multiotp -config ldap-port=389 multiotp -config ldap_domain_controllers=ldap://dc.it-homyak.com.ua:389 multiotp -config ldap_base_dn=dc=it-homyak,dc=com,dc=ua multiotp -config ldap_bind_dn=CN=multiotp_srv,OU=Users,DC=it-homyak,DC=com,DC=ua multiotp -config ldap-server-password="Hamster007" multiotp -config ldap-in-group="2FAUsers" multiotp -config ldap-without2fa-in-group="without2fa" multiotp -config ldap-network-timeout=10 multiotp -config ldap-time-limit=30 multiotp -config ldap-activated=1 multiotp -config server-secret=ITHamster007 multiotp -debug -display-log -ldap-users-sync
У разі перезапуску служби freeradius:
sudo systemctl restart freeradius
Або всього контейнера:
sudo docker restart dreamy_fermat
