GNU/Linux >> Belajar Linux >  >> Linux

Menyiapkan server SSH kemas untuk perekaman sesi dengan tlog

Di bagian pertama dari seri ini, saya menyoroti beberapa manfaat dari perekaman sesi dan penggunaan server SSH dalam wadah. Saya juga memamerkan arsitektur tingkat tinggi. Sebagai langkah persiapan, salah satu server dengan RHEL 8.2 dikonfigurasi untuk membuat dan menghosting container rootless server SSH.

Setelah menyiapkan server dan membuat pengguna (tester2 ), kami membuat Dockerfile khusus untuk server SSH dengan perekaman sesi yang dikonfigurasi.

Dalam file Docker berikut, kami menggunakan gambar ubi-init (multi-layanan), yang mendukung systemd dan memiliki CMD /sbin/init sebagai default untuk memulai systemd layanan ini. Asumsi berikut dibuat untuk penyiapan ini.

  • Layanan mengekspos port 2022 alih-alih 22 dalam wadah untuk SSH
  • Konfigurasikan tiga pengguna (yaitu tester , tester2 , dan tester3 )
  • Gunakan UID yang sama untuk tester pengguna kontainer sebagai pengguna (tester2 ) menjalankan container tanpa root pada host sehingga pengguna ini dapat menjadi root di dalam container
  • Ubah UID untuk tester dalam wadah sebagai 0 (root)
  • Konfigurasikan kunci SSH sebagai argumen build untuk tester pengguna dan tester2 dan login berbasis kata sandi untuk tester3
  • Konfigurasikan perekaman sesi untuk pengguna tester2 dan tester3 dengan mengatur shell login sebagai /usr/bin/tlog-rec-session
  • Petakan volume persisten untuk /home dan /var/log/journal selama pembuatan wadah untuk mempertahankan direktori beranda pengguna dan layanan SSH dan log rekaman sesi
  • Salin tlog-rec-session.conf dari host ke dalam wadah dengan konfigurasi berikut untuk menangkap log rekaman sesi menggunakan 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"}

[ Cobalah perekaman sesi di lab langsung: Mengonfigurasi Perekaman Sesi Terminal ]

Dockerfile untuk wadah SSH

Berikut adalah contoh Dockerfile untuk wadah 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"]

Simpan file di direktori home sebagai sshdockfile. Salin /etc/tlog/tlog-rec-session.conf default ke direktori home.

Buat gambar kontainer

Untuk membuat gambar kontainer dengan kunci yang diinginkan, buat sepasang kunci baru untuk pengguna. Selanjutnya, ekspor default dan kunci publik yang baru dibuat sebagai variabel. Terakhir, berikan mereka sebagai argumen build menggunakan yang berikut ini. Berikut prosesnya:

# 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 argumen membutuhkan cgroups-v2 dan diperlukan untuk wadah tanpa akar untuk menggunakan systemd berhasil. Podman melaporkan kesalahan berikut kecuali argumen ini diteruskan:

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

Jika build berhasil, langkah selanjutnya adalah menjalankan container dengan volume persisten yang diinginkan. Volume ini (untuk /var/log/journal dan /home ) sudah dibuat sebelumnya, atau Podman membuatnya secara dinamis di volume direktori di bawah lokasi penyimpanan default (podman info | grep -i graphroot ).

Jalankan server SSH

Karena container rootless tidak mendukung plugin CNI untuk jaringan, port pilihan yang lebih tinggi (>1024) dipetakan untuk mengekspos layanan SSH.

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

Uji akses SSH

Dari mesin host, masuk ke server SSH menggunakan kunci SSH untuk pengguna tester dan tester2 , dan kata sandi (redhat123 ) untuk 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

Pesan bahwa sesi sedang direkam muncul untuk tester2 dan tester3 .

Validasi rekaman sesi

Setelah masuk sebagai testuser2 dan testuser3 dan menjalankan beberapa perintah, ada tlog entri dalam file log jurnal. Sebagai tester pengguna, jalankan perintah berikut di dalam wadah:

# journalctl | grep tlog-rec-session

Setiap tlog entri memiliki ID host, ID catatan, dan pengguna terkait. Misalnya:

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

Entri log ini juga dapat diakses dari host menggunakan volume lokasi:

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

Mungkin ada lebih dari satu direktori di bawah ssh1logs/_data jika penampung sebelumnya telah dihentikan dan penampung baru menggantikannya.

Putar ulang sesi yang direkam

tlog-play perintah mendukung pemutaran ulang sesi. Biasanya administrator tertarik untuk memutar ulang sesi pengguna tertentu. Untuk mencapainya, ekspor entri sesi untuk sesi tertentu dari log jurnal dan simpan ke dalam file lokal.

Identifikasi ID catatan tertentu dan gunakan itu untuk memfilter semua catatan dengan awk berikut perintah:

# 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

Dengan cara ini, administrator dapat memisahkan dan menyimpan log sesi tertentu untuk setiap sesi pengguna dan memutar ulang sesuai permintaan. Log sesi ini juga dapat dikirim ke lokasi pusat untuk tujuan audit. Secara default, tlog tidak menangkap input standar untuk pengguna, sehingga informasi sensitif seperti sandi tidak ditangkap dan disimpan dalam log.

Lebih dari satu server SSH dalam container dapat dijalankan secara bersamaan pada host (menggunakan pemetaan port yang berbeda), dengan masing-masing container memiliki profil pengguna yang terpisah dan pemetaan volume persisten yang terpisah. Wadah itu sendiri juga dapat dikonfigurasi sebagai systemd layanan di host untuk memulainya saat boot.

Menutup

Kami memperkenalkan Red Hat IDM dan server backend (terintegrasi dengan IDM) di bagian selanjutnya. Kontrol akses berbasis host dan sudo terpusat akan dikonfigurasi untuk pengguna/grup dari IDM untuk mengelola pengguna mana yang dapat menjalankan perintah apa di host mana.

[ Memulai container? Lihat kursus gratis ini. Menyebarkan aplikasi kemas:Tinjauan teknis. ]


Linux
  1. Rekam sesi terminal Anda dengan Asciinema

  2. Menyiapkan server SSH kemas untuk perekaman sesi dengan tlog

  3. Gunakan CloudFlare dengan Rackspace

  1. Mulai dengan Server Cloud

  2. alat seperti teamviewer untuk ssh?

  3. bagaimana cara menonaktifkan login SSH dengan kata sandi untuk beberapa pengguna?

  1. 3 cara saya mengonfigurasi SSH untuk privasi

  2. 3 tips untuk mencetak dengan Linux

  3. Cara Membatasi Akses SSH untuk Pengguna dengan LShell (Limited Shell)