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:
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)
|
||||
|
||||
Reference in new issue
Block a user