Мой 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"]
Код: Выделить всё
#!/bin/bash
/bin/bash /root/run.sh
gunicorn --bind 0.0.0.0:5002 __init__:app
Однако я не хочу переключаться на root для запуска контейнера.
Есть ли решение запустить службу vsftpd от имени пользователя root, но запустить контейнер от имени пользователя без полномочий root?
Изменить: если я удалю USER appuser из второго последняя строка, все будет работать нормально.
Подробнее здесь: https://stackoverflow.com/questions/783 ... ce-as-root