‫Baiklah. Kami tahu tidak menjalankan sebagai root di wadah.
‫Tetapi, di luar wadah, root di wadah, omong-omong,
‫tidak memiliki akses langsung ke apa pun di host,
‫benar. Hanya karena Anda
‫root di sebuah wadah, Anda masih dipenjara di sana.
‫Tetapi, jika Anda
‫ingin mengambil level berikutnya, di mana jika pengguna bahkan memiliki root
‫di wadah, ingin keluar ke host, karena
‫ada kernel kerentanan seperti yang kita
‫bicarakan, seperti Sapi kotor atau kerentanan lain di Docker
‫atau sesuatu.
‫Kemudian, langkah selanjutnya yang Anda lakukan di sini adalah mengaktifkan ruang nama
‫pengguna, yang tidak diaktifkan secara default.
‫Saya memiliki tautan di sini yang mengarah ke
‫artikel blog yang membahas semuanya.
‫Pada dasarnya, ini adalah pengaturan per host yang Anda atur di
‫konfigurasi Docker. Docker JSON.
‫Ia memberi tahu Docker bahwa setiap saat ia membuat wadah
‫baru untuk menjalankan wadah
‫itu sebagai pengguna non root di host.
‫Jadi, pada dasarnya ada beberapa
‫program di sana, containerd dan runC, yang merupakan program lain yang
‫digunakan Docker untuk memulai wadah Anda.
‫Secara default, itu dijalankan sebagai root.
‫Fitur yang dimiliki Docker adalah untuk mengaktifkan ruang
‫nama pengguna, yang pada dasarnya
‫berarti sebagai Docker membuat wadah ini, itu tidak akan memunculkan
‫mereka sebagai sub proses yang berjalan seperti root seperti Docker tidak.
‫Ini akan menelurkan mereka sebagai pengguna bernomor tinggi.
‫Semacam, tidak harus pengguna acak, tetapi pengguna
‫tingkat tinggi.
‫Itu berarti jika wadah itu pernah
‫memiliki kerentanan keamanan di mana pengguna
‫dapat keluar dari wadah, masih ada hanya akan menjadi
‫pengguna di host. Karena itulah mereka akan bertindak
‫sebagai pengguna yang menggunakan proses yang dijalankan oleh wadah
‫itu. RunC pada dasarnya.
‫Program runC adalah yang meluncurkan wadah itu,
‫dan itu akan berjalan sebagai pengguna bernomor
‫tinggi, bukan root. Pengguna itu tidak benar-benar memiliki
‫hak istimewa di luar wadah itu. Jadi, fitur itu adalah
‫pengaturan per host, bukan pengaturan per wadah, dan tidak
‫semuanya berfungsi di bawah ruang nama pengguna.
‫Anda hanya harus mencoba dan berlatih.
‫Anda harus mengaktifkannya di beberapa server, coba aplikasi Anda
‫di server itu, lihat apakah mereka berfungsi.
‫Jika tidak, Anda harus membuat segmentasi
‫arsitektur Anda. Setiap kali saya mengimplementasikan
‫ruang nama pengguna dalam sebuah cluster, kami biasanya memiliki node pekerja tertentu
‫yang memiliki ruang nama pengguna diaktifkan.
‫Di situlah program-program dijalankan yang dapat mendukungnya, yang
‫bekerja dengannya.
‫Segala sesuatu yang lain harus berjalan di server Docker biasa
‫di tempat lain. Begitulah cara kami mengelompokkannya.
‫Kami membagi ke dalam dua kelas server.
‫Itu, Anda tahu, seperti jika Anda menjalankan DMZ, itulah yang
‫akan saya lakukan adalah saya akan menjalankan, saya akan
‫mengaktifkan, di DMZ, semua ruang nama pengguna, di
‫semua server, dan kemudian wadah yang menjalankan harus ada, harus mendukung
‫ruang nama pengguna.
‫Anda tidak dapat melihat aplikasi dan mencari tahu apakah mereka mendukung
‫ruang nama pengguna.
‫Itu adalah ... ruang nama pengguna belum tentu
‫merupakan fitur khusus Docker. Ini pada dasarnya
‫berarti wadah Anda berjalan di namespace
‫dan sekarang aplikasi yang menjalankan wadah itu juga
‫dikunci sedikit.
‫Tidak semuanya bisa mendukung itu. Anda hanya
‫perlu berlatih atau mungkin melakukan riset untuk
‫melihat apakah orang lain dapat membuatnya
‫bekerja di bawah sana. Anda tahu, untuk hal-hal umum seperti MySQL
‫dan hal-hal seperti itu. Tetapi jelas, untuk program
‫Anda sendiri yang sedang Anda kembangkan, Anda hanya perlu mengujinya untuk
‫melihat apakah mereka akan bekerja. Saya akan mengatakan sebagian
‫besar program dan bahasa umum yang saya jalankan, mereka bekerja
‫dengan baik di ruang nama pengguna. Masalah sebenarnya dengan ruang
‫nama pengguna adalah ketika Anda memiliki aplikasi yang perlu menulis
‫ke volume, atau untuk mengikat mount, yang
‫mungkin Anda punya unggah file pengguna dan Anda
‫membagikannya di banyak wadah yang berbeda. Di situlah ruang nama pengguna tidak mustahil.
‫Itu hanya menjadi sedikit rumit karena file yang
‫sekarang ditulis ke disk pada host sekarang sedang ditulis
‫sebagai pengguna yang berbeda.
‫Karena proses pada host yang mengelola wadah
‫adalah pengguna yang berbeda.
‫Jadi, Anda akan melihat ID pengguna yang berbeda pada file-file itu, dan
‫Anda hanya harus menghadapinya.
‫Ada izin Linux standar pada saat itu, dan Anda
‫hanya perlu mengotomatisasi dan menyelesaikan masalah tersebut dengan
‫berbagai cara standar Linux.
‫Ini bahkan bukan masalah Docker pada saat itu.
‫Itu hanya masalah izin pada host.