GNU/Linux >> Belajar Linux >  >> Linux

aksesibilitas variabel lingkungan di Linux

Mari kita telusuri aliran data rahasia. Dalam analisis ini, dipahami bahwa apa pun yang dapat dilakukan Alice, root juga dapat melakukannya. Selain itu, pengamat eksternal yang “naik satu tingkat” (mis. dengan akses fisik untuk mengintai bus disk, atau di hypervisor jika kode berjalan di mesin virtual) mungkin dapat mengakses data.

Pertama, data dimuat dari file. Dengan asumsi bahwa hanya Alice yang memiliki izin membaca pada file tersebut dan file tersebut tidak bocor, hanya Alice yang dapat memanggil cat /home/alice/fav_food.txt berhasil. Data tersebut kemudian disimpan dalam memori cat proses, di mana hanya proses itu yang dapat mengaksesnya. Data ditransmisikan melalui pipa dari cat perintah ke shell pemanggil; hanya dua proses yang terlibat yang dapat melihat data pada pipa. Data kemudian berada dalam memori proses shell, lagi-lagi bersifat pribadi untuk proses itu.

Pada titik tertentu, data akan berakhir di lingkungan shell. Tergantung pada shell, hal ini dapat terjadi ketika export pernyataan dieksekusi, atau hanya ketika shell mengeksekusi program eksternal. Pada titik ini, data akan menjadi argumen dari execve panggilan sistem. Setelah panggilan itu, data akan berada di lingkungan proses anak.

Lingkungan proses sama privatnya dengan memori proses lainnya (dari mm->env_start ke mm->env_end dalam peta memori proses). Itu bersebelahan dengan tumpukan utas awal. Namun, ada mekanisme khusus yang memungkinkan proses lain melihat salinan lingkungan:environ file dalam /proc proses direktori (/proc/$pid/environ ). File ini hanya dapat dibaca oleh pemiliknya, yang merupakan pengguna yang menjalankan proses (untuk proses istimewa, itulah UID yang efektif). (Perhatikan bahwa argumen baris perintah di /proc/$pid/cmdline , di sisi lain, dapat dibaca oleh semua orang.) Anda dapat mengaudit sumber kernel untuk memverifikasi bahwa ini adalah satu-satunya cara untuk membocorkan lingkungan proses.

Ada sumber potensial lain untuk membocorkan lingkungan:selama execve panggilan. execve panggilan sistem tidak secara langsung membocorkan lingkungan. Namun, ada mekanisme audit generik yang dapat mencatat argumen dari setiap panggilan sistem, termasuk execve . Jadi jika audit diaktifkan, lingkungan dapat dikirim melalui mekanisme audit dan berakhir di file log. Pada sistem yang terkonfigurasi dengan baik, hanya administrator yang memiliki akses ke file log (pada instalasi Debian default saya, ini adalah /var/log/audit/audit.log , hanya dapat dibaca oleh root, dan ditulis oleh auditd daemon berjalan sebagai root).

Saya berbohong di atas:Saya menulis bahwa memori suatu proses tidak dapat dibaca oleh proses lain. Ini sebenarnya tidak benar:seperti semua unice, Linux mengimplementasikan ptrace panggilan sistem. Panggilan sistem ini memungkinkan suatu proses untuk memeriksa memori dan bahkan mengeksekusi kode dalam konteks proses lain. Itu yang memungkinkan debugger ada. Hanya Alice yang dapat melacak proses Alice. Selain itu, jika suatu proses diberi hak istimewa (setuid atau setgid), hanya root yang dapat melacaknya.

Kesimpulan:lingkungan proses hanya tersedia untuk pengguna (euid) yang menjalankan proses .

Perhatikan bahwa saya berasumsi bahwa tidak ada proses lain yang mungkin membocorkan data. Tidak ada program root setuid pada instalasi Linux normal yang mungkin memaparkan lingkungan proses. (Pada beberapa uni yang lebih lama, ps adalah program root setuid yang mem-parsing beberapa memori kernel; beberapa varian akan dengan senang hati menampilkan lingkungan proses untuk semua orang. Di Linux, ps tidak memiliki hak istimewa dan mendapatkan datanya dari /proc seperti orang lain.).

(Perhatikan bahwa ini berlaku untuk versi Linux yang cukup terkini. Dahulu kala, saya pikir dalam 1.x hari kernel, lingkungannya dapat dibaca dunia.)


Saya awalnya akan mengatakan "tidak". Nilai variabel lingkungan adalah per pengguna dan tidak ada pengguna lain yang dapat membaca atau menulis ke lingkungan pengguna lain. vars. Namun, ada informasi menarik tentang SO yang menunjukkan bahwa root setidaknya dapat membaca informasi ini melalui /proc/<pid>/environ . Saya tidak mengetahui antarmuka khusus Linux ini sampai sekarang.

https://stackoverflow.com/a/532284/643314

Dengan demikian, sepertinya antarmuka ini masih tidak dapat dibaca oleh pengguna lain, meskipun mereka berada di grup yang sama. Izin diatur ke 400 untuk file lingkungan dan / proc mencegah chmod mempengaruhinya. Saya menduga bahwa domain keamanan untuk pemisahan variabel lingkungan antar pengguna masih utuh dan tidak dapat dilewati melalui cara normal.


Terlepas dari jawaban yang benar secara teoritis dari Gilles:Saya tidak akan memasukkan rahasia ke dalam variabel lingkungan.

  • Variabel lingkungan biasanya ditentukan di dekat bagian atas pohon proses (mis. melalui $HOME/.profile ).
  • Pengguna tidak memperlakukan konten lingkungan sebagai rahasia.

Cukup satu proses mencatat variabel lingkungan ke file yang dapat dibaca dunia:env >> env-traces.txt atau serupa. Anda tidak dapat mengontrolnya.


Linux
  1. Proses Boot Linux

  2. Karakter yang diizinkan dalam nama variabel lingkungan Linux

  3. Proses Pembuatan Linux?

  1. Tetapkan variabel lingkungan dengan ruang di Linux

  2. Linux:proses menjadi layanan

  3. Apakah variabel lingkungan terlihat oleh pengguna yang tidak memiliki hak di Linux?

  1. Variabel Lingkungan Linux:Cara Membaca dan Mengatur di VPS Linux

  2. Kiat dan trik variabel lingkungan Linux

  3. Peningkatan Aksesibilitas Kali Linux