GNU/Linux >> Znalost Linux >  >> Linux

Nastavení kontejnerových serverů SSH pro nahrávání relací pomocí protokolu tlog

V první části této série jsem zdůraznil některé výhody nahrávání relací a použití kontejnerových serverů SSH. Také jsem předvedl architekturu na vysoké úrovni. Jako přípravný krok byl jeden ze serverů s RHEL 8.2 nakonfigurován pro vytváření a hostování bezkořenových kontejnerů serveru SSH.

Po přípravě serveru a vytvoření uživatele (tester2 ), vytvoříme vlastní Dockerfile pro SSH server s nakonfigurovaným nahráváním relace.

V následujícím souboru Dockerfile používáme obraz ubi-init (multi-service), který podporuje systemd a má CMD /sbin/init jako výchozí pro spuštění systemd init službu. Pro toto nastavení platí následující předpoklady.

  • Služba zpřístupňuje port 2022 namísto 22 v kontejneru pro SSH
  • Nakonfigurujte tři uživatele (jmenovitě tester , tester2 a tester3 )
  • Pro uživatele kontejneru tester použijte stejné UID jako uživatel (tester2 ) spuštění kontejneru bez root na hostiteli, aby tento uživatel mohl být root v kontejneru
  • Změňte UID pro tester v kontejneru jako 0 (kořen)
  • Nakonfigurujte klíče SSH jako argumenty sestavení pro uživatele tester a tester2 a přihlášení na základě hesla pro tester3
  • Nakonfigurujte nahrávání relace pro uživatele tester2 a tester3 nastavením přihlašovacího shellu jako /usr/bin/tlog-rec-session
  • Namapujte trvalé svazky pro /home a /var/log/journal během vytváření kontejneru, aby byly zachovány domovské adresáře uživatelů a protokoly záznamu služeb SSH a relací
  • Zkopírujte soubor tlog-rec-session.conf z hostitele do kontejneru s následující konfigurací pro zachycování protokolů záznamu relací pomocí journald :
{"shell":"/bin/bash","notice":"\nATTENTION! Your session is being recorded!\n\n","latency":10,"payload":2048,"log":{"input":false,"output":true,"window":true},"limit":{"rate":16384,"burst":32768,"action":"pass"},"file":{"path":""},"syslog":{"facility":"authpriv","priority":"info"},"journal":{"priority":"info","augment":true},"writer":"journal"}

[ Vyzkoušejte si záznam relace v živé laboratoři: Konfigurace záznamu relace na terminálu ]

Dockerfile pro kontejner SSH

Zde je ukázkový soubor Dockerfile pro kontejner SSH:

FROM ubi8/ubi-init

ARG ADMIN_PUBLIC_KEY
ARG TESTER2_PUBLIC_KEY

RUN yum -y install openssh-server ed openssh-clients tlog glibc-langpack-en && yum clean all && systemctl enable sshd;
RUN sed -i 's/#Port.*$/Port 2022/' /etc/ssh/sshd_config && chmod 775 /var/run && rm -f /var/run/nologin
RUN mkdir /etc/systemd/system/sshd.service.d/ && echo -e '[Service]\nRestart=always' > /etc/systemd/system/sshd.service.d/sshd.conf

COPY tlog-rec-session.conf /etc/tlog/tlog-rec-session.conf
RUN adduser --system -s /bin/bash -u 1001 tester && \ #UID matching user uid on host
           adduser --system -s /usr/bin/tlog-rec-session -u 1000 tester2 && \
           adduser --system -s /usr/bin/tlog-rec-session -u 1002 tester3 -p y5utxaxUDNFII && \
           mkdir -p /home/tester/.ssh /home/tester2/.ssh /home/tester3/.ssh

RUN touch /home/tester/.ssh/authorized_keys /home/tester2/.ssh/authorized_keys /home/tester3/.ssh/authorized_keys && \
           chmod 700 /home/tester/.ssh /home/tester2/.ssh /home/tester3/.ssh && \
           chmod 600 /home/tester/.ssh/authorized_keys /home/tester2/.ssh/authorized_keys /home/tester3/.ssh/authorized_keys && \
           sed -i 's/1001/0/g' /etc/passwd && \ #Update UID with root UID
           echo ${ADMIN_PUBLIC_KEY} >> /home/tester/.ssh/authorized_keys && \
           echo ${TESTER2_PUBLIC_KEY} >> /home/tester2/.ssh/authorized_keys && \
           chown -R tester2:tester2 /home/tester2/ && chown -R tester3:tester3 /home/tester3/ && chown -R tester:tester /home/tester
LABEL Description="This ssh server is running systemd with rootless podman"
EXPOSE 2022

CMD ["/sbin/init"]

Uložte soubor do domovského adresáře jako sshdockfile. Zkopírujte výchozí /etc/tlog/tlog-rec-session.conf do domovského adresáře.

Vytvořte obrázek kontejneru

Chcete-li vytvořit obrázek kontejneru s požadovanými klíči, vygenerujte pro uživatele nový pár klíčů. Dále exportujte výchozí a nově vytvořený veřejný klíč jako proměnné. Nakonec je předejte jako argumenty sestavení pomocí následujícího. Zde je postup:

# ssh-keygen-t ecdsa ; ssh-keygen -t ecdsa -f .ssh/tester2

# export ADMIN_PUBLIC_KEY=`cat /home/test2/.ssh/id_ecdsa.pub`

