Обновлен Dockerfile для создания пользователя salvagebot с UID 1027 и добавления в группу users. Исправлены права доступа для рабочих директорий и файлов, что улучшает безопасность и совместимость. В main.py добавлено логирование информации о текущем пользователе и файлах, что упрощает отладку. Эти изменения повышают безопасность и информативность приложения.
This commit is contained in:
parent
df0eb4536a
commit
e553b9584c
12
Dockerfile
12
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 LD_LIBRARY_PATH=/opt/oracle/instantclient_19_21${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
|
||||||
ENV PATH=/opt/oracle/instantclient_19_21:$PATH
|
ENV PATH=/opt/oracle/instantclient_19_21:$PATH
|
||||||
|
|
||||||
# Создаем пользователя для безопасности
|
# Создаем пользователя для безопасности с UID 1027 и добавляем в группу users
|
||||||
RUN useradd --create-home --shell /bin/bash salvagebot
|
RUN useradd --create-home --shell /bin/bash --uid 1027 --gid 100 salvagebot
|
||||||
|
|
||||||
# Создаем рабочую директорию и устанавливаем права
|
# Создаем рабочую директорию и устанавливаем права
|
||||||
RUN mkdir -p /home/salvagebot/app && \
|
RUN mkdir -p /home/salvagebot/app && \
|
||||||
chown -R salvagebot:salvagebot /home/salvagebot/app
|
chown -R salvagebot:users /home/salvagebot/app
|
||||||
|
|
||||||
USER salvagebot
|
USER salvagebot
|
||||||
WORKDIR /home/salvagebot/app
|
WORKDIR /home/salvagebot/app
|
||||||
|
|
||||||
# Копируем файл зависимостей
|
# Копируем файл зависимостей
|
||||||
COPY --chown=salvagebot:salvagebot requirements.txt .
|
COPY --chown=salvagebot:users requirements.txt .
|
||||||
|
|
||||||
# Устанавливаем Python зависимости
|
# Устанавливаем Python зависимости
|
||||||
RUN pip install --user --no-cache-dir -r requirements.txt
|
RUN pip install --user --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
# Копируем entrypoint скрипт
|
# Копируем entrypoint скрипт
|
||||||
COPY --chown=salvagebot:salvagebot docker-entrypoint.sh /usr/local/bin/
|
COPY --chown=salvagebot:users docker-entrypoint.sh /usr/local/bin/
|
||||||
USER root
|
USER root
|
||||||
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
|
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
|
||||||
USER salvagebot
|
USER salvagebot
|
||||||
|
|
||||||
# Копируем код приложения
|
# Копируем код приложения
|
||||||
COPY --chown=salvagebot:salvagebot . .
|
COPY --chown=salvagebot:users . .
|
||||||
|
|
||||||
# Создаем необходимые директории с правильными правами
|
# Создаем необходимые директории с правильными правами
|
||||||
RUN mkdir -p logs images data && \
|
RUN mkdir -p logs images data && \
|
||||||
|
|||||||
23
main.py
23
main.py
@ -234,6 +234,9 @@ def convert_photo_path(db_path: str) -> str:
|
|||||||
if not db_path:
|
if not db_path:
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
# Убираем лишние пробелы из пути
|
||||||
|
db_path = db_path.strip()
|
||||||
|
|
||||||
# Базовый путь из константы
|
# Базовый путь из константы
|
||||||
base_path = image_path
|
base_path = image_path
|
||||||
|
|
||||||
@ -285,6 +288,13 @@ async def send_vehicle_photos(message: Message, vin: str, photo_paths: list, mak
|
|||||||
return
|
return
|
||||||
|
|
||||||
try:
|
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
|
# Telegram позволяет максимум 10 фотографий в media group
|
||||||
photos_per_group = 10
|
photos_per_group = 10
|
||||||
total_photos = len(photo_paths)
|
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):
|
for i, photo_path in enumerate(photo_group):
|
||||||
try:
|
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):
|
if os.path.exists(photo_path):
|
||||||
# Создаем InputMediaPhoto
|
# Создаем InputMediaPhoto
|
||||||
if i == 0 and group_num == 1:
|
if i == 0 and group_num == 1:
|
||||||
|
|||||||
BIN
salvagebot
BIN
salvagebot
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user