Integrace s operačním systémem Linux je možná pomocí 2Element agenta který obsahuje:
příkaz activate pro jednoduchou hromadnou registraci systému
příkaz authorized_keys pro integraci do serveru OpenSSH
modul pro PAM (Pluggable Authentication Modules)
modul pro NSS (Name Service Switch)
Instalace, konfigurace a jednotlivé komponenty jsou popsané níže.
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:
yum-config-manager --add-repo https://yum.sonpo.cz/element2/element2-agent-el-7.repo yum install element2-agent |
yum-config-manager --add-repo https://yum.sonpo.cz/element2/element2-agent-el-8.repo yum install element2-agent |
yum-config-manager --add-repo https://yum.sonpo.cz/element2/element2-agent-el-9.repo yum install element2-agent |
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.
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.
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.).
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).
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.
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:
base_url - zapíšeme hodnotu Základní URL z aplikace 2Element
app_id - zapíšeme hodnotu ID aplikace z aplikace 2Element
app_secret - zapíšeme hodnotu Token z aplikace 2Element
Konfigurace agenta se načítá z konfiguračního souboru /opt/element2-agent/element2.conf. V souboru je možné nastavit tyto parametry:
base_url - hodnota odpovídající parametru Základní URL v detailu chráněné aplikace
app_id - hodnota odpovídající parametru ID aplikace v detailu chráněné aplikace
app_secret - hodnota odpovídající parametru Token v detailu chráněné aplikace
log_level - úroveň záznamů v logu, musí odpovídat jedné z hodnot: off, error, warn, info, debug, trace; záznamy se zapisují do syslog socketu /dev/log příp. /var/run/syslog s facility nastaveným na AUTHPRIV; nepovinný parametr, výchozí hodnota je “info”
fail_mode - chování v případě nedostupnosti 2Elementu serveru (platí pouze pro PAM modul), musí být jedna z hodnot (nepovinný parametr, výchozí hodnota je “secure”):
safe - akce je povolena
secure - akce je zakázána
2Element agent obsahuje následující funkce, které mohou fungovat samostatně nebo v libovolné kombinaci:
příkaz activate pro integraci agenta s 2Element serverem pomocí aktivačního klíče
příkaz authorized_keys určený pro konfigurační parametr AuthorizedKeysCommand serveru OpenSSH
modul pro PAM (Pluggable Authentication Modules) pro více-faktorové ověření uživatelů
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 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 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 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.
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.
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 |
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 |
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 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.
V souboru /etc/nsswitch.conf upravíme konfiguraci databází passwd a group např. takto:
passwd: files sss element2 group: files sss element2 |
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 |
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) |
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.