fix: root privileges drop on non unix systems (#1191)

Skip root privileges drop on non unix systems. It is
just not supported.

Signed-off-by: Andreas Schmitz <akkudoktor.net>
Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com>
This commit is contained in:
Bobby Noelte
2026-07-29 16:34:06 +02:00
committed by GitHub
parent e23bb7b497
commit 3c1f5d8bc0
+21 -2
View File
@@ -1,14 +1,21 @@
"""Server Module.""" """Server Module."""
import grp
import ipaddress import ipaddress
import os import os
import pwd
import re import re
import socket import socket
import sys
import time import time
from typing import Any, Optional from typing import Any, Optional
try:
# Only available on Linux/Unix type systems
import grp
import pwd
except ModuleNotFoundError:
grp = None # type: ignore[assignment]
pwd = None # type: ignore[assignment]
import psutil import psutil
from loguru import logger from loguru import logger
from pydantic import Field, field_validator from pydantic import Field, field_validator
@@ -185,6 +192,12 @@ def drop_root_privileges(run_as_user: Optional[str] = None) -> bool:
- The target user must exist inside the container (valid entry in - The target user must exist inside the container (valid entry in
``/etc/passwd`` and ``/etc/group``). ``/etc/passwd`` and ``/etc/group``).
""" """
if pwd is None or grp is None or not hasattr(os, "geteuid"):
if run_as_user is not None:
logger.error(f"Privilege switching is not supported on `{sys.platform}`.")
return False
return True
# Determine current user # Determine current user
current_user = pwd.getpwuid(os.geteuid()).pw_name current_user = pwd.getpwuid(os.geteuid()).pw_name
@@ -264,6 +277,10 @@ def fix_data_directories_permissions(run_as_user: Optional[str] = None) -> None:
run_as_user (Optional[str]): The user who should own the data directories and files. run_as_user (Optional[str]): The user who should own the data directories and files.
Defaults to current one. Defaults to current one.
""" """
if pwd is None or not hasattr(os, "geteuid") or not hasattr(os, "chown"):
logger.debug(f"Skipping data directory ownership fix on `{sys.platform}`.")
return
config_eos = get_config() config_eos = get_config()
base_dirs = [ base_dirs = [
@@ -442,6 +459,8 @@ class ServerCommonSettings(SettingsBaseModel):
@field_validator("run_as_user") @field_validator("run_as_user")
def validate_user(cls, value: Optional[str]) -> Optional[str]: def validate_user(cls, value: Optional[str]) -> Optional[str]:
if value is not None: if value is not None:
if pwd is None:
raise ValueError(f"User privilege switching is not supported on `{sys.platform}`.")
# Resolve target user info # Resolve target user info
try: try:
pw_record = pwd.getpwnam(value) pw_record = pwd.getpwnam(value)