Встановлення MultiOTP на Linux Ubuntu server

У ранній статті ми встановлювали 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

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *