Предоставление пользователям доступа к Shell с жесткими ограничениями

Хотя вы можете запустить службу с помощью systemd в контейнере, я согласен с комментарием xenoid о том, что вам не следует этого делать. И если вам не нужна CentOS, вы можете использовать один из официальных образов от Apache:

https://hub.docker.com/_/httpd

Если вам нужна CentOS, она тоже есть в Docker Hub:

https://hub.docker.com/r/centos/httpd-24-centos7

Из исходного кода видно, что сами Red Hat также не используют systemd:

FROM centos:centos7

# RHSCL httpd24 image.
#
# Volumes:
#  * /opt/rh/httpd24/root/var/www - Datastore for httpd
#  * /var/log/httpd24 - Storage for logs when $HTTPD_LOG_TO_VOLUME is set
# Environment:
#  * $HTTPD_LOG_TO_VOLUME (optional) - When set, httpd will log into /var/log/httpd24

EXPOSE 80
EXPOSE 443

COPY run-*.sh /usr/local/bin/
RUN mkdir -p /var/lib/httpd24
COPY contrib /var/lib/httpd24/

RUN rpmkeys --import file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 && \
    yum -y --setopt=tsflags=nodocs install https://www.softwarecollections.org/en/scls/rhscl/httpd24/epel-7-x86_64/download/rhscl-httpd24-epel-7-x86_64.noarch.rpm && \
    yum install -y --setopt=tsflags=nodocs gettext hostname bind-utils httpd24 httpd24-mod_ssl && \
    yum clean all

# When bash is started non-interactively, to run a shell script, for example it
# looks for this variable and source the content of this file. This will enable
# the SCL for all scripts without need to do 'scl enable'.
ENV BASH_ENV=/var/lib/httpd24/scl_enable \
    ENV=/var/lib/httpd24/scl_enable \
    PROMPT_COMMAND=". /var/lib/httpd24/scl_enable"


VOLUME ["/opt/rh/httpd24/root/var/www"]
VOLUME ["/var/log/httpd24"]

ENTRYPOINT ["/usr/local/bin/run-httpd24.sh"]
CMD ["httpd", "-DFOREGROUND"]

0
01.07.2020, 14:47
1 ответ

Во-первых, позвольте мне сказать, что все, что вы делаете в этой области, зависит от того, будут ли пользователи находить творческие способы обойти то, что вы внедрили.

Bash предоставляет концепцию «ограниченной оболочки», которая не позволяет пользователям использовать cdи ограничивает их только теми командами, которые существуют до -в их пути. Вы можете создать каталог, содержащий символические ссылки на набор «разрешенных» команд, и настроить путь пользователя так, чтобы он указывал на этот каталог :

.

https://www.gnu.org/software/bash/manual/html_node/The-Restricted-Shell.html

$ PATH=/tmp/ex rbash
$ ls
src
$ cd /
rbash: cd: restricted
$ export PATH=/usr/bin:$PATH
rbash: PATH: readonly variable
$

Обратите внимание, однако, что если вы поместите команду в путь, который может выполнять произвольные команды, это не поможет:

$ rbash
$ cd /tmp
rbash: cd: restricted
$ vim
:!/bin/bash
$ cd /tmp
$

Даже в документации к ограниченной оболочке Bash говорится:

Modern systems provide more secure ways to implement a restricted environment, such as jails, zones, or containers.

1
18.03.2021, 23:22

Теги

Похожие вопросы