# export TESTER2_PUBLIC_KEY=`cat /home/test2/.ssh/tester2.pub`

# podman build -t testsshd -f sshdockfile --cgroup-manager=cgroupfs --build-arg ADMIN_PUBLIC_KEY="$ADMIN_PUBLIC_KEY" --build-arg TESTER2_PUBLIC_KEY="$TESTER2_PUBLIC_KEY"

cgroup-manager argument vyžaduje cgroups-v2 a je nezbytný pro to, aby kontejner bez root používal systemd úspěšně. Podman hlásí následující chybu, pokud není tento argument předán:

systemd cgroup flag passed, but systemd support for managing cgroups is not available: OCI runtime error

Pokud je sestavení úspěšné, dalším krokem je spuštění kontejneru s požadovanými trvalými svazky. Tyto svazky (pro /var/log/journal a /home ) jsou buď předem vytvořené, nebo je Podman vytváří dynamicky v volume adresář ve výchozím umístění úložiště (podman info | grep -i graphroot ).

Spusťte server SSH

Protože kontejnery bez rootu nepodporují zásuvné moduly CNI pro síťování, je k odhalení služby SSH namapován preferovaný vyšší port (>1024).

# podman run -d --name=rootless_ssh1 -v ssh1home:/home:Z -v ssh1logs:/var/log/journal:Z -p 33000:2022 --cgroup-manager=cgroupfs localhost/testsshd

Otestujte přístup SSH

Z hostitelského počítače se přihlaste k serveru SSH pomocí klíčů SSH pro uživatele tester a tester2 a heslo (redhat123 ) pro tester3 .

# ssh -l tester -i /home/test2/.ssh/id_ecdsa localhost -p 33000

# ssh -l tester2 -i /home/test2/.ssh/tester2 localhost -p 33000

# ssh -l tester3 localhost -p 33000

Pro tester2 se zobrazí zpráva, že se relace nahrává a tester3 .

Ověřit záznam relace

Po přihlášení jako testuser2 a testuser3 a provádění některých příkazů, existují tlog záznamy v souboru deníku. Jako tester uživatel, spusťte v kontejneru následující příkaz:

# journalctl | grep tlog-rec-session

Každý tlog záznam má ID hostitele, ID záznamu a přidruženého uživatele. Například:

"host":"0ce2921675b0","rec":"26b55a3aafd94f40b49473ac33bd2c96-42-f99b3","user":"tester2"

Tyto položky protokolu jsou také přístupné z hostitele pomocí volume umístění:

/home/test2/.local/share/containers/storage/volumes/ssh1logs/_data/<containerid>/system.journal

Pod ssh1logs/_data může být více než jeden adresář pokud byl předchozí kontejner(y) ukončen a nahrazen novým.

Přehrání nahrané relace

tlog-play příkaz podporuje přehrávání relace. Administrátor má obvykle zájem o přehrání konkrétní uživatelské relace. Chcete-li toho dosáhnout, exportujte položky relace pro danou relaci z protokolů žurnálu a uložte je do místního souboru.

Identifikujte konkrétní ID záznamu a použijte jej k filtrování všech záznamů pomocí následujícího awk příkaz:

# journalctl --file .local/share/containers/storage/volumes/ssh1logs/_data/<containerid>/system.journal | awk -F '{"' '$0~/<tlog record id>/{ print "\{\"" $2 }' 2>/dev/null > ~/session_recording.log

# tlog-play -r file -i ~/session_recording.log

Tímto způsobem mohou administrátoři oddělit a uložit specifické protokoly relací pro každou uživatelskou relaci a na požádání je přehrát. Tyto protokoly relací lze také odeslat do centrálního umístění pro účely auditu. Ve výchozím nastavení tlog nezachycuje standardní vstup pro uživatele, takže citlivé informace, jako jsou hesla, nejsou zachyceny a uloženy v protokolech.

Na hostiteli lze současně provozovat více než jeden kontejnerizovaný server SSH (pomocí různých mapování portů), přičemž každý z kontejnerů má samostatné uživatelské profily a samostatná mapování trvalých svazků. Samotné kontejnery lze také nakonfigurovat jako systemd služby na hostiteli, abyste je spustili při spouštění.

Sbalit

V příštím díle představíme Red Hat IDM a backend servery (integrované s IDM). Řízení přístupu založené na hostiteli a centralizované sudo bude nakonfigurován pro uživatele/skupiny z IDM, aby bylo možné spravovat, kteří uživatelé mohou provádět jaké příkazy na kterých hostitelích.

[ Začínáte s kontejnery? Podívejte se na tento bezplatný kurz. Nasazení kontejnerových aplikací:technický přehled. ]


Linux
  1. 3 způsoby, jak konfiguruji SSH pro soukromí

  2. 3 tipy pro tisk s Linuxem

  3. Nastavení kontejnerových serverů SSH pro nahrávání relací pomocí protokolu tlog

  1. Použijte CloudFlare s Rackspace

  2. Nastavení subdomény s Apache na Linuxu

  3. jak zakázat přihlášení SSH pomocí hesla pro některé uživatele?

  1. Zaznamenejte svou terminálovou relaci pomocí Asciinema

  2. Jak omezit přístup SSH pro uživatele pomocí LShell (Limited Shell)

  3. Ssh – protokolování pokusů o přístup Ssh?