diff --git a/Dockerfile b/Dockerfile index 5937e00..0b7c2aa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,30 +24,30 @@ ENV ORACLE_HOME=/opt/oracle/instantclient_19_21 ENV LD_LIBRARY_PATH=/opt/oracle/instantclient_19_21${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} ENV PATH=/opt/oracle/instantclient_19_21:$PATH -# Создаем пользователя для безопасности -RUN useradd --create-home --shell /bin/bash salvagebot +# Создаем пользователя для безопасности с UID 1027 и добавляем в группу users +RUN useradd --create-home --shell /bin/bash --uid 1027 --gid 100 salvagebot # Создаем рабочую директорию и устанавливаем права RUN mkdir -p /home/salvagebot/app && \ - chown -R salvagebot:salvagebot /home/salvagebot/app + chown -R salvagebot:users /home/salvagebot/app USER salvagebot WORKDIR /home/salvagebot/app # Копируем файл зависимостей -COPY --chown=salvagebot:salvagebot requirements.txt . +COPY --chown=salvagebot:users requirements.txt . # Устанавливаем Python зависимости RUN pip install --user --no-cache-dir -r requirements.txt # Копируем entrypoint скрипт -COPY --chown=salvagebot:salvagebot docker-entrypoint.sh /usr/local/bin/ +COPY --chown=salvagebot:users docker-entrypoint.sh /usr/local/bin/ USER root RUN chmod +x /usr/local/bin/docker-entrypoint.sh USER salvagebot # Копируем код приложения -COPY --chown=salvagebot:salvagebot . . +COPY --chown=salvagebot:users . . # Создаем необходимые директории с правильными правами RUN mkdir -p logs images data && \ diff --git a/main.py b/main.py index 3adefb8..9e2e5d7 100644 --- a/main.py +++ b/main.py @@ -234,6 +234,9 @@ def convert_photo_path(db_path: str) -> str: if not db_path: return "" + # Убираем лишние пробелы из пути + db_path = db_path.strip() + # Базовый путь из константы base_path = image_path @@ -285,6 +288,13 @@ async def send_vehicle_photos(message: Message, vin: str, photo_paths: list, mak return try: + # Дебаг информация о текущем пользователе + import pwd + import grp + current_user = pwd.getpwuid(os.getuid()) + current_groups = [grp.getgrgid(gid).gr_name for gid in os.getgroups()] + logging.info(f"DEBUG: Running as user: {current_user.pw_name}({os.getuid()}), groups: {current_groups}") + # Telegram позволяет максимум 10 фотографий в media group photos_per_group = 10 total_photos = len(photo_paths) @@ -309,6 +319,19 @@ async def send_vehicle_photos(message: Message, vin: str, photo_paths: list, mak for i, photo_path in enumerate(photo_group): try: # Проверяем существование файла + # Дебаг информация + import stat + import pwd + import grp + try: + stat_info = os.stat(photo_path) + file_owner = pwd.getpwuid(stat_info.st_uid).pw_name + file_group = grp.getgrgid(stat_info.st_gid).gr_name + file_perms = oct(stat_info.st_mode)[-3:] + logging.info(f"DEBUG: File {photo_path} - owner: {file_owner}({stat_info.st_uid}), group: {file_group}({stat_info.st_gid}), perms: {file_perms}") + except Exception as debug_e: + logging.warning(f"DEBUG: Cannot get file info for {photo_path}: {debug_e}") + if os.path.exists(photo_path): # Создаем InputMediaPhoto if i == 0 and group_num == 1: diff --git a/salvagebot b/salvagebot index 6621355..b3c2c7d 100644 Binary files a/salvagebot and b/salvagebot differ