Úvodní informace

Integrace s operačním systémem Linux je možná pomocí 2Element agenta který obsahuje:

Instalace, konfigurace a jednotlivé komponenty jsou popsané níže.

Obsah

Instalace agenta

Pro integraci OS Linux s aplikací 2Element je potřeba na daný systém nainstalovat 2Element agenta. Pro vybrané distribuce je k dispozici připravený balíček který je možné nainstalovat takto:

RHEL 7

yum-config-manager --add-repo https://yum.sonpo.cz/element2/element2-agent-el-7.repo

yum install element2-agent

RHEL 8

yum-config-manager --add-repo https://yum.sonpo.cz/element2/element2-agent-el-8.repo

yum install element2-agent

RHEL 9

yum-config-manager --add-repo https://yum.sonpo.cz/element2/element2-agent-el-9.repo

yum install element2-agent

Debian 11 (“bullseye”)

curl -sS https://yum.sonpo.cz/element2/APT-GPG-KEY-ELEMENT2 -o /etc/apt/trusted.gpg.d/element2-agent.asc

echo "deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/element2-agent.asc] https://yum.sonpo.cz/element2/element2-agent-master/debian11 stable main" > /etc/apt/sources.list.d/element2-agent.list

Instalací agenta nedojde ke změně nastavení systému.

Nastavení integrace

V aplikaci 2Element je potřeba systém zaregistrovat jako novou chráněnou aplikaci a to buď pomocí aktivačního klíče nebo ručně. Navázáním 2Element agenta na 2Element server nedojde samo o sobě ke změně konfigurace nebo chování operačního systému.

Přidání pomocí aktivačního klíče

Nastavení v aplikaci 2Element

Vytvoříme nový aplikační klíč (Aplikace a klíče - Aktivační klíče - Přidat) a jako typ chráněné aplikace vybereme Linux. Po přidání aktivačního klíče je zobrazen jeho detail.

Pomocí tlačítka Zobrazit vzorový CLI příkaz si necháme zobrazit příkaz pro spuštění na systému s OS Linux a zkopírujeme ho do schránky.

Pomocí jednoho aktivačního klíče je možné zaregistrovat libovolné množství systémů - např. automatizovaně pomocí nástroje na správu konfigurací (cfengine, puppet, ansible apod.).

Nastavení 2Element agenta

Jako uživatel root (nebo pomocí sudo) spustíme příkaz získaný v předchozím kroku, např.:

/opt/element2-agent/bin/activate --base-url "https://2element.io/" --key-id "e4cbc63c-3965-43c0-a953-7db52aaed0ab" --key-token "029796c646b14c6076fea4b5be54c623fab01d19"

Po spuštění dojde k vytvoření nové chráněné aplikace na straně 2Element serveru a na systému s OS Linux vznikne konfigurační soubor /opt/element2-agent/element2.conf. Parametr fail_mode je nastaven na safe a parametr log_level na info (viz. Úprava konfigurace).

Ruční přidání chráněné aplikace

Nastavení v aplikaci 2Element

Vytvoříme novou chráněnou aplikaci (Aplikace a klíče - Chráněné aplikace - Přidat) typu Linux. Po přidání aplikace je zobrazen její detail ve kterém jsou údaje potřebné pro nastavení agenta.

Nastavení 2Element agenta

Vytvoříme nový konfigurační soubor ze vzorového souboru:

cp /opt/element2-agent/element2.conf.example /opt/element2-agent/element2.conf

V souboru upravíme nastavení takto:

Úprava konfigurace

Konfigurace agenta se načítá z konfiguračního souboru /opt/element2-agent/element2.conf. V souboru je možné nastavit tyto parametry:

Funkce 2Element agenta

2Element agent obsahuje následující funkce, které mohou fungovat samostatně nebo v libovolné kombinaci:

  1. příkaz activate pro integraci agenta s 2Element serverem pomocí aktivačního klíče

  2. příkaz authorized_keys určený pro konfigurační parametr AuthorizedKeysCommand serveru OpenSSH

  3. modul pro PAM (Pluggable Authentication Modules) pro více-faktorové ověření uživatelů

  4. modul pro NSS (Name Service Switch) pro použití vzdálených uživatelů z 2Element v místním systému

Příkaz activate

Příkaz activate slouží pro registraci systému v aplikaci 2Element pomocí aktivačního klíče, viz. sekce Přidání pomocí aktivačního klíče.

Příkaz authorized_keys

Příkaz authorized_keys slouží pro načítání uživatelských SSH klíčů z aplikace 2Element, kde jsou u uživatelů vedené jako autentizátory typu SSH klíč. Příkaz je určen pro konfigurační parametr AuthorizedKeysCommand serveru OpenSSH a slouží jako náhrada nebo doplněk k souborům ~/.ssh/authorized_keys.

Pro jeho použití je potřeba do konfiguračního souboru /etc/ssh/sshd_config přidat:

AuthorizedKeysCommand /opt/element2-agent/bin/authorized_keys --user %u --type %t --fingerprint %f
AuthorizedKeysCommandUser element2-agent

Po změně konfigurace je nutný reload konfigurace OpenSSH serveru:

systemctl reload sshd

Modul pro PAM (Pluggable Authentication Modules)

