Sejauh ini, yang bisa saya kumpulkan adalah bahwa fakeroot digunakan untuk memberikan kepemilikan pada file yang perlu di-root ketika itu di-unzip / tar'ed. Pertanyaan saya, mengapa Anda tidak bisa melakukan itu dengan chown?
Karena Anda tidak bisa begitu saja melakukannya dengan chown
, paling tidak sebagai pengguna non-root. (Dan jika Anda menjalankan sebagai root, Anda tidak perlu fakeroot
.) Itulah inti dari fakeroot
: untuk memungkinkan program yang dijalankan sebagai root untuk dijalankan sebagai pengguna normal, sambil berpura-pura bahwa operasi yang membutuhkan root berhasil.
Ini digunakan biasanya ketika membangun sebuah paket, sehingga proses instalasi paket yang sedang diinstal dapat dilanjutkan tanpa kesalahan (bahkan jika itu berjalan chown root:root
, atau install -o root
, dll.). fakeroot
ingat kepemilikan palsu yang pura-pura memberikan file, sehingga operasi selanjutnya melihat kepemilikan melihat ini bukan yang asli; ini memungkinkan tar
menjalankan selanjutnya misalnya untuk menyimpan file yang dimiliki oleh root.
Bagaimana fakeroot menghentikan eskalasi hak istimewa yang tidak diinginkan di Linux? Jika fakeroot dapat mengelabui tar untuk membuat file yang dimiliki oleh root, mengapa tidak melakukan sesuatu yang mirip dengan SUID?
fakeroot
tidak menipu tar
untuk melakukan apa pun, ia mempertahankan perubahan yang ingin dibuat tanpa membiarkan perubahan itu berlaku pada sistem hosting yang membangun. Anda tidak perlu fakeroot
membuat tarball yang berisi file yang dimiliki oleh root dan suid; jika Anda memiliki biner evilbinary
, menjalankan tar cf evil.tar --mode=4755 --owner=root --group=root evilbinary
, sebagai pengguna biasa, akan membuat tarball berisi evilbinary
, dimiliki oleh root, dan suid. Namun, Anda tidak akan dapat mengekstrak tarball itu dan mempertahankan izin itu kecuali Anda melakukannya sebagai root: tidak ada eskalasi hak istimewa di sini. fakeroot
adalah hak istimewa de-penghapusan alat: ini memungkinkan Anda untuk menjalankan build sebagai pengguna biasa, sambil mempertahankan efek yang akan dimiliki build jika telah dijalankan sebagai root, yang memungkinkan efek-efek tersebut diulang kembali nanti. Menerapkan efek "nyata" selalu membutuhkan hak akses root; fakeroot
tidak menyediakan metode untuk memperolehnya.
Untuk memahami penggunaan fakeroot
secara lebih rinci, pertimbangkan bahwa bangunan distribusi tipikal melibatkan operasi berikut (di antara banyak lainnya):
- instal file, yang dimiliki oleh root
- ...
- arsipkan file-file itu, masih dimiliki oleh root, sehingga ketika mereka diekstrak, mereka akan dimiliki oleh root
Bagian pertama jelas gagal jika Anda tidak root. Namun, saat berjalan di bawah fakeroot
, sebagai pengguna normal, proses menjadi
- instal file, yang dimiliki oleh root - ini gagal, tetapi
fakeroot
berpura-puralah berhasil, dan ingat kepemilikan yang berubah
- ...
- arsipkan file-file itu, masih dimiliki oleh root - ketika
tar
(atau pengarsip apa pun yang digunakan) bertanya kepada sistem apa kepemilikan file tersebut, fakeroot
ubah jawaban agar sesuai dengan kepemilikan yang dicatat sebelumnya.
Dengan demikian Anda dapat menjalankan paket build tanpa menjadi root, sambil mendapatkan hasil yang sama dengan yang Anda dapatkan jika Anda benar-benar menjalankannya sebagai root. Penggunaannya fakeroot
lebih aman: sistem masih tidak dapat melakukan apa pun yang tidak dapat dilakukan oleh pengguna Anda, sehingga proses pemasangan yang jahat tidak dapat merusak sistem Anda (selain menyentuh file Anda).
Di Debian, alat pembuatan telah diperbaiki sehingga tidak memerlukan ini lagi, dan Anda dapat membuat paket tanpafakeroot
. Ini didukung oleh dpkg
langsung dengan Rules-Requires-Root
arahan (lihat rootless-builds.txt
).
Untuk memahami tujuan dari fakeroot
, dan aspek keamanan berjalan sebagai root atau tidak, mungkin membantu untuk mempertimbangkan tujuan pengemasan. Ketika Anda menginstal perangkat lunak dari sumber, untuk digunakan di seluruh sistem, Anda melanjutkan sebagai berikut:
- membangun perangkat lunak (yang dapat dilakukan tanpa hak istimewa)
- instal perangkat lunak (yang perlu dilakukan sebagai root, atau setidaknya sebagai pengguna diizinkan untuk menulis ke lokasi sistem yang sesuai)
Saat Anda mengemas perangkat lunak, Anda menunda bagian kedua; tetapi untuk melakukannya dengan sukses, Anda masih perlu "menginstal" perangkat lunak, ke dalam paket daripada ke sistem. Jadi saat Anda mengemas perangkat lunak, prosesnya menjadi:
- membangun perangkat lunak (tanpa hak istimewa)
- berpura-pura menginstal perangkat lunak (lagi tanpa hak istimewa)
- tangkap penginstalan perangkat lunak sebagai paket (ditto)
- membuat paket tersedia (ditto)
Sekarang pengguna menyelesaikan proses dengan menginstal paket, yang perlu dilakukan sebagai root (atau lagi, pengguna dengan hak istimewa yang sesuai untuk menulis ke lokasi yang sesuai). Di sinilah proses privilege tertunda direalisasikan, dan merupakan satu-satunya bagian dari proses yang membutuhkan privilege khusus.
fakeroot
membantu dengan langkah 2 dan 3 di atas dengan memungkinkan kami menjalankan proses instalasi perangkat lunak, dan menangkap perilaku mereka, tanpa berjalan sebagai root.