Обновлен Dockerfile для создания пользователя salvagebot с UID 1027 и добавления в группу users. Исправлены права доступа для рабочих директорий и файлов, что улучшает безопасность и совместимость. В main.py добавлено логирование информации о текущем пользователе и файлах, что упрощает отладку. Эти изменения повышают безопасность и информативность приложения.

This commit is contained in:
Vlad 2025-06-06 08:37:50 +03:00
parent df0eb4536a
commit e553b9584c
3 changed files with 29 additions and 6 deletions

View File

@ -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 && \

23
main.py
View File

@ -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:

Binary file not shown.