GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana fakeroot bukan pelanggaran keamanan di Linux?

Sejauh ini, yang dapat saya kumpulkan adalah bahwa fakeroot digunakan untuk memberikan kepemilikan pada file yang perlu di-root saat di-unzip/tar'ed. Pertanyaan saya, mengapa Anda tidak bisa melakukannya dengan chown saja?

Karena Anda tidak bisa melakukannya dengan chown , setidaknya bukan sebagai pengguna non-root. (Dan jika Anda menjalankan sebagai root, Anda tidak memerlukan fakeroot .) Itulah inti dari fakeroot :untuk mengizinkan program yang diharapkan dijalankan sebagai root untuk dijalankan sebagai pengguna biasa, sambil berpura-pura bahwa operasi yang membutuhkan root berhasil.

Ini biasanya digunakan saat membangun sebuah paket, sehingga proses instalasi dari paket yang diinstal dapat berjalan tanpa error (walaupun berjalan chown root:root , atau install -o root , dll.). fakeroot mengingat kepemilikan palsu yang berpura-pura memberikan file, jadi operasi selanjutnya yang melihat kepemilikan melihat ini, bukan yang asli; ini memungkinkan tar berikutnya berjalan misalnya untuk menyimpan file yang dimiliki oleh root.

Bagaimana fakeroot menghentikan peningkatan hak istimewa yang tidak diinginkan di Linux? Jika fakeroot dapat mengelabui tar agar membuat file yang dimiliki oleh root, mengapa tidak melakukan sesuatu yang serupa dengan SUID?

fakeroot tidak mengelabui tar untuk melakukan apa pun, ini mempertahankan perubahan yang ingin dibuat oleh build tanpa membiarkan perubahan tersebut diterapkan pada sistem yang menghosting build tersebut. Anda tidak memerlukan fakeroot untuk menghasilkan tarball yang berisi file yang dimiliki oleh root dan suid; jika Anda memiliki evilbinary biner , menjalankan tar cf evil.tar --mode=4755 --owner=root --group=root evilbinary , sebagai pengguna biasa, akan membuat tarball yang berisi evilbinary , dimiliki oleh root, dan suid. Namun, Anda tidak akan dapat mengekstraksi tarbal itu dan mempertahankan izin tersebut kecuali Anda melakukannya sebagai root:tidak ada eskalasi hak istimewa di sini. fakeroot adalah hak istimewa de -alat eskalasi:ini memungkinkan Anda untuk menjalankan build sebagai pengguna biasa, sambil mempertahankan efek yang akan dimiliki build jika dijalankan sebagai root, memungkinkan efek tersebut diputar ulang nanti. Menerapkan efek "nyata" selalu membutuhkan hak akses root; fakeroot tidak menyediakan metode apa pun untuk mendapatkannya.

Untuk memahami penggunaan fakeroot secara lebih mendetail, pertimbangkan bahwa build distribusi tipikal melibatkan operasi berikut (di antara banyak lainnya):

  • instal file, milik root
  • ...
  • arsipkan file-file itu, masih dimiliki oleh root, sehingga ketika diekstrak, mereka akan menjadi milik root

Bagian pertama jelas gagal jika Anda tidak melakukan root. Namun, saat dijalankan di bawah fakeroot , sebagai pengguna biasa, prosesnya menjadi

  • instal file, dimiliki oleh root — ini gagal, tetapi fakeroot berpura-pura berhasil, dan mengingat perubahan kepemilikan
  • ...
  • arsipkan file tersebut, masih dimiliki oleh root — saat tar (atau pengarsipan apa pun yang digunakan) menanyakan sistem tentang kepemilikan file, fakeroot mengubah jawaban agar sesuai dengan kepemilikan yang dicatat sebelumnya

Dengan demikian Anda dapat menjalankan build paket tanpa menjadi root, sambil mendapatkan hasil yang sama seperti yang Anda dapatkan jika Anda benar-benar menjalankannya sebagai root. Menggunakan fakeroot lebih aman:sistem tetap tidak dapat melakukan apa pun yang tidak dapat dilakukan oleh pengguna Anda, sehingga proses penginstalan yang nakal tidak dapat merusak sistem Anda (selain menyentuh file Anda).

Di Debian, alat build telah ditingkatkan sehingga tidak memerlukan ini lagi, dan Anda dapat membuat paket tanpa fakeroot . Ini didukung oleh dpkg langsung dengan Rules-Requires-Root direktif (lihat rootless-builds.txt ).

