Bagaimana mencegah melampirkan atau mengeksekusi dalam wadah buruh pelabuhan

9

Bagaimana cara mencegah agar pengguna dari wadah buruh pelabuhan yang dibuat sebelumnya tidak dapat mengakses sebuah shell di dalam instance yang berjalan dari wadah itu? Saya telah googled dan membaca semua posting yang terkait dengan skenario ini dan muncul tanpa solusi yang berfungsi. Saya mencoba untuk mencegah akses ke sumber daya yang diberikan dalam wadah, demi penyelidikan ini, katakanlah ini adalah nomor seri dalam file konfigurasi. Saya membangun berdasarkan java: 7 gambar yang didasarkan pada gambar ubuntu .

Untuk menguji solusi Anda, lakukan hal berikut:

  1. Buat dan jalankan wadah buruh pelabuhan Anda

  2. Ekspor kontainer Anda

    ekspor buruh pelabuhan [nama wadah] | gzip -c> mycontainer.tar.gz

  3. Impor wadah Anda pada sistem eksternal

    gzip -dc mycontainer.tar.gz | impor buruh pelabuhan - [nama wadah]

  4. Jalankan wadah

  5. Shell ke wadah berjalan menggunakan salah satu / semua metode berikut:

    docker exec -it [nama wadah] bash

    buruh pelabuhan melampirkan [nama wadah]

    run docker -ti --entrypoint = / bin / bash [nama wadah]

[nama wadah] adalah nama wadah Anda

bash, dash, dan sh adalah semua shell yang valid

Paul Gregoire
sumber
1
Jika Anda mencoba melindungi informasi di dalam wadah Anda, buruh pelabuhan bukanlah teknologi yang Anda inginkan. Bahkan jika Anda dapat membatasi akses shell, ada banyak cara sepele lainnya untuk mendapatkan akses ke sistem file di dalam wadah.
EEAA
Sayangnya saya harus menggunakan buruh pelabuhan dalam hal ini; Saya menyadari bahwa itu tidak ideal dalam kasus ini.
Paul Gregoire
Hei @ EEAA bisakah Anda mengarahkan saya ke daftar "cara sepele" itu? Apa yang akan Anda sarankan daripada buruh pelabuhan?
nils petersohn

Jawaban:

5

Khusus untuk bashperintah, saya menambahkan file .bashrc exitpada akhir file, jadi pengguna log in dan akhirnya ditendang keluar, tetapi pengguna masih dapat menggunakan shperintah.

José Roberto García Chico
sumber
3

Untuk menambahkan jawaban Jose, solusi lain adalah dengan ...

docker exec :id -it /bin/rm -R /bin/*

Itu menghilangkan sh dan perintah bin yang berguna di linux. Saya tidak yakin apa yang akan Anda lakukan untuk masuk ke wadah pada saat itu. Meskipun saya tahu bahwa Anda mungkin dapat menggunakan debugger memori untuk mendapatkan variabel lingkungan dari wadah yang sedang berjalan, tetapi membuatnya jauh lebih menyebalkan ... Saya ingin tahu apakah ada cara untuk mengunci memori itu di cincin 0 dan mengambilnya akses ssh sama sekali ke host.

Jika ada yang tahu cara memecahkannya, saya akan tertarik mengetahui caranya.

EDIT

Anda ingin menggunakan rahasia buruh pelabuhan jika Anda melindungi informasi sensitif. Periksa:

https://docs.docker.com/engine/swarm/secrets/

Dr.Knowitall
sumber
Ini berfungsi dengan baik untuk tujuan saya, terima kasih! Meskipun saya percaya perintah yang benar adalah:docker exec -it 'container-id' /bin/rm -R /bin/*
Ty01
Ini tidak berfungsi untuk saya Docker version 18.09.6, build 481bc77156 . The pendekatan dengan@ty01 memberikan pesan kesalahan ini /bin/rm: cannot remove '/bin/<filename>': No such file or directoryuntuk semua filenames di /bin. The jawaban dengan@Dr. Knowitall pengembalian Error: No such container: :id. Bahkan jika saya ganti iddengan CONTAINER_IDdari docker ps, masih memberikan pesan kesalahan yang sama.
edesz
0

Jika informasi yang ingin Anda lindungi adalah nomor seri, maka mengenkripsi informasi itu adalah satu-satunya cara pasti untuk melindunginya. Anda dapat memilih berbagai cara untuk mengenkripsi data rahasia, pastikan Anda menggunakan kunci yang kuat. Anda juga dapat membuat aplikasi Anda mengirim data rahasia ke server Anda untuk mengidentifikasi validitasnya dan berdasarkan pada balasan dari server Anda, aplikasi tersebut dapat terus bekerja atau berhenti dan menampilkan pesan.

Singkatnya, selalu asumsikan bahwa aplikasi Anda dapat dibedah sepenuhnya dan menyeluruh. Selalu mengenkripsi semua data rahasia dan penting menggunakan kunci yang kuat sehingga memecahkan kunci akan memakan waktu yang sangat lama (asumsikan bahwa algoritma enkripsi tersedia untuk umum atau terkenal).

Mencegah akses sendirian bahkan jika Anda menemukan cara untuk melakukannya hanya akan memberikan rasa aman yang salah.

Donny Kurnia
sumber
... maka rahasia untuk melindungi menjadi kunci enkripsi, dan Anda perlu melindunginya dengan kunci enkripsi. Dan melindungi bahwa kunci dengan kunci dan melindungi yang kunci dengan kunci dan ...
Mark