Persönliche Homes 0700, auch bestehende Konten

useradd übernahm den Modus aus login.defs; je nach Distribution 0755,
dann las der Gast im unverschlüsselten Home mit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
adminandClaude Opus 5.5 committed 2026-10-27 21:21:24 +01:00
1 parent f950b47d69
commit 98a3aa3bf9
1 file changed
+29 -1
@@ -16,6 +16,7 @@ import json
import os
import pwd
import re
import stat
import subprocess
import sys
import time
@@ -187,6 +188,24 @@ def hintergrund_vorgeben(anmeldename):
return True
def home_abschotten(anmeldename):
"""
Home nur für den Benutzer selbst (27.10.2026). useradd nimmt den Modus
aus login.defs (HOME_MODE, sonst UMASK); je nach Distribution kommt
dabei 0755 heraus, dann könnte der Gast im unverschlüsselten Home
mitlesen. Gilt auch für Konten, die vor dieser Änderung angelegt wurden.
"""
eintrag = pwd.getpwnam(anmeldename)
try:
st = os.lstat(eintrag.pw_dir)
except FileNotFoundError:
return
if stat.S_ISDIR(st.st_mode) and st.st_uid == eintrag.pw_uid and st.st_mode & 0o077:
os.chmod(eintrag.pw_dir, 0o700)
print(f"{anmeldename}: Home auf 0700 gesetzt")
def sitzungen_beenden(anmeldename):
ausfuehren("loginctl", "terminate-user", anmeldename)
@@ -202,7 +221,10 @@ def anlegen(konto):
if not hash_.startswith("$6$"):
return "fehler", "Kein gültiger Passwort-Hash übermittelt."
ergebnis = ausfuehren("useradd", "--create-home", "--shell", "/bin/bash", "--comment", name, name)
ergebnis = ausfuehren(
"useradd", "--create-home", "--key", "HOME_MODE=0700",
"--shell", "/bin/bash", "--comment", name, name,
)
if ergebnis.returncode != 0:
return "fehler", f"useradd: {ergebnis.stderr.strip()[:300]}"
@@ -356,6 +378,12 @@ def main():
ergebnis, meldung = "fehler", str(fehler)[:300]
eintrag = {"id": konto["id"], "ergebnis": ergebnis, "meldung": meldung}
if ergebnis in ("angelegt", "aktiv", "gesperrt"):
try:
home_abschotten(name)
except (OSError, KeyError) as fehler:
print(f"{name}: Home nicht abgeschottet ({fehler})")
if ergebnis in ("angelegt", "aktiv"):
try:
hintergrund_vorgeben(name)