Samba
Samba ist ein freies Programmpaket, mit dem es seit Version 4 u. a. möglich ist, einen Domänen-Controller zu betreiben. Das Schulnetzkonzept nutzt davon nur einen sehr kleinen Teil, um eine einfache Benutzerverwaltung bzw. -schnittstelle zu realisieren.
Zur Realisierung des Schulnetzes werden zusätzlich zu Samba folgende Tools verwendet:
FreeRADIUS
Der FreeRADIUS-Server stellt verschiedenen Varianten zur Anmeldung von Benutzern bereit. Das Schulnetzkonzept nutzt ihn für die personalisierte Anmeldung von Benutzern an WLAN-Access-Points.
LDAP Account Manager
Mit dem LDAP Account Manager (LAM) können LDAP-Einträge (Benutzer, Gruppen etc.) benutzerfreundlich über eine Webschnittstelle verwaltet werden. Das Tool erlaubt im Besonderen den Import zahlreicher Benutzer mithilfe einer CSV-Datei.
Self Service Password
Self Service Password ist eine PHP-Anwendung, die es Benutzern ermöglicht, ihr Passwort über das LDAP-Protokoll zu ändern.
Erfüllte Anforderungen
Diese Anforderungen erfüllt das Schulnetzkonzept:
- Benutzer- und Gruppenverwaltung über Web-Oberfläche (LDAP-Account-Manager)
- Möglichkeit des CSV-Imports
- Zentrale Benutzerbasis für Nextcloud und WLAN:
- Synchronisation der Benutzer und Gruppen via LDAP in die Nextcloud
- Personalisierte Anmeldung im WPA2-Enterprise-WLAN mit FreeRADIUS
Installation Samba
Virtuelle Maschine erzeugen
Verwenden Sie hierzu die Beschreibung zur Installation eines virtuellen Linux-Debians.
Dimensionierungsbeispiel der virtuellen Maschine:
- 1 CPU
- 16 GB Festplattenspeicher
- 4 GB Arbeitsspeicher
- 1 Netzwerkkarte mit Zugriff auf das Netzwerk LAN_SERVER
Notwendige Pakete installieren
# Notwendige Tools
apt install pwgen sshpass samba krb5-config winbind smbclient -y
# Während Installationsprozess folgende Angaben
# - Ihren Gegebenheiten angepasst - tätigen:
# Per DHCP angebotene WINS-Einstellungen: Nein
# Kerberos Realm: schulnetz.intra
# Kerberos Server: samba.schulnetz.intra
# Kerberos Administrations-Server: samba.schulnetz.intra
Originale Samba-Konfiguration sichern
mv /etc/samba/smb.conf /etc/samba/smb.conf.org
Samba Domänen-Setup ausführen
samba-tool domain provision --use-rfc2307 --interactive
# Alle während des Installationsprozesse abgefragen Einstellungen
# können bei den vorgeschlagenen Default-Werten belassen werden,
# außer natürlich das neu zu vergebende Samba-Administrator-Passwort.
Domänen-Setup abschließen
# Kerberos-Konfiguration an die richtige Stelle kopieren:
cp /var/lib/samba/private/krb5.conf /etc/
# Domänen-Controller-Dienste für den
# automatischen Systemstart konfigurieren:
systemctl stop smbd nmbd winbind
systemctl disable smbd nmbd winbind
systemctl unmask samba-ad-dc
systemctl start samba-ad-dc
systemctl enable samba-ad-dc
reboot
Falls gewünscht: Passwortkomplexität verringern
# Folgende Befehle deaktivieren die Passwortkomplexität
# bis auf eine minimale Passwortlänge von 7 Zeichen:
samba-tool domain passwordsettings set --complexity=off
samba-tool domain passwordsettings set --history-length=0
samba-tool domain passwordsettings set --min-pwd-age=0
samba-tool domain passwordsettings set --max-pwd-age=0
Nützliche Befehle zur Überprüfung des Domänen-Controllers
# Samba Status anzeigen:
smbclient -L localhost -U%
# Domain-Level anzeigen:
samba-tool domain level show
# Passwortrichtlinien anzeigen:
samba-tool domain passwordsettings show
SSH-Kommunikation zwischen Samba-Server und OPNsense vorbereiten
Da LDAP-Verbindungen zum Samba-Server verschlüsselt erfolgen sollen und der OPNsense-Reverse-Proxy keine LDAP-Anfragen entgegen nehmen kann, muss das Zertifikat für die Verschlüsselung direkt auf dem Samba-Server hinterlegt werden.
Zur Zertifikatsgenerierung wird aber genau wie für alle anderen Zertifikate das OPNsense-Let's-Encrypt-Plugin verwendet. Nachdem dieses ein Zertifikat für z. B. ldap.ihre-schule.de generiert hat, kopiert es entsprechende Zertifikatsdateien auf den Samba-Server. Für das automatisierte Kopieren benötigt OPNsense Konsolenzugriff auf den Samba-Server. Hierfür müssen entsprechende Schlüssel generiert und zwischen beiden Systemen ausgetauscht werden:
# Auf Samba-Server-Konsole:
# Erzeugung von privatem (id_rsa) und öffentlichem (id_rsa.pub) Schlüssel
# im Ordner /root/.ssh
ssh-keygen
# Fall 1: die Datei /root/.ssh/authorized_keys existiert noch nicht
# -> Die Datei /root/.ssh/id_rsa.pub wird umbenannt in authorized_keys:
mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
# Fall 2: die Datei /root/.ssh/authorized_keys existiert bereits
# -> Der Inhalt der Datei /root/.ssh/id_rsa.pub wird kopiert
# und in die Datei /root/.ssh/authorized_keys eingefügt
# Berechtigung setzen:
chmod 0600 /root/.ssh/*
# Auf OPNsense-Konsole:
mkdir /root/.ssh
# Den auf Samba-Server erzeugten privaten Schlüssel (id_rsa)
# per sftp in den Ordner /root/.ssh kopieren
# Die Datei id_rsa umbennennen in id_rsa_samba
mv /root/.ssh/id_rsa /root/.ssh/id_rsa_samba
# Berechtigung setzen:
chmod 0600 /root/.ssh/*
# Einmal von OPNsense-Konsole bei Samba-Server anmelden,
# damit der Samba-Server der Liste der vertrauten Computer hinzugefügt wird:
ssh -i /root/.ssh/id_rsa_samba root@10.1.100.7
Das Generieren des Zertifikats mit dem OPNsense-Let's-Encrypt-Plugin sowie das Kopieren der Dateien auf den Samba-Server wird in der OPNsense-Anleitung im Abschnitt Let's Encrypt erklärt.
Achten Sie darauf, dass zunächst die notwendigen Zertifikate auf dem Samba-Server liegen, bevor Sie im nachfolgenden Schritt die Samba-Konfiguration anpassen.
Samba-Konfiguration anpassen
vim /etc/samba/smb.conf
Datei /etc/samba/smb.conf
# Im Bereich [global] einfügen:
ntlm auth = mschapv2-and-ntlmv2-only
tls enabled = yes
tls keyfile = /etc/samba/tls/ldap.ihre-schule.de.key
tls certfile = /etc/samba/tls/fullchain.cer
tls cafile = /etc/samba/tls/ca.cer
Samba-Dienst neu starten
service samba-ad-dc restart
Installation und Verwendung des LDAP-Account-Managers
Installation/Update des LDAP-Account-Managers
Laden Sie zunächst die aktuelle .deb-Installationsdatei von der Herstellerseite herunter:
https://www.ldap-account-manager.org/lamcms/releases
Kopieren Sie die Datei z. B. mit WinSCP ins Verzeichnis /root des Samba-Servers.
dpkg -i /root/<Dateiname der heruntergeladenen Datei>.deb
# Ggf. fehlende Abhängigkeiten nachinstallieren:
apt -f install -y
Konfiguration des LDAP-Account-Managers
- Aufruf der Weboberfläche des LDAP-Account-Managers: http://10.1.100.7/lam (bzw. verschlüsselt: https://usermanagement.ihre-schule.de)
- Hauptpasswort setzen: LAM-Einstellungen → Allgemeine Einstellungen → Neues Hauptpasswort (Standard: lam)
- Profilpasswort setzen: LAM-Einstellungen → Serverprofile ändern → Serverprofile verwalten → lam → Neues Profilpasswort
- Serverprofile "lam" ändern
- Allgemeine Einstellungen
- Server-Adresse: ldaps://ldap.ihre-schule.de:636
- TLS aktivieren: nein
- Baumansicht: DC=schulnetz,DC=intra
- Login-Methode: feste Liste
- Liste der berechtigten Benutzer: CN=Administrator,CN=Users,DC=schulnetz,DC=intra
- Accounttypen
- Benutzer:
LDAP-Suffix: ou=Users,ou=School,dc=schulnetz,dc=intra
Attribute der Listen: #userPrincipalName;#givenName;#sn;#mail - Gruppen:
LDAP-Suffix: ou=Groups,ou=School,dc=schulnetz,dc=intra
Attribute der Listen: #cn;#gidNumber;#memberUID;#description
- Benutzer:
- Module
- Benutzer: Windows (windowsUser)(*)
restliche Module entfernen - Gruppen
Windows (windowsGroup)(*)
restliche Module entfernen
- Benutzer: Windows (windowsUser)(*)
- Allgemeine Einstellungen
Verwendung des LDAP-Account-Managers
- Aufruf der Weboberfläche: http://10.1.100.7/lam (bzw. verschlüsselt: https://usermanagement.ihre-schule.de)
Verzeichnisstruktur anlegen
Mit dem OU-Editor folgende OU-Struktur in der Organisationseinheit Users anlegen:
- students
- 5a
- …
- 10x
- teachers
- guests (für Gäste)
- services (für Dienste, welche eine LDAP-Verbindung benötigen - z. B. Nextcloud, Radius, Jitsi, Self Service Password)
Benutzer importieren
- Libre-Office-Calc-Vorlage "csv-generator-schueler" bzw. "csv-generator-lehrer" verwenden und nach eigenen Gegebenheiten anpassen
- Tabellenblatt Eingabe: Daten eingeben
- Tabellenblatt PW-Generator: Gewünschte Anzahl an Passwörtern durch kopieren der Formel eingeben → Passwörter in Zwischenablage kopieren
- Tabellenblatt Eingabe: Passwörter einfügen über: Bearbeiten → Inhalte einfügen (Haken bei Formeln entfernen)
- Tabellenblatt CSV-LAM → Datei → Speichern unter
→ Dateityp: Text CSV > Haken bei Filtereinstellungen bearbeiten
→ Zeichensatz: Unicode (UTF-8) > OK
Gruppen erzeugen und Benutzer zuordnen
Unter dem Reiter "Gruppen" folgende Gruppen (Domänenlokal) erzeugen und entsprechend User zuordnen:
- schueler (→ alle Schüler-User)
- 5a (→ alle Schüler der 5a) … bis 10x
- lehrer (→ alle Lehrer-User)
- ggf. schulleitung
- ggf. erweiterte-schulleitung
- wifi-schueler (→ alle User, die Zugriff zum WLAN und dem Schüler-VLAN erhalten sollen)
- wifi-lehrer (→ alle User, die Zugriff zum WLAN und dem Lehrer-VLAN erhalten sollen)
- nextcloud (→ alle User, die Zugriff auf die Nextcloud erhalten sollen)
- jitsi (→ alle User, die Jitsi-Videokonferenzen initiieren dürfen sollen)
Service-Benutzer erzeugen
Für Dienste, welche lesend per ldap auf das Samba-Verzeichnis zugreifen können müssen, wird in der Organisationseinheit services je ein User ohne Gruppenzugehörigkeit mit einem starken Passwort angelegt:
- svc_nextcloud
- svc_radius
- svc_jitsi
- svc_selfservicepassword
Installation des FreeRadius-Servers
Der FreeRADIUS-Server wird aktuell auf jenem Computer installiert auf dem auch der Samba-Domänen-Controller läuft. Soll der Radius-Server auf einem anderem System installiert werden, muss dieser der Domäne hinzugefügt werden.
Installation notwendiger Pakete
apt install freeradius freeradius-utils -y
Autostart des FreeRADIUS-Servers aktivieren
update-rc.d freeradius enable
Datei mschap anpassen
vim /etc/freeradius/3.0/mods-available/mschap
Datei /etc/freeradius/3.0/mods-available/mschap
# Passus ntlm_auth abändern:
# - als Domain SCHULNETZ eintragen
# - als erforderliche Gruppe SCHULNETZ\wifi festlegen
mschap {
# ...
ntlm_auth = "/usr/bin/ntlm_auth --allow-mschapv2 --request-nt-key --username=%{mschap:User-Name} --domain=SCHULNETZ.INTRA --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00} --require-membership-of=SCHULNETZ\wifi"
# ...
}
Dem Benuzer freerad notwendige Berechtigungen einräumen
# Für das Authentifizierungsverfahren mschap muss der Benutzer freerad
# der Gruppe winbindd_priv hinzugefügt werden:
adduser freerad winbindd_priv
Neustart und Test des FreeRADIUS-Servers
service freeradius restart
# radtest mit bestehenden Benutzern der Gruppe wifi durchführen
# (Ergebnis muss “Access-Accepted" sein)
radtest -t mschap username password localhost 0 testing123
# Debug bei Fehlern:
## FreeRADIUS-Service stoppen:
service freeradius stop
## FreeRADIUS-Server mit Konsolenausgabe starten
/usr/sbin/freeradius -X
## Authentifizierungsversuch unternehmen und Fehlermeldungen auswerten
Zugriffsberechtigte Clients (Access-Points) definieren
vim /etc/freeradius/3.0/clients.conf
Datei /etc/freeradius/3.0/clients.conf
# Beispiel für alle Clients (= Access-Points) aus dem Teilnetz 10.1.254.0/24
client 10.1.254.0/24 {
secret = <Radius-Passwort des Access-Points>
shortname = 10.1.254-netw
nas_type = other
}
service freeradius restart
Festlegungen im Access-Point
- Verschlüsselung: 802.11i (WPA)-802.1x (= WPA Enterprise)
- Radius-Server: 10.1.100.7
- Port: 1812
- Secret: <Radius-Passwort vergeben>
Unterschiedliche VLANs im WLAN für Schüler und Lehrer
Auf Wunsch kann der FreeRADIUS-Server so konfiguriert werden, dass Benutzer bei der beschriebenen WLAN-Anmeldung über WPA-Enterprise aufgrund von Gruppenzugehörigkeiten unterschiedlichen VLANs zugeordnet werden können, obwohl sie sich am gleichen WLAN (SSID) anmelden. Das Schulnetzkonzept nutzt diese Begebenheit, um Lehrern und Schülern jeweils ein eigenes Netz zur Verfügung zu stellen, wobei beim Schülernetz der Proxy mit entsprechenden Filter-Einstellungen aktiv ist. Beim Lehrer-Netz hingegen greifen keine Restriktionen.
Für die Umsetzung der nachfolgenden Beschreibung müssen folgende Voraussetzungen erfüllt sein:
- Im Samba-Server ist eine Gruppe "lehrer" angelegt, und die Lehrer sind der Gruppe zugeordnet.
- Die Switche und der Router sind mit entsprechenden VLANs für Lehrer und Schüler konfiguriert (s. dazu die Anleitung von OPNsense).
- Die Access-Points müssen so konfiguriert sein, dass sie VLAN-Zuweisungen über den Radius-Server zulassen.
- Bei Lancom-Access-Points ist dies standardmäßig eingestellt.
- Bei Unifi-Access-Points muss bei dem entsprechenden Radius-Profil folgende Einstellung gesetzt werden: Enable RADIUS assigned VLAN for wireless network
- Damit Geräte wie Drucker oder Cast-Lösungen (HDMI-Sticks, Airserver, ...) weiterhin von beiden Gruppen genutzt werden können, muss in OPNsense das Multicast-DNS-Modul installiert und konfiguriert werden (s. dazu die Anleitung von OPNsense).
- Für die gesicherte Kommunikation (ldaps) des FreeRADIUS-ldap-Moduls mit dem Samba-Server müssen wie oben beschrieben beim Samba-Server unter /etc/samba/tls gültige Zertifikatsdateien hinterlegt sein. Dieser Ordner und die darin befindlichen Dateien müssen für Freeradius lesbar sein (oktaler Wert für die Berechtigung: 0755). Einzige Ausnahme hiervon bildet der im Ordner befindliche Private-Key. Dieser muss die Berechtigung 0600 haben, ansonsten startet der Samba-Server nicht mehr. Sofern sie hierbei der Anleitung von OPNsense gefolgt sind, werden die Berechtigungen bei der automatisierten Zertifikatserneuerung richtig gesetzt.
Installation erforderlicher Pakete
apt install freeradius-ldap -y
Konfiguration des FreeRADIUS-ldap-Moduls
vim /etc/freeradius/3.0/mods-available/ldap
Datei /etc/freeradius/3.0/mods-available/ldap
#innerhalb von ldap {} server = 'localhost' auskommentieren
#innerhalb von ldap {} mit angepassten Zugangsdaten zum Samba-Server ergänzen:
server = 'ldaps://ldap.rsarnstorf.de'
port = 636
identity = 'CN=svc_radius,OU=services,OU=Users,OU=School,DC=schulnetz,DC=intra'
password = 'Passwort_des_Benutzers_svc_radius'
base_dn = 'OU=School,DC=schulnetz,DC=intra'
user {
base_dn = "OU=School,DC=schulnetz,DC=intra"
filter = "(sAMAccountName=%{%{Stripped-User-Name}:-%{User-Name}})"
}
group {
filter = '(objectClass=group)'
base_dn = "OU=School,DC=schulnetz,DC=intra"
membership_attribute = 'memberof'
}
#innerhalb von tls{} ergänzen:
ca_file = /etc/samba/tls/ca.cer
ca_path = /etc/samba/tls
ldap-Modul aktivieren
ln -s /etc/freeradius/3.0/mods-available/ldap /etc/freeradius/3.0/mods-enabled/ldap
VLAN-Zuweisung für Gruppe lehrer konfigurieren
vim /etc/freeradius/3.0/sites-enabled/default
Datei /etc/freeradius/3.0/sites-enabled/default
#innerhalb von authorize {} ergänzen:
if (LDAP-Group == "wifi-lehrer") {
update reply {
&Tunnel-Type = VLAN
&Tunnel-Medium-Type = IEEE-802
#VLAN von LAN-LEHRER
&Tunnel-Private-Group-Id = 13
}
} else if (LDAP-Group == "wifi-schueler") {
update reply {
&Tunnel-Type = VLAN
&Tunnel-Medium-Type = IEEE-802
#VLAN von LAN-SCHUELER
&Tunnel-Private-Group-Id = 12
}
} else {
reject
}
FreeRADIUS-Server neu starten
service freeradius restart
FreeRadius-Server mit Let's-Encrypt-Zertifikat ausstatten
Im Zuge von WPA 3 wird es zwingend erforderlich, dass die Verbindung von Clients zum Radiusserver verschlüsselt stattfindet. So wird z. B. ab Android 11 der Workaround, das Zertifikat nicht validieren zu müssen, nicht mehr angeboten.
Ordner für Let's-Encrypt-Zertifikatsdateien anlegen
# Nennen Sie den Ordner so, wie die Domain zum Zertifikat heißen soll:
mkdir /etc/freeradius/certs/radius.ihre-schule.de/
SSH-Kommunikation zwischen Radius-Server und OPNsense vorbereiten
Um die Let's-Encrypt-Zertifikate von OPNSense zum Radius-Server kopieren zu können, ist es erforderlich, dass OPNSense nach Erzeugung/Aktualisierung der entsprechenden Zertifikatsdateien diese per SCP zum Radius-Server kopieren kann. Die Beschreibung zum Aufbau der SSH-Verbindung zwischen OPNSense und Radius-Server entspricht jener unter der Teilüberschrift "SSH-Kommunikation zwischen Samba-Server und OPNsense vorbereiten" im Abschnitt "Installation Samba". Sofern Sie an dieser Stelle bereits den SSH-Zugriff eingerichtet haben, müssen Sie diesen Schritt hier nicht wiederholen.
Das Generieren des Zertifikats mit dem OPNsense-Let's-Encrypt-Plugin sowie das Kopieren der Dateien auf den Radius-Server wird in der OPNsense-Anleitung im Abschnitt Let's Encrypt erklärt.
Achten Sie darauf, dass zunächst die notwendigen Zertifikate auf dem Freeradius-Server liegen, bevor Sie mit dieser Anleitung fortfahren.
Konfiguration des Radius-Server
vim /etc/freeradius/3.0/mods-enabled/eap
Datei /etc/freeradius/3.0/mods-enabled/eap
# Ändern Sie die Angaben für private_key_file und certificate_file
# im Abschnitt tls-config tls-common
...
tls-config tls-common {
private_key_file = ${certdir}/radius.ihre-schule.de/radius.ihre-schule.de.key
certificate_file = ${certdir}/radius.ihre-schule.de/fullchain.cer
ca_file = ${certdir}/radius.ihre-schule.de/ca.cer
}
...
FreeRADIUS-Server neu starten
service freeradius restart
Angaben beim WLAN-Client
Je Client sind u. U. folgende oder ähnliche Angaben bei der erstmaligen Einrichtung der WLAN-Verbindung erforderlich:
- CA Zertifikat: Systemzertifikat
- Domain: z. B. ldap.ihre-schule.de
Installation Self Service Password
Für die Installation benötigen Sie zunächst die aktuellste .deb-Datei, welche Sie unter ltb-project.org/download finden.
Kopieren Sie diese in das Verzeichnis root ihres Samba-Servers.
Installation des heruntergeladenen .deb-Pakets
dpkg -i /root/self-service-password_<heruntergeladene version>_all.deb
# Ggf. sind zusätzliche Pakete erforderlich.
# Diese können Sie mit folgendem Befehl nachinstallieren:
# apache2 php php-ldap php-mcrypt php-mbstring
Kopieren und Editieren der zugehörigen Apache-Konfigurationsdatei
cp /etc/apache2/sites-available/self-service-password.conf /etc/apache2/conf-available/
vim /etc/apache2/conf-available/self-service-password.conf
Datei /etc/apache2/conf-available/self-service-password.conf
Alias /selfservice /usr/share/self-service-password
<Directory /usr/share/self-service-password>
AllowOverride None
<IfVersion >= 2.3>
Require all granted
</IfVersion>
<IfVersion < 2.3>
Order Deny,Allow
Allow from all
</IfVersion>
</Directory>
<Directory /usr/share/self-service-password/scripts>
AllowOverride None
<IfVersion >= 2.3>
Require all denied
</IfVersion>
<IfVersion < 2.3>
Order Deny,Allow
Deny from all
</IfVersion>
</Directory>
Aktivieren der Apache-Konfiguration und Neustart des Apache-Servers
a2enconf self-service-password
service apache2 restart
Editieren der Self-Service-Password-Konfiguration
vim /usr/share/self-service-password/conf/config.inc.php
Datei /usr/share/self-service-password/conf/config.inc.php
# Nachfolgend sind nur jene Zeilen der Konfigurationsdatei dargestellt,
# in denen sich Änderungen ergeben. Passen Sie diese entsprechend an
# und ersetzen sie die Zeilen in der Konfigurationsdatei.
$ldap_url = "ldaps://ldap.ihre-schule.de:636";
$ldap_binddn = "CN=svc_selfservicepassword,OU=services,OU=Users,OU=School,DC=schulnetz,DC=intra";
$ldap_bindpw = "<LDAP-Passwort>";
$ldap_base = "OU=School,DC=schulnetz,DC=intra";
$ldap_login_attribute = "sAMAccountName";
$ad_mode = true;
$samba_mode = true;
$pwd_min_length = 8;
$use_questions = false;
$mail_from = "<E-Mail-Adresse zum Versenden neuer Passwörter>";
$mail_smtp_host = '<SMTP-Server>';
$mail_smtp_auth = true;
$mail_smtp_user = '<SMTP-Benutzer>';
$mail_smtp_pass = '<SMTP-Passwort>';
$mail_smtp_port = 587;
$use_sms = false;
$keyphrase = "<langes Passwort für Verschlüsselung>";
$lang = "de";
Aufruf der Webschnittstelle
Benutzer können das Tool Self Service Password nun dazu verwenden, ihr Passwort zu ändern oder sich an die im LDAP-Verzeichnis hinterlegte E-Mail-Adresse einen Link zum zurücksetzen des Passworts zukommen zu lassen.
Je nachdem, ob und wie Sie den Reverse-Proxy konfiguriert haben, ist Self Service Password unter der IP oder dem FQDN des Samba-Servers erreichbar - z. B.:
- 10.1.100.7/selfservice
- usermanagement.ihre-schule.de/selfservice
Letzte Aktualisierung der Seite: 2024-02-16 14:17