mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2026-08-01 22:56:11 +00:00
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:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user