Запустить контейнер от имени пользователя без полномочий root, но запустить службу от имени пользователя root? ⇐ Linux

Anonymous
Запустить контейнер от имени пользователя без полномочий root, но запустить службу от имени пользователя root?

Сообщение Anonymous »

Я пытаюсь создать уязвимое докеризованное веб-приложение для тестирования, используя vsftpd 2.3.4.
Мой Dockerfile выглядит следующим образом:

Код: Выделить всё

# For more information, please refer to https://aka.ms/vscode-docker-python
FROM python:3.12-slim

EXPOSE 5002

# Keeps Python from generating .pyc files in the container
ENV PYTHONDONTWRITEBYTECODE=1

# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1

# Install pip requirements
COPY requirements.txt .
RUN python -m pip install -r requirements.txt

# Install vsftpd 2.3.4
RUN apt-get update -y && apt-get install -y git
WORKDIR /root/
RUN git clone https://github.com/Anon-Exploiter/vulnerable-packages && \
cd vulnerable-packages && \
cd backdoored-vsftpd-2.3.4 && \
mv * /root/ && \
cd /root && \
rm -rfv vulnerable-packages
RUN apt-get purge -y git && \
apt-get -y autoclean && \
apt-get -y autoremove && \
apt-get -y clean
RUN mkdir /usr/share/empty/ && \
mkdir /var/ftp/ && \
useradd -d /var/ftp ftp
RUN chown root:root /var/ftp && \
chmod og-w /var/ftp
RUN mv vsftpd /usr/local/sbin/vsftpd && \
mv vsftpd.conf /etc/
RUN echo 'echo Started FTP Server@ `hostname -i 2>/dev/null`:21' > /root/run.sh && \
echo "/usr/local/sbin/vsftpd" >> /root/run.sh
# CMD ["/bin/bash", "-c", "/bin/bash run.sh"]

WORKDIR /app
COPY . /app

# Creates a non-root user with an explicit UID and adds permission to access the /app folder
# For more info, please refer to https://aka.ms/vscode-docker-python-configure-containers
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser

# During debugging, this entry point will be overridden. For more information, please refer to https://aka.ms/vscode-docker-python-debug
# CMD ["gunicorn", "--bind", "0.0.0.0:5002", "__init__:app"]

COPY scripts/start.sh .
USER root
RUN chmod +x start.sh
RUN chmod +x /root/run.sh
USER appuser
CMD ["/bin/bash", "-c", "./start.sh"]
... и start.sh выглядит так:

Код: Выделить всё

#!/bin/bash
/bin/bash /root/run.sh
gunicorn --bind 0.0.0.0:5002 __init__:app
Я всегда получаю сообщение об ошибке run.sh: разрешение запрещено после запуска контейнера, поскольку run.sh требует привилегий root для запуска службы vsftpd, но контейнер пользователь — appuser.
Однако я не хочу переключаться на root для запуска контейнера.
Есть ли решение запустить службу vsftpd от имени пользователя root, но запустить контейнер от имени пользователя без полномочий root?

Изменить: если я удалю USER appuser из второго последняя строка, все будет работать нормально.

Подробнее здесь: https://stackoverflow.com/questions/783 ... ce-as-root

Вернуться в «Linux»