Apa yang terjadi dengan janji live patching kernel Linux? Artikel ini membahas riwayatnya, masalahnya, dan cara termurah dan termudah untuk melakukannya di Ubuntu Focal Fossa (20,04 LTS).
Pengantar
'Tambalan langsung' adalah tindakan memperbarui program tanpa menghentikan sistem yang sedang berjalan. Ini pertama kali dilakukan dengan solder dan kawat, kemudian dengan gunting dan lem—ini bukan hal baru. Saat ini, patching langsung kernel Linux jauh lebih mudah.
Dalam artikel ini, saya akan menjelaskan apa itu, cara kerjanya (dalam istilah non-teknis), dan dari mana asalnya. Saya akan mengakhiri dengan menunjukkan cara mengotomatiskan pembaruan keamanan kernel di Ubuntu 20.04 LTS (Focal Fossa) dengan Canonical Livepatch Service dan KernelCare.
Apa itu Live Patching?
Dalam perangkat lunak, tambalan adalah bagian kecil dari kode perbaikan. Patching adalah memperbaiki atau menyempurnakan sebagian kecil dari suatu program tanpa mengganggu cara kerja atau spesifikasi keseluruhan. Patching langsung (atau hot) berarti mengubah program yang sedang berjalan tanpa menghentikannya.
Bayangkan Anda terjebak dalam mobil yang bergerak dan Anda perlu memperbaiki bola lampu. Tidak terlalu buruk, Anda mungkin mengatakan, jika di dalam, sedikit lebih rumit di luar. Sekarang bayangkan memperbaiki camshaft, mengganti batang piston, atau menutup blok yang retak.
Ini mirip dengan apa yang coba dilakukan oleh live patching pada kernel Linux. Itu mencoba memperbaiki bagian-bagian dari sesuatu yang bergerak, tanpa mengubah atau merusaknya, tetapi yang terpenting, tanpa menghentikannya. Kernel adalah satu-satunya bagian dari sistem Linux yang memerlukan shutdown dan restart untuk menerapkan pembaruan. Saat vendor merilis pembaruan kernel, administrator sistem tidak punya pilihan selain menjadwalkan reboot server.
Apa salahnya melakukan boot ulang?
Sebuah reboot berarti hal yang berbeda untuk orang yang berbeda, tergantung pada apakah mereka berada di sistem atau bertanggung jawab atas itu. Banyak sysadmin menganggap reboot secara teratur sebagai tanda kesehatan yang baik, seperti buang air besar yang teratur. Sama seperti banyak yang tidak, menolak gangguan apa pun pada aplikasi tempat mereka berinvestasi dan menghasilkan uang, aplikasi seperti ini, misalnya.
- server web, dengan pengguna yang sibuk dan aktif di banyak zona waktu
- game multipemain daring
- streaming video langsung atau rekaman bayar per tayang
- penambangan mata uang kripto
- layanan perekaman dan pengawasan video jarak jauh 24/7
Bagi saya, alasan yang paling masuk akal adalah ketakutan bahwa sistem tidak akan sama setelahnya, dan aplikasi kritis (menghasilkan uang) tidak akan dijalankan. Saya pikir inilah, dan bukan visi pengguna yang mengamuk, yang membuat banyak administrator sistem menunda pembaruan kernel, bahkan jenis yang paling penting, pembaruan keamanan.
(Di sini, saya hanya berbicara tentang pembaruan . Kernel peningkatan versi adalah sesuatu yang lain. Upgrade adalah kernel yang benar-benar baru. Patch adalah pembaruan pada bagian kernel, biasanya perbaikan bug yang tidak bisa menunggu karena memiliki keamanan atau implikasi luas lainnya.)
Ketika vendor Linux merilis patch kernel, biasanya untuk memperbaiki masalah keamanan. Catatan penasihat terkait akan mengatakan sesuatu seperti, 'Instal secepat mungkin.' Pada halaman yang sama akan ada versi, 'Jika tidak, Anda akan rentan terhadap eksploitasi yang telah kami tambal yang sekarang diketahui semua orang tentang. Semoga harimu menyenangkan.’
Catatan tertulis yang tidak berperasaan seperti itu menyoroti dilema yang mendorong munculnya tambalan langsung:haruskah Anda membuat pengguna 'sakit tetapi aman', atau 'tenang tetapi terbuka'? Penambalan langsung menjanjikan untuk menjadi Pulau Surga antara Rock dan Hard Place. Patching langsung menjanjikan untuk membantu menjaga server Anda tetap aman dan pada tingkat keamanan terbaru, tanpa memengaruhi waktu henti, dan tanpa memengaruhi layanan.
Pulau Surga? Apa yang menarik?
Sementara kode sumber untuk perangkat lunak tambalan langsung tersedia secara bebas, tambalan tidak. Janji manis dari patching sours hidup ketika Anda harus menulis patch Anda sendiri. Tekanan darah Anda berkurang dengan sedikit administrasi tetapi naik lagi dengan menangani kode kernel yang kompleks.
Meskipun secara teknis memungkinkan untuk membuat tambalan Anda sendiri, dibutuhkan banyak pekerjaan dan banyak pengetahuan khusus. Dan itu berisiko – tambalan yang ditulis dengan buruk dapat merusak sistem. (Pesan ini di halaman kpatch github terbaca seperti sesuatu dari manual operator palu uap:'PERINGATAN:Gunakan dengan hati-hati! Kernel crash, reboot spontan, dan kehilangan data dapat terjadi!')
Vendor Linux tahu betapa sulitnya melakukan live patching dengan benar, dan telah mengembangkan penawaran layanan yang menguntungkan untuk memanfaatkan fakta ini. Setiap distribusi Linux utama memiliki pendekatan patching langsung yang gratis untuk diinstal, tetapi tidak untuk digunakan. Tambalan, yang tanpanya seluruh ide tidak berguna, harus dibayar.
Namun, manfaat dari patch kernel langsung sangat menarik sehingga model bisnis ini berkembang pesat di ekosistem perangkat lunak sumber terbuka dan gratis yang didominasi Linux. Bagi saya, ini adalah tanda bahwa teknologi memiliki arti penting dan peran penting di masa depan sistem berbasis Linux.
Cara Kerja Live Patching
Masih terjebak di dalam mobil imajiner itu, sekarang bergemuruh menuruni bukit menuju tumpukan imajiner kotak kardus (semoga) kosong, bagaimana Anda akan memperbaiki remnya? Membangun dongkrak sementara untuk melakukan pekerjaan? Bersandar di atas tiga roda, tunggu satu berhenti, lepas, ulangi sampai selesai?
Pemrogram kernel Linux pasti menggunakan pemikiran yang sama dalam menangani masalah live patching. Saya merasakan jenis peralatan konseptual yang sama (menangguhkan, menukar, penggunaan struktur pendukung sementara) bekerja dalam solusi mereka. Analogi perubahan rem kasar saya di atas menggambarkan dua strategi berlawanan yang diterapkan oleh vendor perangkat lunak patching langsung.
- Hentikan semuanya dan lakukan semua perbaikan sekaligus.
- Tunggu masing-masing komponen berhenti, lalu tukarkan. Ulangi sampai selesai.
Divisi ini menjelaskan mengapa setiap vendor memiliki pendekatan berbeda untuk memecahkan masalah yang sama. Apa yang mereka bagikan, bagaimanapun, adalah penggunaan kerangka kerja modul kernel Linux yang dapat dimuat. Perangkat lunak yang mengatur dan mengimplementasikan proses patching adalah modul kernel Linux. Artinya, mudah untuk menambahkan fungsionalitas patch ke kernel yang kompatibel, dan menghapusnya dengan mudah.
Sebelum kita terbawa suasana, saya harus menyebutkan peringatannya.
Ada batasan untuk cakupan dan skala tambalan perangkat lunak yang dapat Anda terapkan pada sistem yang sedang berjalan. Untuk satu hal, kernel yang disesuaikan, dioptimalkan, atau non-standar membuat sulit atau tidak mungkin untuk menambal kernel secara langsung. Untuk yang lain, tambalan langsung tidak dapat memetakan kembali data atau memori di seluruh tambalan; itu hanya dapat mengubah definisi fungsi.
Kekurangan ini tidak menghentikan Ksplice untuk menjadi yang pertama di bidang live patching Linux. Ia bekerja dengan membandingkan kode sumber lama dan baru dari mana ia menciptakan tambalan biner. Ini membekukan sistem, mencari tahu fungsi mana yang perlu diubah, dan mengedit headernya. Saat dipanggil, fungsi dialihkan ke versi baru. Jika patch ditulis dengan baik, kontrol berjalan seolah-olah tidak ada yang terjadi.
Peristiwa seismik (dijelaskan di bagian berikutnya) membuat Kpatch Red Hat dan Kgraft SUSE bergabung dengan adegan dengan interpretasi mereka sendiri tentang masalah inti patch langsung.
Kpatch membandingkan kode sumber lama dan baru untuk membuat tambalan. Seperti Ksplice, ia bekerja dengan mengalihkan panggilan fungsi menggunakan kerangka kerja kernel ftrace untuk mengganti fungsi yang diubah sekaligus.
Kgraft bekerja secara berbeda. Ini menggunakan dua set fungsi bersamaan, lama dan baru, dengan modul orkestra yang memutuskan kapan harus mengarahkan ulang fungsi tergantung di mana eksekusi telah tercapai. Tidak mungkin untuk memprediksi di mana dalam suatu fungsi penunjuk program berada pada satu waktu, jadi transisinya bertahap, tidak instan.
Asal usul Live Patching
Bagaimana ide untuk memperbaiki perangkat lunak tanpa ada yang menyadarinya masuk ke dalam monolit usaha manusia yang selalu berubah, kernel Linux?
Meskipun konsep ini menelusuri kembali ke hari-hari awal komputasi yang dapat diprogram, untuk tujuan kami jejak dimulai pada tahun 2001 ketika Hewlett Packard mematenkan cara memperbarui perangkat lunak secara dinamis untuk mengimbangi fungsionalitas perangkat keras yang hilang. Setahun kemudian, Microsoft menghadirkan ide untuk memperbarui sistem (Windows) tanpa gangguan.
Tidak ada yang menyebutkan Linux, tetapi aplikasinya luas, masing-masing menjelaskan cara memperbaiki masalah perangkat lunak atau perangkat keras pada komputer tanpa mengganggu proses yang berjalan di dalamnya. (Jika ide tersebut tidak terlalu berguna bagi Anda, mungkin dua kata akan membuat Anda berpikir lagi:Meltdown dan Spectre.)
Pada tahun 2008, Jeff Arnold mengumumkan Ksplice, perangkat lunak untuk menambal kernel Linux tanpa memulai ulang. Ini adalah yang pertama dari jenisnya untuk Linux. Dan kami berterima kasih kepada peretas yang tidak dikenal dan tidak disebutkan namanya.
Untuk mengetahui alasannya, izinkan saya membawa Anda kembali ke masa mahasiswa Jeff di MIT. Dia adalah anggota kelompok sukarelawan yang mengelola server untuk komunitas mahasiswa. Salah satu server membutuhkan patch keamanan. Dia tidak ingin memulai penggunanya, jadi dia membiarkannya meluncur selama beberapa hari.
Dalam beberapa hari itu, sebelum dia dapat memperbaruinya, seseorang meretas sistemnya. Satu-satunya cara untuk membuatnya kembali online adalah dengan menginstal ulang sepenuhnya dari awal. Mari kita asumsikan rekan-rekannya memperhatikan. Bahkan seandainya mereka tidak menderita, saya membayangkan Jeff menghabiskan sisa semester dengan santai di atas abu cemoohan siswa.
Jika ceritanya apokrif, maka anggap itu dongeng, pengingat bahwa tambalan langsung adalah anak keamanan, bukan kenyamanan. Dan seperti semua dongeng yang bagus, ada akhir yang bahagia.
Kejadian tersebut menginspirasi Jeff untuk mempelajari cara menginstal patch kernel Linux tanpa penundaan dan tanpa gangguan. Dia menjadikan masalah ini sebagai topik tesis master 2006-nya. Solusinya datang dalam bentuk perangkat lunak yang disebut Ksplice. Dengan seorang rekan, ia menulis makalah yang menjelaskannya, berjudul 'Ksplice:Automatic Rebootless Kernel Updates.'
Jeff dan tiga rekan mahasiswanya membentuk sebuah perusahaan, dan pada Mei 2009, mereka memenangkan hadiah Kompetisi Kewirausahaan MIT $100K. Mereka meluncurkan layanan komersial pada tahun 2010. Setahun kemudian, dalam jenis penutupan karma yang diimpikan oleh setiap pengembang perangkat lunak, Oracle membeli Ksplice Inc.
Karma jauh dari benak pengguna dan pelanggan utilitas baru yang luar biasa bermanfaat ini. Bagi mereka, ini adalah awal dari rangkaian mimpi buruk yang panjang dan melelahkan. Oracle mengasimilasi Ksplice sepenuhnya, membuat alat ini bebas hanya untuk pelanggan versi Linux mereka sendiri yang didanai biaya dukungan.
Guncangan seismik ini mendorong SUSE dan Red Hat untuk mengembangkan solusi mereka sendiri, tanpa memberi tahu yang lain tentang niat atau arsitektur solusi mereka. Mereka bekerja dalam isolasi dari 2011 hingga 2014, merilis pendekatan mereka sendiri yang berbeda dalam beberapa minggu satu sama lain. Dan pada bulan Mei 2014, CloudLinux, produsen varian Linux yang terkenal di bidang hosting web, merilis layanan patching langsung kernel Linux komersial dengan nama KernelCare.
Pada saat yang sama, ABI patching langsung bekerja ke jalur utama kernel, melihat cahaya hari di rilis 4.0 dengan nama Livepatch. Pada bulan Oktober 2016, Canonical, pencipta Ubuntu, menggunakannya sebagai dasar untuk layanan komersial dengan nama 'Canonical Livepatch Service' tanpa malu-malu. Canonical merilisnya terlebih dahulu untuk 16,04 LTS, lalu 14,04 LTS, keduanya memerlukan pengaturan pada baris perintah. Dalam 18,04 LTS, ini menjadi lebih terlihat, lebih mudah digunakan, dan lebih terintegrasi ke dalam pengalaman desktop Ubuntu dan sekarang tersedia untuk 20,04 LTS.
Cara melakukannya:Pembaruan keamanan kernel otomatis di Ubuntu 20.04 LTS
Sekarang saatnya untuk melihatnya beraksi. Ada dua solusi patching langsung untuk Ubuntu, yang dibahas dalam dua bagian berikutnya.
Menginstal Layanan Canonical Livepatch (CLS)
CLS gratis untuk individu non-komersial, hingga tiga mesin. Itu memerlukan pendaftaran, tetapi Anda dapat menggunakan akun Ubuntu One jika Anda memilikinya. Jika ingin menginstalnya di lebih dari tiga mesin, Anda harus membeli perjanjian layanan dukungan gaya perusahaan.
Sebelum Anda mulai
- Pastikan sistem Anda sudah diperbarui dan dicadangkan.
- Daftar untuk akun Livepatch atau Ubuntu One.
- Untuk Server 20,04 LTS, dapatkan kunci dan catat itu. (Ini tidak diperlukan pada edisi Desktop.)
Menginstal Livepatch di Desktop Ubuntu 20.04 LTS
Ubuntu 20.04 LTS Desktop memiliki pengaturan GUI untuk mengaktifkan CLS. Anda dapat melakukannya selama penyiapan pasca-penginstalan, atau nanti, dengan membuka Software &Updates dan membuka tab Livepatch.
Pada instalasi Ubuntu baru
Setelah reboot pertama dari instalasi baru, perhatikan layar kedua dari jendela dialog 'Apa yang baru di Ubuntu'. Ini memungkinkan Anda menyiapkan Livepatch.
- Klik ‘Siapkan Livepatch…’
- Pada layar 'Ubuntu Single Sign-On Account', masuk dengan akun Livepatch atau Ubuntu One Anda.
- Jika Anda menggunakan GUI penginstalan berbasis teks, di bawah 'Featured Server Snaps', pilih canonical-livepatch.
Pada instalasi Ubuntu yang sudah ada
- Buka 'Perangkat Lunak &Pembaruan' dan buka tab 'Livepatch'.
- Masuk.
- Setelah masuk, klik Lanjutkan ketika munculan yang mengonfirmasi bahwa Anda telah masuk.
- Itu dia. Livepatch sudah diatur di Desktop Ubuntu 20.04 Anda.
Kesalahan Di Ubuntu 20.04 dengan Livepatch
Anda mungkin mengalami kesalahan berikut saat mengaktifkan Livepatch di Ubuntu 20.04 Focal Fossa:
Failed to enable Livepatch: cannot enable machine: this machine ID is already enabled with a different key or is non-unique. Either "sudo canonical-livepatch disable" on the other machine, or regenerate a unique /etc/machine-id on this machine with "sudo rm /etc/machine-id /var/lib/dbus/machine-id && sudo systemd-machine-id-setup" server response: Conflicting machine-id
Untuk memperbaiki kesalahan, ketik perintah berikut di terminal:
cp /etc/machine-id /etc/machine-id.original
cp /var/lib/dbus/machine-id /var/lib/dbus/machine-id.original
nano /etc/machine-id (to remove the existing value)
systemd-machine-id-setup
> Initializing machine ID from D-Bus machine ID.
cat /etc/machine-id
Menginstal Livepatch di Server Ubuntu 20.04 LTS
Ini adalah pendekatan baris perintah untuk versi server standar tanpa sistem windowing diinstal. Ini juga berfungsi pada versi 16,04 LTS, 14,04 LTS, dan 18,04 LTS.
Buka terminal dan masukkan dua perintah ini:
sudo snap install canonical-livepatch
sudo canonical-livepatch enable <your key>
Kiat
- Perintah kedua mengembalikan token mesin. Tidak ada gunanya dan tidak perlu direkam.
- Pantau terus mesin yang Anda daftarkan. Jika Anda kehilangan jejak, atau membuang mesin atau VM sebelum membatalkan pendaftaran, Anda secara efektif membuang salah satu dari tiga lisensi gratis Anda. (Ada bantuan di sini.)
- Untuk membatalkan pendaftaran server, gunakan perintah ini:
sudo canonical-livepatch disable <your key>
- Untuk memeriksa status layanan, gunakan perintah ini:
sudo canonical-livepatch status --verbose
Menginstal KernelCare
KernelCare menggunakan pengaturan baris perintah; tidak ada GUI-nya. Ini mendukung sistem operasi yang lebih luas, termasuk CentOS, RHEL, Oracle Linux, Debian, Ubuntu, dan lainnya. Ini juga mendukung baris kernel 2.6.32 yang lebih lama.
Berbeda dengan CLS, ini sepenuhnya otomatis dan akan memeriksa rilis patch setiap empat jam, menginstalnya tanpa pengawasan jika tersedia. Jika Anda perlu mengganti kemampuan itu atau mengikat server ke patch tanggal tetap, ada utilitas baris perintah (kcarectl) yang memungkinkan Anda melakukan ini dan hal lainnya.
KernelCare gratis untuk organisasi nirlaba, atau ada uji coba gratis selama 30 hari untuk kita semua. (Jika Anda pengguna Ksplice, Anda mungkin ingin mencoba skrip migrasi Ksplice-to-KernelCare dua langkah.)
Sebelum Anda mulai
- Pastikan sistem Anda sudah diperbarui dan dicadangkan.
- Dapatkan kunci uji coba gratis dari sini.
Menginstal KernelCare di Desktop dan Server Ubuntu 20.04 LTS
Buka terminal dan masukkan dua perintah ini:
sudo wget -qq -O - https://repo.cloudlinux.com/kernelcare/kernelcare_install.sh | bash
sudo /usr/bin/kcarectl --register KEY
Perintah ini juga berfungsi pada versi 16,04 LTS, 14,04 LTS, dan 18,04 LTS.
Kiat
- Untuk membatalkan pendaftaran server, gunakan perintah ini:
sudo kcarectl --unregister
- Untuk memeriksa status layanan, gunakan perintah ini:
sudo kcarectl --info
Kesimpulan
Patching langsung di Linux terlalu berguna untuk tetap gratis dalam waktu lama.
Dengan rilis 20,04 LTS Ubuntu, lebih mudah untuk menikmati keuntungan dari patch keamanan langsung dari kernel Linux, dan gratis hingga tiga host. Setelah itu, dikenakan biaya tahunan per server.
Jika Anda menjalankan banyak varian Linux, tetapi tidak ingin mempelajari produk yang berbeda atau berlangganan kontrak dukungan yang berbeda, lihat KernelCare. Ini sekitar lima kali lebih murah jika berlangganan setiap tahun, dan mereka menawarkan langganan bulanan yang fleksibel.