Хотя вы можете запустить службу с помощью 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"]
Во-первых, позвольте мне сказать, что все, что вы делаете в этой области, зависит от того, будут ли пользователи находить творческие способы обойти то, что вы внедрили.
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.