Mengapa kita perlu fakeroot
perintah sama sekali? Tidak bisa kita hanya menggunakan sudo
atau su
perintah?
Halaman manual mengatakan:
fakeroot - jalankan perintah di lingkungan memalsukan hak root untuk manipulasi file
About.com mengatakan:
Memberikan lingkungan root palsu. Paket ini dimaksudkan untuk mengaktifkan sesuatu seperti:
dpkg-buildpackage -rfakeroot
yaitu untuk menghapus kebutuhan untuk menjadi root untuk membangun paket. Hal ini dilakukan dengan menetapkanLD_PRELOAD
untuklibfakeroot.so
, yang menyediakan bungkus sekitargetuid
,chown
,chmod
,mknod
,stat
, ..., sehingga menciptakan lingkungan akar palsu. Jika Anda tidak memahami semua ini, Anda tidak perlufakeroot
!
Pertanyaan saya adalah, tujuan khusus apa yang dipecahkan dengan sederhana su
atau sudo
tidak? Misalnya, untuk mengemas ulang semua paket yang diinstal di ubuntu kami memberikan perintah berikut:
$ fakeroot -u dpkg-repack `dpkg --get-selections | grep install | cut -f1`
Bisakah kita melakukan perintah di atas dengan sudo atau su bukannya fakeroot seperti ini:
$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`
SUNTING:
Berlari:
$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`
memberi saya kesalahan ini:
direktori kontrol memiliki izin buruk 700 (harus> = 0755 dan <= 0775)
Ada alasan mengapa
sudo
atausu
karena itu adalah mesin Anda.fakeroot
memiliki dua penggunaan 1) itu membodohi program untuk meyakini bahwa Anda memang pengguna root, yang mungkin memerlukan beberapa perangkat lunak berpemilik yang ditulis dengan buruk bahkan jika tidak diperlukan (biasanya pengembang Windows pergi ke Linux) dan 2) memungkinkan mengemulasi mode file dan perubahan kepemilikan yang tidak Anda inginkan t jika tidak dapat dilakukan, terutama untuk membuattar
file dengan izin dan kepemilikan yang benar, berguna misalnya saat mengemas perangkat lunak.fakeroot
! Jika Anda tidak dapat memikirkan situasi di manafakeroot
berguna, maka Anda benar-benar tidak membutuhkannya. Tetapi orang-orang yang memang membutuhkannya benar-benar memahami use-case.Jawaban:
Bayangkan Anda adalah pengembang / pengelola paket, dll. Yang bekerja di server jarak jauh. Anda ingin memperbarui konten suatu paket dan membangunnya kembali, mengunduh dan menyesuaikan kernel dari kernel.org dan membuatnya, dll. Ketika mencoba melakukan hal-hal itu, Anda akan menemukan bahwa beberapa langkah mengharuskan Anda memiliki
root
hak (UID
danGID
0) karena berbagai alasan (keamanan, izin yang diabaikan, dll). Tetapi tidak mungkin untuk mendapatkanroot
hak, karena Anda bekerja pada mesin jarak jauh (dan banyak pengguna lain memiliki masalah yang sama dengan Anda). Inilah yang sebenarnyafakeroot
dilakukan: itu berpura-pura efektifUID
danGID
0 terhadap lingkungan yang menuntut mereka.Dalam praktiknya Anda tidak pernah mendapatkan
root
hak istimewa nyata (berlawanan dengansu
dansudo
yang Anda sebutkan).sumber
fakeroot
untuk mengubah pengaturan sistem ?? karena perintah yang akan kita jalankan akan berpikir itu berjalan sebagai root dan melakukan apa pun yang kita inginkan. bukan?Untuk melihat dengan jelas perbedaan antara fakeroot dan sudo / su asli, lakukan saja:
Selama Anda berada di dalam shell fakeroot, sepertinya Anda root - selama Anda tidak mencoba melakukan apa pun yang benar-benar membutuhkan privilege root. Dan inilah yang dibutuhkan alat pengemasan untuk membuat paket yang masuk akal pada mesin apa pun.
Bahkan, ketika Anda menggunakan fakeroot untuk kemasan, apa yang ingin Anda capai adalah membuat alat yang Anda jalankan di bawah fakeroot untuk melihat file Anda sebagai milik root. Tidak lebih, tidak kurang. Jadi pada kenyataannya, su atau sudo tidak akan berfungsi untuk mendapatkan kepemilikan file yang tepat.
sumber
.deb
file seperti itu , semua/usr
file saya dimiliki oleh siapa pun pengguna yang dipanggilfakeroot
?fakeroot
shell, mereka terlihat seperti itu. Ketika paket .deb dibuat di dalam shell ini, pemilik file dibaca dari sistem file (yangfakeroot
memotong dan mengembalikanroot
) dan disimpan dalam paket. Saat menginstal paket, dpkg kemudian memerlukan akses root karena paket menunjukkan file harus dimiliki oleh root.Karena jawabannya sulit dimengerti (untuk diri saya sendiri) dan butuh pemikiran untuk memahaminya ( komentar ini membuat saya memahaminya), saya akan memberikan penjelasan yang diharapkan lebih baik.
1. Apa yang terjadi di fakeroot
Tidak lebih dari apa yang terjadi dengan pengguna Anda sendiri. Sama sekali tidak lebih. Jika Anda
fakeroot
(yang ketika dipanggil memberi Anda shell baru, sepertisudo
akan), berpura-pura melakukan hal-hal yang Anda perlu izin, dan keluar, sama sekali tidak akan terjadi apa-apa.Kalau dipikir-pikir, itu buang-buang waktu saja. Mengapa Anda melakukan hal-hal yang sebenarnya tidak akan terjadi? Ini gila. Anda bisa saja tidak melakukan apapun dan tidak akan ada perbedaan, karena tidak ada jejaknya.
Tunggu sebentar...
2. Jejak fakeroot
Ada bisa menjadi jejak kiri
fakeroot
. Mari kita lihat perintah-perintah dalam jawaban MortenSickel yang cukup bagus dan layak mendapat upvote:Pada pandangan pertama, sepertinya menggunakan
fakeroot
adalah membuang-buang waktu. Pada akhirnya, jika Anda tidak menggunakannyafakeroot
, Anda akan mendapatkan hal yang sama.Hal yang halus di sini adalah ini:
Yang berarti konten file masih ingat menjadi root. Anda mungkin mengatakan tidak menggunakan
fakeroot
akan menghasilkan hasil yang sama. Anda benar, contoh ini terlalu sederhana.Mari kita ambil contoh lain:
Mari kita lihat apa yang terjadi. Saya pura-pura
root
, yang sama sekali tidak efektif, dan dibuatx
dany
. Saya berpurax
- pura menjadi milikmyuser
dany
milikroot
. Mereka berdua sebenarnya milikmyuser
(seperti yang bisa kita lihat pada akhirnya), tetapi saya hanya berpura - pura menjadi seperti itu.Kemudian saya membuat daftar dan menyimpan imajinasi saya ke file. Kemudian ketika saya melihat kembali file tersebut, saya bisa melihat siapa yang saya bayangkan file-file itu seharusnya dimiliki. Sekali lagi, mereka tidak benar-benar dimiliki oleh orang yang saya bayangkan, saya hanya membayangkannya saja.
3. Jadi ... Mengapa Anda menginginkannya lagi?
Anda mungkin mengatakan bahwa saya tidak benar-benar perlu memalsukan root untuk membuat cantuman itu. Saya bisa saja membuat daftar, lalu mengeditnya untuk mencerminkan imajinasi saya. Anda benar, Anda tidak perlu
fakeroot
melakukannya. Faktanya, mengetahui bahwafakeroot
sebenarnya tidak melakukan apa-apa, Anda tidak mungkin memperoleh kemampuan apa pun yang sebelumnya tidak Anda miliki.Tapi , dan ini yang
fakeroot
penting, mengedit daftar bisa jadi tidak penting. Seperti halnya dengan paket yang dapat diinstal pada sistem Anda, Anda memilikitar
ed,gzip
ed,xz
ed,bzip2
ed atau format lain yang menjaga file Anda bersama dan mengingat izin dan pemiliknya. Bisakah Anda dengan mudah memodifikasi file terkompresi dan mengedit kepemilikan file? Saya tidak tahu tentang Anda, tetapi saya tidak bisa memikirkan cara.Mungkinkah ada alat yang dibangun itu, setelah semuanya dikompresi, ia memodifikasi file yang dikompresi dan secara terprogram mengedit kepemilikan dan izin? Ya ada bisa. Jadi Anda bisa memalsukan kepemilikan sebelum mengompresi, atau mengubahnya setelah. Orang Debian memutuskan yang pertama lebih mudah.
4. Kenapa tidak pakai saja
sudo
?Pertama-tama, Anda tidak perlu hak akses root untuk membangun perangkat lunak dan Anda tidak perlu hak akses root untuk mengompresnya. Jadi jika Anda tidak membutuhkannya, Anda harus benar-benar menjadi pengguna Windows untuk berpikir untuk mendapatkan izin itu. Tapi selain sarkasme, Anda bahkan mungkin tidak memiliki kata sandi root.
Selain itu, katakanlah Anda memiliki izin root. Dan katakanlah Anda ingin berpura-pura bahwa file seharusnya memiliki akses hanya baca ke root. Jadi
sudo
, Anda benar-benar mengubah pemilik file dan izinroot
, Anda keluar dari shell root dan mencoba untuk mengemas semuanya. Anda gagal karena sekarang Anda tidak dapat membaca file lagi karena Anda tidak memiliki akses root. Jadi, Anda harussudo
dan kompres dan membangun paket sebagai root. Secara efektif, Anda harus melakukan semuanya sebagai root.Ini adalah TM Buruk .
Sebagai seorang pembuat paket, Anda tidak perlu izin root dan Anda seharusnya tidak mendapatkannya. Ketika Anda menginstal sebuah paket, Anda mungkin perlu menginstal beberapa file (
A
) sebagai root dan di situlah Anda memerlukan izin root. Yangfakeroot
dilakukan hanyalah membuat ini menjadi mungkin. Ini memungkinkan daftar pemaket yangA
dimiliki oleh root untuk pengarsipan, sehingga ketika paket didekompresi oleh pengguna, pengarsip tersebut meminta izin root dan membuatA
sebagai milik root.sumber
So either you could fake the ownerships before compressing, or change them after. Debian people decided the former is easier.
Ini membantu saya ketika saya terus berpikir 'mengapa tidak mengubahnya setelah itu?'.AFAIK, fakeroot menjalankan perintah di lingkungan di mana ia tampaknya memiliki hak akses root untuk manipulasi file. Ini berguna untuk memungkinkan pengguna membuat arsip (tar, ar, .deb, dll.) Dengan file di dalamnya dengan izin / kepemilikan root. Tanpa fakeroot, seseorang perlu memiliki hak akses root untuk membuat file konstituen dari arsip dengan izin dan kepemilikan yang benar, dan kemudian mengemasnya, atau seseorang harus membangun arsip secara langsung, tanpa menggunakan pengarsipan.
fakeroot berfungsi dengan mengganti fungsi pustaka manipulasi file (chmod (), stat () dll) dengan yang mensimulasikan efek fungsi pustaka yang sebenarnya, seandainya pengguna benar-benar menjadi root.
Sinopsis:
Periksa lebih lanjut di sini: fakeroot
sumber
the program running in it thinks it has root privileges
dan program memiliki hak akses root? Jika saya dapat melakukanrm -rf /
dan programnya, menjalankannya mengira saya memiliki hak akses root ...rm
- bypass memeriksa apakah Anda memiliki izin yang memadai, tetapi kernel itu sendiri tidak akan membiarkan Anda melakukannya; yangunlink
system call akan gagal. Tidak tergantung pada aplikasi sendiri untuk menangani izin, atau Anda akan dapat menulis aplikasi Anda sendiri yang tidak memeriksa izin dan melakukan apa pun yang Anda inginkan dengannyaSaya telah menggunakannya untuk skrip pembuatan paket. Saya tidak yakin bahwa orang yang menjalankan skrip memiliki akses tingkat root, tetapi skrip masih perlu untuk menghasilkan, katakanlah, file tar yang berisi file-file milik root. Cara paling sederhana untuk melakukannya adalah menjalankan skrip pembuatan paket di bawah fakeroot, yang menipu pengarsipan untuk meyakini bahwa file-file itu milik root, dan mengemasnya seperti itu di dalam arsip. Dengan cara ini, ketika paket itu dibongkar ke mesin tujuan (pada mesin yang berbeda sama sekali), file bukan milik pengguna aneh atau tidak ada.
Berpikir tentang itu, satu-satunya tempat saya telah melihat ini adalah untuk membangun semacam arsip: rootfs dari sistem embedded, arsip tar.gz, paket rpm, paket .deb, dll.
sumber
fakeroot
adalah alat penyelesaian untuk perangkat lunak pengemasan yang disadap: tidak ada alasan Anda perlu melakukan root untuk membuat paket semacam itu, tetapi karena mereka tidak memungkinkan Anda untuk menentukan izin file dengan cara lain selain mengaturnya langsung ke sistem file sebelum Anda tidak memiliki choiceSalah satu penggunaan umum adalah untuk mencari tahu file apa yang ingin diakses oleh biner yang gagal. Yaitu, mencari tahu dan memperbaiki atau mengatasi bug yang disebabkan oleh jalur berkode keras dan penanganan pengecualian yang tidak benar.
sumber
Anda dapat menggunakan fakeroot tanpa benar-benar memiliki hak akses root. Jika Anda memiliki
su
dan / atausudo
Anda akan dapat menghancurkan sistem Anda dengan sederhanarm -rf /
, tetapi dengan fakeroot paling banyak Anda akan menghapus direktori home Anda.sumber
fakeroot
. Anda dapat menghapus direktori home Anda sendiri.Jawaban sederhana:
su dan sudo menjalankan perintah sebagai root. fakeroot tidak, di luar pengaturan sandbox parsial itu.
sumber