Untuk memahami tujuan dari fakeroot , dan aspek keamanan menjalankan sebagai root atau tidak, mungkin membantu untuk mempertimbangkan tujuan pengemasan. Saat Anda menginstal perangkat lunak dari sumber, untuk digunakan di seluruh sistem, Anda melanjutkan sebagai berikut:

  1. membangun perangkat lunak (yang dapat dilakukan tanpa hak istimewa)
  2. instal perangkat lunak (yang perlu dilakukan sebagai root, atau setidaknya saat pengguna diizinkan untuk menulis ke lokasi sistem yang sesuai)

Saat Anda mengemas perangkat lunak, Anda menunda bagian kedua; tetapi untuk berhasil melakukannya, Anda masih perlu "menginstal" perangkat lunak, ke dalam paket, bukan ke sistem. Jadi saat Anda mengemas perangkat lunak, prosesnya menjadi:

  1. buat perangkat lunak (tanpa hak khusus)
  2. berpura-pura memasang perangkat lunak (sekali lagi tanpa hak khusus)
  3. rekam penginstalan perangkat lunak sebagai satu paket (ditto)
  4. menyediakan paket (ditto)

Sekarang pengguna menyelesaikan proses dengan menginstal paket, yang perlu dilakukan sebagai root (atau sekali lagi, pengguna dengan hak yang sesuai untuk menulis ke lokasi yang sesuai). Di sinilah proses hak istimewa yang tertunda diwujudkan, dan merupakan satu-satunya bagian dari proses yang memerlukan hak istimewa khusus.

fakeroot membantu dengan langkah 2 dan 3 di atas dengan mengizinkan kami menjalankan proses pemasangan perangkat lunak, dan menangkap perilakunya, tanpa menjalankannya sebagai root.


TIDAK. Root palsu memungkinkan Anda menjalankan manipulasi izin dan alat pelaporan, itu akan melaporkan secara konsisten. Namun itu tidak akan benar-benar memberikan izin ini. Itu hanya akan terlihat seperti Anda memilikinya (palsu). Itu tidak akan mengubah apa pun di luar lingkungan.

Ini berguna, jika Anda ingin membuat struktur direktori, yang berisi kepemilikan dan izin, yang tidak dapat disetel oleh pengguna Anda, maka Anda akan melakukan tar, zip, atau paket lainnya.

Itu tidak benar-benar meningkatkan izin, itu palsu. Itu tidak membiarkan Anda melakukan apa pun (menghapus, menulis, membaca) yang tidak dapat Anda lakukan. Anda dapat membuat paket (secara teori) tanpanya. Anda bisa mendapatkan laporan palsu (ls ) tanpanya.

Ini bukan kelemahan keamanan, karena tidak izinkan akses, atau apa pun yang tidak dapat Anda lakukan tanpanya. Ini berjalan tanpa hak istimewa. Semua dosis itu mencegat panggilan ke chown , chmod , dll. Itu membuat mereka tidak beroperasi, kecuali bahwa itu mencatat apa yang akan terjadi. Itu juga mencegat panggilan ke stat dll. sehingga melaporkan izin dan kepemilikan, dari basis data internalnya sendiri, seolah-olah perintah lain telah dilakukan. Ini berguna, karena jika Anda kemudian meng-zip direktori, itu akan memiliki izin palsu. Jika Anda kemudian meng-unzip, sebagai root, maka izin akan menjadi nyata.

File apa pun yang sebelumnya tidak dapat dibaca/ditulis, akan tetap tidak dapat dibaca/ditulis. File khusus apa pun (mis. Perangkat) yang dibuat, tidak akan memiliki kekuatan khusus. Setiap set-uid (untuk pengguna lain), file tidak akan set-uid. Eskalasi hak istimewa lainnya tidak akan berfungsi.

Ini adalah jenis mesin virtual:Mesin virtual, secara umum, dapat mensimulasikan lingkungan/OS apa pun, tetapi tidak dapat melakukan apa pun ke host, yang tidak dapat dilakukan oleh aplikasi lain mana pun. Di dalam mesin Virtual, Anda dapat melakukan apa saja. Anda dapat menemukan kembali sistem keamanan menjadi sama atau berbeda, Namun ini semua akan ada di host, sebagai sumber daya yang dimiliki oleh pengguna/grup dari proses yang menjalankan lingkungan virtual.


Sudah ada dua jawaban yang bagus dan sangat mendetail di sini, tetapi saya hanya akan menunjukkan bahwa paragraf pengantar dari asli fakeroot halaman manual sebenarnya menjelaskannya dengan cukup jelas dan ringkas:

