Pemboleh ubah persekitaran telah menjadi sebahagian asas sistem seperti Unix selama beberapa dekad, berfungsi sebagai cara mudah untuk menghantar data konfigurasi antara proses. Walaupun ia masih digunakan secara meluas dalam pembangunan perisian moden, terutamanya untuk aplikasi yang dikontena, perbincangan komuniti baru-baru ini telah mengetengahkan kebimbangan keselamatan penting yang mungkin terlepas pandang oleh ramai pemaju.
Masalah Keselamatan Yang Anda Tidak Tahu
Salah satu penemuan paling membimbangkan daripada perbincangan komuniti ialah betapa mudahnya pemboleh ubah persekitaran terdedah kepada proses yang tidak dibenarkan. Pada sistem Linux, mana-mana proses yang berjalan di bawah akaun pengguna yang sama berpotensi membaca pemboleh ubah persekitaran proses lain yang dimiliki oleh pengguna tersebut. Ini bermakna jika anda menjalankan pelbagai aplikasi sebagai pengguna yang sama - senario biasa di stesen kerja pemaju - rahsia yang disalurkan melalui pemboleh ubah persekitaran mungkin boleh dilihat oleh semua aplikasi tersebut.
Ejen Claude yang berjalan dalam sesi CLI yang berbeza kini juga mempunyai akses kepada token GitHub saya. Atau, mana-mana sambungan yang pernah saya muat dalam VS Code juga mempunyai akses. Ia lebih baik daripada menyimpannya dalam teks biasa pada sistem fail tetapi tidak banyak.
Pendedahan ini menjadi lebih bermasalah dengan kemunculan ejen AI dan alat automasi lain yang berjalan dalam ruang pengguna yang sama. Apa yang dianggap oleh ramai pemaju sebagai nilai konfigurasi peribadi sebenarnya mungkin boleh dilihat oleh mana-mana aplikasi lain yang mereka jalankan.
Kebimbangan Keselamatan Pembolehubah Persekitaran:
- Pendedahan proses: Proses lain di bawah pengguna yang sama boleh membaca /proc/[pid]/environ
- Pendedahan Systemd: Pembolehubah persekitaran terdedah melalui DBUS kepada semua klien sistem
- Batasan kontena: Pembolehubah persekitaran dalam kontena boleh dilihat oleh proses sistem hos
- Risiko pembangunan: Ejen AI dan sambungan mungkin mengakses pembolehubah persekitaran yang sensitif
Kejutan Systemd
Satu lagi penemuan membimbangkan yang dibincangkan dalam komuniti melibatkan systemd, sistem init yang digunakan oleh banyak pengedaran Linux. Menurut dokumentasi dan laporan pengguna, systemd mendedahkan pemboleh ubah persekitaran unit kepada semua klien sistem melalui DBUS. Ini berpotensi bermakna pengguna bukan root boleh mengakses pemboleh ubah persekitaran yang ditetapkan untuk perkhidmatan root sahaja - satu kejutan besar untuk pentadbir sistem yang menganggap nilai-nilai ini dilindungi.
Implikasinya adalah signifikan: kata laluan pangkalan data, kunci API, dan konfigurasi sensitif lain yang disalurkan melalui pemboleh ubah persekitaran kepada perkhidmatan systemd mungkin lebih terdedah daripada yang disedari oleh pentadbir. Ini telah membawa kepada amaran terhadap penggunaan pemboleh ubah persekitaran untuk rahsia dalam konfigurasi unit systemd.
Pendekatan Alternatif dan Pertukarannya
Komuniti telah meneroka pelbagai alternatif kepada pemboleh ubah persekitaran untuk mengendalikan rahsia, masing-masing dengan kelebihan dan batasan tersendiri. Kubernetes Secrets API menyediakan satu pendekatan, tetapi beberapa pakar memberi amaran tentang kekangan vendor dan komplikasi persekitaran pembangunan. Hashicorp Vault dan sistem pengurusan rahsia yang serupa menawarkan penyelesaian yang kukuh tetapi memperkenalkan kebergantungan pada perkhidmatan luaran.
Sesetengah pemaju mengadvokasikan pendekatan berasaskan fail, di mana aplikasi membaca rahsia daripada fail yang dilindungi pada permulaan. Walau bagaimanapun, ini memperkenalkan cabarannya sendiri dengan keizinan fail dan kerumitan penempatan. Penyelesaian yang lebih maju seperti panggilan sistem memfd_secret
Linux menawarkan janji dengan mencipta rantau memori yang tidak boleh diakses oleh proses lain, walaupun sokongan bahasa masih terhadap.
Pendekatan Alternatif Pengurusan Rahsia:
- Berasaskan fail: Membaca daripada fail yang dilindungi dengan kebenaran yang ketat
- Kubernetes Secrets: Dipasang sebagai volum atau pembolehubah persekitaran
- Pengurus Rahsia: Hashicorp Vault, AWS Secrets Manager
- Systemd-creds: Sistem kelayakan yang disulitkan menggunakan TPM
- memfd_secret: Panggilan sistem Linux untuk mencipta kawasan memori yang tidak boleh diakses
Dilema Pemaju
Untuk kerja pembangunan harian, situasi ini mewujudkan tindakan mengimbang yang sukar. Pemboleh ubah persekitaran adalah mudah, disokong dengan baik merentas bahasa pengaturcaraan dan platform penempatan, dan disepadukan dengan lancar dengan sistem orkestra kontena. Namun kebimbangan keselamatan adalah nyata, terutamanya untuk pemaju yang bekerja pada mesin peribadi di mana pelbagai aplikasi berjalan di bawah akaun pengguna yang sama.
Masalah ini melampaui sekadar pengurusan rahsia. Seperti yang dinyatakan oleh seorang pemberi komen, penyahpepijatan isu pemboleh ubah persekitaran boleh menjadi sangat kompleks apabila pemboleh ubah ditetapkan melalui pelbagai lapisan konfigurasi - daripada tetapan seluruh sistem hingga ke konfigurasi khusus pasukan. Kekaburan ini menyukarkan untuk menjejaki dari mana nilai tertentu datang dan sama ada ia dilindungi dengan betul.
Had Pembolehubah Persekitaran:
- Tiada ruang nama: Kamus global rata menggunakan rentetan sahaja
- Had jenis: Hanya nilai rentetan disokong
- Had saiz: 128 KiB setiap pembolehubah, 2 MiB jumlah keseluruhan (dikongsi dengan argumen baris arahan)
- Pewarisan: Dihantar secara automatik kepada proses anak melainkan dihalang secara eksplisit
- Kerumitan penyahpepijatan: Pelbagai lapisan konfigurasi menyukarkan penjejakan sumber
Melihat ke Hadapan
Perbincangan mendedahkan pengiktirafan yang semakin berkembang bahawa pendekatan tradisional kami terhadap konfigurasi aplikasi memerlukan pemikiran semula. Walaupun pemboleh ubah persekitaran tidak akan hilang dalam masa terdekat, pemaju semakin sedar tentang batasan dan implikasi keselamatannya. Komuniti nampaknya bergerak ke arah kaedah yang lebih jelas dan selamat untuk mengendalikan konfigurasi dan rahsia, walaupun itu bermakna mengorbankan sebahagian kemudahan yang menjadikan pemboleh ubah persekitaran begitu popular.
Apabila pembangunan perisian terus berkembang, dengan lebih banyak aplikasi berjalan dalam persekitaran kongsi dan perhatian meningkat terhadap amalan terbaik keselamatan, pemboleh ubah persekitaran yang sederhana mungkin perlu memberi laluan kepada alternatif yang lebih kukuh dan selamat untuk data konfigurasi sensitif.
Rujukan: Environment variables are a legacy mess: Let's dive deep into them