Setelah membaca beberapa jawaban yang cukup bagus dari pertanyaan ini , saya masih bingung mengapa Anda ingin berpura-pura bahwa Anda root tanpa mendapatkan manfaat sebenarnya dari menjadi root.
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?
Diskusi Google Groups di sini menunjukkan bahwa Anda perlu fakeroot untuk mengkompilasi kernel Debian (jika Anda ingin melakukannya dari pengguna yang tidak berkepentingan). Komentar saya adalah, alasan Anda perlu root untuk mengkompilasi mungkin karena izin baca tidak ditetapkan untuk pengguna lain. Jika demikian, bukankah itu pelanggaran keamanan yang memungkinkan fakeroot untuk dikompilasi (yang berarti gcc sekarang dapat membaca file yang digunakan untuk root)?
Jawaban ini di sini menjelaskan bahwa panggilan sistem sebenarnya dibuat dengan uid / gid pengguna yang sebenarnya , jadi sekali lagi di mana fakeroot membantu?
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?
Dari apa yang telah saya kumpulkan, fakeroot hanya berguna ketika Anda ingin mengubah pemilik file paket apa pun yang Anda buat menjadi root. Tapi Anda bisa melakukannya dengan chown, jadi di mana saya kurang dalam pemahaman saya tentang bagaimana komponen ini seharusnya digunakan?
Jawaban:
Karena Anda tidak bisa begitu saja melakukannya dengan
chown
, paling tidak sebagai pengguna non-root. (Dan jika Anda menjalankan sebagai root, Anda tidak perlufakeroot
.) Itulah inti darifakeroot
: 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
, atauinstall -o root
, dll.).fakeroot
ingat kepemilikan palsu yang pura-pura memberikan file, sehingga operasi selanjutnya melihat kepemilikan melihat ini bukan yang asli; ini memungkinkantar
menjalankan selanjutnya misalnya untuk menyimpan file yang dimiliki oleh root.fakeroot
tidak meniputar
untuk melakukan apa pun, ia mempertahankan perubahan yang ingin dibuat tanpa membiarkan perubahan itu berlaku pada sistem hosting yang membangun. Anda tidak perlufakeroot
membuat tarball yang berisi file yang dimiliki oleh root dan suid; jika Anda memiliki binerevilbinary
, menjalankantar cf evil.tar --mode=4755 --owner=root --group=root evilbinary
, sebagai pengguna biasa, akan membuat tarball berisievilbinary
, 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):Bagian pertama jelas gagal jika Anda tidak root. Namun, saat berjalan di bawah
fakeroot
, sebagai pengguna normal, proses menjadifakeroot
berpura-puralah berhasil, dan ingat kepemilikan yang berubahtar
(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 tanpa
fakeroot
. Ini didukung olehdpkg
langsung denganRules-Requires-Root
arahan (lihatrootless-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: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:
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.sumber
tar --mode --owner
setiap file yang ditambahkan ke arsip (dan bekerja dengan program lain juga). Masalah potensial muncul jika / ketika Anda membongkar file tar atau arsip yang tidak dipercaya sebagai root, bukan saat membuatnya.TIDAK. Root palsu memungkinkan Anda untuk menjalankan manipulasi izin dan alat pelaporan, itu akan melaporkan secara konsisten. Namun sebenarnya tidak akan memberikan izin ini. Itu hanya akan terlihat seperti Anda memilikinya (palsu). Itu tidak akan mengubah apa pun di luar lingkungan.
Berguna, jika Anda ingin membuat struktur direktori, yang berisi kepemilikan dan izin, yang tidak dapat ditetapkan oleh pengguna Anda, maka Anda akan tar, zip, atau paket lainnya.
Itu tidak benar - benar meningkatkan izin, itu palsu. Itu tidak membiarkan Anda melakukan apa pun (hapus, tulis, baca) yang tidak bisa Anda lakukan. Anda dapat menghasilkan paket (secara teori) tanpa itu. Anda bisa mendapatkan laporan palsu (
ls
) tanpa itu.Ini bukan kelemahan keamanan, karena tidak memungkinkan akses, atau apa pun yang tidak dapat Anda lakukan tanpanya. Ini berjalan tanpa hak istimewa. Semua itu dosis adalah mencegat panggilan untuk
chown
,chmod
, dll membuat mereka tidak-operasi, kecuali bahwa ia mencatat apa yang akan terjadi. Itu juga memotong panggilan kestat
dll sehingga melaporkan izin dan kepemilikan, dari database internal sendiri, seolah-olah perintah lain telah dilakukan. Ini berguna, karena jika Anda kemudian zip direktori, itu akan memiliki izin palsu. Jika Anda kemudian unzip, sebagai root, maka izin akan menjadi nyata.File apa pun yang tidak dapat dibaca / ditulis sebelumnya, akan tetap tidak dapat dibaca / ditulis. File khusus apa pun (mis. Perangkat) yang dibuat, tidak akan memiliki kekuatan khusus. Set-uid apa pun (untuk pengguna lain), file tidak akan ditetapkan-uid. Eskalasi hak istimewa lainnya tidak akan berfungsi.
Ini adalah jenis mesin virtual: Mesin virtual, secara umum, dapat mensimulasikan lingkungan / OS, tetapi tidak dapat melakukan apa pun pada host, yang tidak dapat dilakukan oleh aplikasi lain. Di dalam mesin Virtual, Anda dapat melakukan apa saja. Anda dapat mengubah 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.
sumber
Sudah ada dua yang baik, dan jawaban yang sangat rinci di sini, tapi aku hanya akan menunjukkan bahwa paragraf pengantar dari aslinya
fakeroot
halaman manual 1 benar-benar menjelaskan dengan cukup jelas dan ringkas:Fakeroot memungkinkan pengguna non-root untuk membuat arsip yang berisi file yang dimiliki root, yang merupakan bagian penting dalam menghasilkan dan mendistribusikan paket perangkat lunak biner di Linux. Tanpa
fakeroot
, arsip paket harus dihasilkan saat berjalan sebagai root aktual, sehingga mengandung hak kepemilikan dan file yang benar. Itu akan menjadi risiko keamanan. Membangun dan mengemas perangkat lunak yang berpotensi tidak tepercaya adalah paparan besar jika dilakukan dengan root privs. Berkatfakeroot
, pengguna yang tidak terprivasi dengan file yang tidak terprivasi masih dapat menghasilkan arsip yang berisi file dengan kepemilikan root. 2Tapi itu bukan risiko keamanan, karena tidak ada dalam arsip yang benar - benar dimiliki oleh root hingga file-file tersebut DIEKSTRAKSI . Dan bahkan kemudian, file-file hanya akan diekstraksi dengan izin root mereka utuh jika dilakukan oleh pengguna yang memiliki hak istimewa. Langkah itu - di mana
fakeroot
arsip yang dibantu oleh yang berisi file "root" diekstraksi oleh pengguna istimewa - adalah tempat root "palsu" akhirnya menjadi nyata. Sampai saat itu, tidak ada hak akses root aktual yang pernah diperoleh atau dilewati.Catatan
fakeroot
diinstal, termasukfakeroot-ng
danpseudo
. Tapi IMHO tidak juga halaman manual "peniru" hampir sejelas tentang langsung ke titik pada pertanyaan ini. Tetap dengan yang asli, satu-satunyafakeroot
OGDistro / sistem pengemasan lain mengatasi hal ini 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 tanpa diwajibkan
fakeroot
. Itu semua dilakukan dalam ruang pengguna$HOME/rpmbuild/
, dan langkah-langkah yang biasanya istimewa sepertimake install
dialihkan (melalui mekanisme suka--prefix
danDESTDIR
) ke$HOME/rpmbuild/BUILDROOT/
hierarki yang dapat dianggap semacam ruang "fakechroot" (tanpa benar-benar menggunakanfakechroot
).Tetapi bahkan selama
make install
, semuanya dijalankan sebagai dan dimiliki oleh pengguna yang tidak memiliki hak. Kepemilikan dan izin file yang diekstraksi akan diatur keroot,root
dan0644
(atau0755
untuk yang dapat dieksekusi) secara default, kecuali ditimpa dalam definisi paket (.spec
) file dalam hal ini mereka disimpan sebagai metadata dalam paket akhir. Karena tidak ada izin atau kepemilikan yang benar-benar diterapkan hingga proses pemasangan paket rpm (istimewa), tidakfakeroot
diperlukan root atau pun selama pengemasan. Tetapifakeroot
sebenarnya hanya jalan yang berbeda untuk hasil yang sama.sumber
fakeroot-ng
klaim untuk menggantikanfakeroot
, tetapi dalam praktiknya itu belum menggantinya, dan AFAIKfakeroot
masih merupakan alat yang digunakan dalam Debian secara default (bila perlu).fakeroot
manual, dan Google mencampakkan saya difakeroot-ng
(menyamar sebagaifakeroot(1)
), dan saya kira saya terlalu banyak mengambil keputusan. Tapi saya melihat sekarang bahwa fakeroot-ng belum diperbarui sejak 2014 , sedangkan fakeroot masih aktif . Rupanya ada juga pseudo yang berhasil melakukannya beberapa tahun yang lalu, tetapi sekarang macet. Saya akan menyesuaikan jawaban saya.fakeroot
manual di situs Debian mengarah kefakeroot-ng
versi secara default. Lihat paragraf terakhir darifakeroot-ng
twist yang lucu ;-).