fakeroot menjalankan perintah di lingkungan yang tampaknya memiliki hak akses root untuk manipulasi file. Ini berguna untuk mengizinkan pengguna membuat arsip (tar, ar, .deb, dll.) dengan file di dalamnya dengan izin/kepemilikan root. Tanpa fakeroot seseorang harus memiliki hak akses root untuk membuat file konstituen arsip dengan izin dan kepemilikan yang benar, lalu mengemasnya, atau seseorang harus membuat arsip secara langsung, tanpa menggunakan pengarsip.

Fakeroot memungkinkan pengguna non-root untuk membuat arsip yang berisi file milik root, yang merupakan bagian penting dalam menghasilkan dan mendistribusikan paket perangkat lunak biner di Linux. Tanpa fakeroot , arsip paket harus dibuat saat dijalankan sebagai root yang sebenarnya, sehingga berisi kepemilikan dan izin file yang benar. Itu akan menjadi risiko keamanan. Membangun dan mengemas perangkat lunak yang berpotensi tidak dipercaya adalah paparan besar jika dilakukan dengan root privs. Berkat fakeroot , pengguna yang tidak memiliki hak istimewa dengan file yang tidak memiliki hak masih dapat membuat arsip yang berisi file dengan kepemilikan root.

Tapi itu bukan risiko keamanan, karena tidak ada dalam arsip sebenarnya dimiliki oleh root hingga file DIEKSTRAK . Dan bahkan kemudian, file hanya akan diekstraksi dengan izin root utuh jika dilakukan oleh pengguna yang memiliki hak istimewa. Langkah itu — di mana fakeroot -arsip dengan bantuan yang berisi file "root" diekstrak oleh pengguna yang memiliki hak istimewa - di sinilah root "palsu" akhirnya menjadi nyata. Hingga saat itu, tidak ada hak istimewa root sebenarnya yang diperoleh atau dilewati.

Catatan

  1. Fakeroot telah menelurkan beberapa pesaing/peniru yang akan menyamar sebagai fakeroot jika dipasang, termasuk fakeroot-ng dan pseudo . Tapi IMHO tidak ada halaman manual "peniru" yang hampir sama jelasnya tentang langsung ke pokok pertanyaan ini. Tetap gunakan yang asli, satu-satunya fakeroot O.G.
  2. Distro/sistem pengemasan lain mengatasi hal ini hanya dengan tidak menggunakan kepemilikan root dalam arsip paket mereka. Di Fedora, misalnya, perangkat lunak dapat dikompilasi, diinstal, dan dikemas oleh pengguna yang tidak memiliki hak istimewa tanpa memerlukan fakeroot . Semuanya dilakukan dalam $HOME/rpmbuild/ pengguna space, dan langkah-langkah yang biasanya diistimewakan seperti make install dialihkan (melalui mekanisme seperti --prefix dan DESTDIR ) ke $HOME/rpmbuild/BUILDROOT/ hierarki yang dapat dianggap sebagai semacam ruang "fakechroot" (tanpa benar-benar menggunakan fakechroot ).

    Tetapi bahkan selama make install , semuanya dijalankan sebagai dan dimiliki oleh pengguna yang tidak memiliki hak istimewa. Kepemilikan dan izin file yang diekstraksi akan disetel ke root,root dan 0644 (atau 0755 untuk yang dapat dieksekusi) secara default, kecuali diganti dalam definisi paket (.spec ) dalam hal ini mereka disimpan sebagai metadata dalam paket akhir. Karena tidak ada izin atau kepemilikan yang benar-benar diterapkan sampai proses instalasi (istimewa) paket rpm, baik root maupun fakeroot dibutuhkan selama pengemasan. Tapi fakeroot benar-benar hanya jalan yang berbeda untuk hasil yang sama.


Linux
  1. Linux – Mengapa Setuid Tidak Bekerja??

  2. Cara Memantau Keamanan Server Linux dengan Osquery

  3. Bagaimana cara membuat file hanya-baca secara permanen di Linux sehingga root pun tidak dapat mengeditnya?

  1. Cara Menghapus File Root Mail (Kotak Surat) di Linux

  2. Cara menyesuaikan lingkungan pengguna Linux

  3. Reset Password Root di Rocky Linux - Bagaimana Caranya?

  1. Linux Setuid Tidak Berfungsi?

  2. Cara Membuat Pengguna yang Hampir Setara Root Tapi Bukan Pengguna Identik Root di Linux

  3. Linux bagaimana cara menyalin tetapi tidak menimpa?