Modul podporuje více-faktorové ověření, a to jak místních, tak vzdálených, uživatelů. Z podstaty věci je jeho použití vhodné jen v případě, kdy je možná interakce s uživatelem - tj. např. pro OpenSSH, sudo nebo login a nikoliv např. pro IMAP nebo SMTP server.

Pro aktivaci modulu je nutné ho doplnit do PAM konfigurace požadované aplikace. Přesné nastavení je závislé na konkrétních podmínkách a požadavcích.

Příklad nastavení pro OpenSSH

Následující nastavení vynutí přihlášení SSH klíčem po kterém následuje ověření dalším faktorem z aplikace 2Element. Uživatelé ve skupině Admin můžou po úspěšném více-faktorovém ověření spustit libovolný příkaz pomocí sudo.

Nastavení nezávislé na distribuci

Konfigurační soubor /etc/ssh/sshd_config:

AuthorizedKeysCommand /opt/element2-agent/bin/authorized_keys --user %u --type %t --fingerprint %f
AuthorizedKeysCommandUser element2-agent

PasswordAuthentication no
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

Konfigurační soubor /etc/sudoers (výňatek):

%Admin  ALL=(ALL)       ALL

Nastavení pro RHEL 8

Konfigurační soubor /etc/pam.d/sshd:

#%PAM-1.0
### auth       substack     password-auth - zakomentovaný původní řádek
auth       required     pam_element2.so
auth       include      postlogin
account    required     pam_sepermit.so
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    optional     pam_motd.so
session    include      password-auth
session    include      postlogin

Konfigurační soubor /etc/pam.d/sudo:

#%PAM-1.0
###auth       include      system-auth - zakomentovaný původní řádek
auth       required pam_element2.so
account    include      system-auth
password   include      system-auth
session    include      system-auth

Nastavení pro Debian 11

Konfigurační soubor /etc/pam.d/sshd:

# PAM configuration for the Secure Shell service

# Standard Un*x authentication.
###@include common-auth - zakomentovaný původní řádek

auth       required     pam_element2.so

# Disallow non-root logins when /etc/nologin exists.
account    required     pam_nologin.so

# Uncomment and edit /etc/security/access.conf if you need to set complex
# access limits that are hard to express in sshd_config.
# account  required     pam_access.so

# Standard Un*x authorization.
@include common-account

# SELinux needs to be the first session rule.  This ensures that any
# lingering context has been cleared.  Without this it is possible that a
# module could execute code in the wrong domain.
session [success=ok ignore=ignore module_unknown=ignore default=bad]        pam_selinux.so close

# Set the loginuid process attribute.
session    required     pam_loginuid.so

# Create a new session keyring.
session    optional     pam_keyinit.so force revoke

# Standard Un*x session setup and teardown.
@include common-session

# Print the message of the day upon successful login.
# This includes a dynamically generated part from /run/motd.dynamic
# and a static (admin-editable) part from /etc/motd.
session    optional     pam_motd.so  motd=/run/motd.dynamic
session    optional     pam_motd.so noupdate

# Print the status of the user's mailbox upon successful login.
session    optional     pam_mail.so standard noenv # [1]

# Set up user limits from /etc/security/limits.conf.
session    required     pam_limits.so

# Read environment variables from /etc/environment and
# /etc/security/pam_env.conf.
session    required     pam_env.so # [1]
# In Debian 4.0 (etch), locale-related environment variables were moved to
# /etc/default/locale, so read that as well.
session    required     pam_env.so user_readenv=1 envfile=/etc/default/locale

# SELinux needs to intervene at login time to ensure that the process starts
# in the proper default security context.  Only sessions which are intended
# to run in the user's context should be run after this.
session [success=ok ignore=ignore module_unknown=ignore default=bad]        pam_selinux.so open

# Standard Un*x password updating.
@include common-password

Konfigurační soubor /etc/pam.d/sudo:

#%PAM-1.0

###@include common-auth - zakomentovaný původní řádek
auth       required pam_element2.so
@include common-account
@include common-session-noninteractive

Modul pro NSS (Name Service Switch)

Modul podporuje NSS databáze passwd a group. Použití modulu je potřeba aktivovat v souboru /etc/nsswitch.conf, přesný způsob je závislý na verzi OS.

Aktivace v RHEL 7

V souboru /etc/nsswitch.conf upravíme konfiguraci databází passwd a group např. takto:

passwd:     files sss element2
group:      files sss element2

Aktivace v RHEL 8

V souboru /etc/authselect/user-nsswitch.conf upravíme konfiguraci databází passwd a group např. takto:

passwd:      sss files systemd element2
group:       sss files systemd element2

a spustíme:

authselect enable-feature with-custom-passwd
authselect enable-feature with-custom-group
authselect apply-changes

Test nastavení

Správnou funkčnost můžeme ověřit pomocí nástroje id se kterým se doptáme na existující uživatele v aplikaci 2Element, např.:

# id jan.vomacka@2element.io
uid=11000(jan.vomacka@2element.io) gid=11000(jan.vomacka@2element.io) groups=11000(jan.vomacka@2element.io),10005(Admin)

Rozsah UID a GID

Výchozí rozsah pro UID a GID je 10000 - 19999. Rozsah je sdílený pro UID a GID a každý uživatel je členem své vlastní stejnojmenné privátní skupiny. Rozsah zatím není možné měnit z administrační konzole, pouze úpravou sekvence v databázi.