mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2026-01-31 18:11:54 +08:00
sticky pst
This commit is contained in:
@@ -33,6 +33,7 @@ class Partition:
|
||||
mount_path: str
|
||||
root_path: str
|
||||
user: str
|
||||
group: str
|
||||
|
||||
|
||||
# =====
|
||||
@@ -60,12 +61,13 @@ def _find_partitions(part_type: str, single: bool) -> list[Partition]:
|
||||
if line and not line.startswith("#"):
|
||||
fields = line.split()
|
||||
if len(fields) == 6:
|
||||
options = dict(re.findall(r"X-kvmd\.%s-(root|user)(?:=([^,]+))?" % (part_type), fields[3]))
|
||||
options = dict(re.findall(r"X-kvmd\.%s-(root|user|group)(?:=([^,]+))?" % (part_type), fields[3]))
|
||||
if options:
|
||||
parts.append(Partition(
|
||||
mount_path=os.path.normpath(fields[1]),
|
||||
root_path=os.path.normpath(options.get("root", "") or fields[1]),
|
||||
user=options.get("user", ""),
|
||||
group=options.get("group", ""),
|
||||
))
|
||||
if single:
|
||||
break
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
import sys
|
||||
import os
|
||||
import pwd
|
||||
import grp
|
||||
import shutil
|
||||
import subprocess
|
||||
|
||||
@@ -87,11 +88,28 @@ def _chown(path: str, user: str) -> None:
|
||||
if pwd.getpwuid(os.stat(path).st_uid).pw_name != user:
|
||||
_log(f"CHOWN --- {user} - {path}")
|
||||
try:
|
||||
shutil.chown(path, user)
|
||||
shutil.chown(path, user=user)
|
||||
except Exception as err:
|
||||
raise SystemExit(f"Can't change ownership: {err}")
|
||||
|
||||
|
||||
def _chgrp(path: str, group: str) -> None:
|
||||
if grp.getgrgid(os.stat(path).st_gid).gr_name != group:
|
||||
_log(f"CHGRP --- {group} - {path}")
|
||||
try:
|
||||
shutil.chown(path, group=group)
|
||||
except Exception as err:
|
||||
raise SystemExit(f"Can't change group: {err}")
|
||||
|
||||
|
||||
def _chmod(path: str, mode: int) -> None:
|
||||
_log(f"CHMOD --- 0o{mode:o} - {path}")
|
||||
try:
|
||||
os.chmod(path, mode)
|
||||
except Exception as err:
|
||||
raise SystemExit(f"Can't change permissions: {err}")
|
||||
|
||||
|
||||
# =====
|
||||
def _fix_msd(part: Partition) -> None:
|
||||
# First images migration
|
||||
@@ -112,13 +130,21 @@ def _fix_msd(part: Partition) -> None:
|
||||
|
||||
if part.user:
|
||||
_chown(part.root_path, part.user)
|
||||
if part.group:
|
||||
_chgrp(part.root_path, part.group)
|
||||
|
||||
|
||||
def _fix_pst(part: Partition) -> None:
|
||||
path = os.path.join(part.root_path, "data")
|
||||
_mkdir(path)
|
||||
if part.user:
|
||||
_chown(part.root_path, part.user)
|
||||
_chown(path, part.user)
|
||||
if part.group:
|
||||
_chown(part.root_path, part.group)
|
||||
_chgrp(path, part.group)
|
||||
if part.user and part.group:
|
||||
_chmod(part.root_path, 0o1775)
|
||||
|
||||
|
||||
# =====
|
||||
|
||||
Reference in New Issue
Block a user