unixadmin.free.fr Handy Unix Plumbing Tips and Tricks

14sept/18Off

readonly-access Docker container

What's up !!!

Un petit Post pour répondre à une petite question. Comment permettre un accès readonly à un utilisateur lambda sans modifier le système, les droits sur les fichiers et sans passer par une gestion des ACL.

Méthode artisanale: Lancer un container docker exécutant openSSH server sur un système Linux avec un accès en readonly sur certains de ces filesystems.

Installation de Docker CE via Satellite 6 sinon voir le site Docker
CentOS 7

yum install docker-ce -y

Red Hat 7

yum install docker -y

Créer le Filesystem pour le docker storage

lvcreate -L 512M -n lv_docker rootvg
mkfs.ext4 /dev/mapper/rootvg-lv_docker
mkdir /softwares/docker
cp /etc/fstab /etc/fstab.old && echo '/dev/mapper/rootvg-lv_docker /softwares/docker ext4 defaults,noatime 1 2' >> /etc/fstab
mount /softwares/docker

CENTOS 7 ajouter les options suivantes au fichier /usr/lib/systemd/system/docker.service
Paramètre Proxy, Docker Storage Path

[Service]

Environment="HTTP_PROXY=http://user:Passw0rd@proxy:8080" "HTTPS_PROXY=http://user:Passw0rd@proxy:8080"" "NO_PROXY=localhost,127.0.0.1"

ExecStart=/usr/bin/dockerd -g /softwares/docker

RHEL 7 Ajouter les options suivantes au fichier /usr/lib/systemd/system/docker.service
Paramètre Proxy, Docker Storage Path et Docker0 bridge IP

[Service]

Environment="HTTP_PROXY=http://user:Passw0rd@proxy:8080" "HTTPS_PROXY=http://user:Passw0rd@proxy:8080"" "NO_PROXY=localhost,127.0.0.1"

ExecStart=/usr/bin/dockerd-current \
          --graph /softwares/docker \
          --bip=192.168.1.1/28 \

Prise en compte au niveau systemd

systemctl daemon-reload
systemctl start docker
systemctl status docker
systemctl enable docker

Créer un fichier Dockerfile avec le contenu ci-dessous

FROM centos:7
ENV container docker
ENV http_proxy http://user:Passw0rd@proxy:8080
ENV https_proxy http://user:Passw0rd@proxy:8080
RUN yum -y install openssh-server openssh-clients less
RUN yum clean all
RUN sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN echo root:Passw0rd | chpasswd
RUN ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa
RUN ssh-keygen -f /etc/ssh/ssh_host_ed25519_key -N '' -t ed25519
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
RUN unset http_proxy
RUN unset https_proxy

Build du container Docker

docker build -t readonly-access .
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
readonly-access     latest              7142868f79c8        4 minutes ago       301MB
centos              7                   5182e96772bf        5 weeks ago         200MB

Lancer le container readonly-access en spécifiant les filesystems à mapper en readonly.

# docker run -d -it -p 822:22 --restart always --name readonly-access -h docker-node007  -v /exploit/appli/app1:/exploit/appli/app1:ro -v /stor/data:/stor/data:ro -v /softwares/middleware:/softwares/middleware:ro readonly-access
[root@node007 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                 NAMES
9aefe62d342d        readonly-access     "/usr/sbin/sshd -D"   4 seconds ago       Up 3 seconds        0.0.0.0:822->22/tcp   readonly-access

Connexion au container

$ ssh root@node007 -p 822

[root@docker-node007 ~]#
Filesystem                        1K-blocks   Used Available Use% Mounted on
overlay                              499656 320604    142356  70% /
tmpfs                                   65536      0     65536   0% /dev
tmpfs                               3996492      0   3996492   0% /sys/fs/cgroup
shm                                      65536      0     65536   0% /dev/shm
/dev/mapper/rootvg-lv_docker           499656 320604    142356  70% /etc/hosts
/dev/mapper/rootvg-lv_data            2031440 471156   1449532  25% /stor/data
/dev/mapper/rootvg-lv_middleware    1015704  63156    894884   7% /softwares/middleware
/dev/mapper/rootvg-lv_app1              1015704   1376    956664   1% /exploit/appli/app1
tmpfs                               3996492      0   3996492   0% /proc/scsi
tmpfs                               3996492      0   3996492   0% /sys/firmware

[root@docker-node007 ~]# touch /stor/data/test
touch: cannot touch ‘/stor/data/test’: Read-only file system

Paramètre Docker:

-p 822:22 = Map de port 822 du système vers le port 22 du container
--restart always = Redémarre le container après un reboot de la VM
--name readonly-access = Nom du container
-h docker-node007 = hostname du container
-v /exploit/appli/app1:/exploit/appli/app1:ro = Monte le filesystems de la VM /exploit/appli/app1 dans le container en readonly
readonly-access = Nom de l'image du container

Remarque:
Mapper chaque filesystem en readonly. Si vous mapper le répertoire racine /exploit vous serez en read-write sur les sous répertoires /exploit/appli et /exploit/appli/app1

Taggé comme: Commentaires