it-swarm-id.com

Apa perlunya perintah `fakeroot` di linux

Mengapa kita perlu perintah fakeroot sama sekali? Tidak bisakah kita menggunakan perintah Sudo atau su?

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. Ini dilakukan dengan mengatur LD_PRELOAD Ke libfakeroot.so, Yang menyediakan pembungkus di sekitar getuid, chown, chmod, mknod , stat, ..., dengan demikian menciptakan lingkungan root palsu. Jika Anda tidak memahami semua ini, Anda tidak perlu fakeroot!

Pertanyaan saya adalah, apa tujuan khusus yang tidak diselesaikan oleh su atau Sudo sederhana? 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`

EDIT:

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

102
gkt

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 untuk memiliki root rights (UID dan GID 0) untuk alasan yang berbeda (keamanan, izin yang diabaikan, dll). Tetapi tidak mungkin untuk mendapatkan hak root, karena Anda bekerja pada mesin jarak jauh (dan banyak pengguna lain memiliki masalah yang sama dengan Anda). Inilah yang tepatnya fakeroot lakukan: ia berpura-pura sebagai UID dan GID dari 0 yang efektif terhadap lingkungan yang mengharuskannya.

Dalam praktiknya Anda tidak pernah mendapatkan hak istimewa root (berlawanan dengan su dan Sudo yang Anda sebutkan).

70
sakisk

Untuk melihat dengan jelas perbedaan antara fakeroot dan Sudo/su asli, lakukan saja:

$ fakeroot
# echo "Wow I have root access" > root.tst
# ls -l root.tst
-rw-rw-r-- 1 root root   23 Oct 25 12:13 root.tst
# ls -l /root
ls: cannot open directory /root: Permission denied
# exit
$ ls -l root.tst
-rw-rw-r-- 1 ubuntu ubuntu 23 Oct 25 12:13 root.tst

Selama Anda berada di dalam fakeroot Shell, sepertinya Anda root - selama Anda tidak mencoba melakukan apa pun yang benar-benar membutuhkan hak akses 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.

56
MortenSickel

Karena jawabannya sulit dimengerti (untuk diri saya sendiri) dan butuh pemikiran untuk memahaminya ( komentar ini membuat saya memahaminya), saya akan memberikan penjelasan yang semoga 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, seperti Sudo 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

There bisa ada jejak tersisa dari fakeroot. Mari kita lihat perintah di jawaban MortenSickel yang cukup bagus dan layak mendapat upvote:

$ fakeroot
# echo "Wow I have root access" > root.tst
# ls -l root.tst
-rw-rw-r-- 1 root root   23 Oct 25 12:13 root.tst
# ls -l /root
ls: cannot open directory /root: Permission denied
# exit
$ ls -l root.tst
-rw-rw-r-- 1 ubuntu ubuntu 23 Oct 25 12:13 root.tst

Pada pandangan pertama, sepertinya menggunakan fakeroot adalah total buang waktu. Pada akhirnya, jika Anda tidak menggunakan fakeroot, Anda akan mendapatkan hal yang sama.

Hal yang halus di sini adalah ini:

$ cat root.tst
Wow I have root access

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:

$ fakeroot
# touch x
# touch y
# chown myuser:myuser x
# ls -l > listing
# exit
$ ls -l
total 4
-rw-rw-r-- 1 myuser myuser 152 Jan  7 21:39 listing
-rw-rw-r-- 1 myuser myuser   0 Jan  7 21:39 x
-rw-rw-r-- 1 myuser myuser   0 Jan  7 21:39 y
$ cat listing
total 0
-rw-rw-r-- 1 root   root   0 Jan  7 21:39 listing
-rw-rw-r-- 1 myuser myuser 0 Jan  7 21:39 x
-rw-rw-r-- 1 root   root   0 Jan  7 21:39 y

Mari kita lihat apa yang terjadi. Saya berpura-pura menjadi root, yang sama sekali tidak efektif, dan menciptakan x dan y. Saya berpura-pura x menjadi milik myuser dan y menjadi milik root. Mereka berdua sebenarnya milik myuser (seperti yang bisa kita lihat di bagian akhir), tapi saya hanya pura-pura seperti itu.

Kemudian saya membuat daftar dan menyimpan imajinasi saya ke file. Kemudian ketika saya melihat kembali file tersebut, saya dapat melihat siapa yang saya bayangkan file tersebut seharusnya dimiliki oleh. Sekali lagi, mereka tidak benar-benar dimiliki oleh orang yang saya bayangkan, saya hanya membayangkan itu.

3. Jadi ... Mengapa Anda menginginkannya lagi?

Anda mungkin mengatakan bahwa saya tidak benar-benar perlu memalsukan root untuk membuat daftar itu. Saya bisa saja membuat daftar, lalu mengeditnya untuk mencerminkan imajinasi saya. Anda benar, Anda tidak perlu fakeroot untuk itu. Faktanya, mengetahui bahwa fakeroot tidak benar-benar melakukan apa-apa, Anda tidak mungkin mendapatkan kemampuan apa pun yang sebelumnya tidak Anda miliki.

Tapi , dan inilah masalahnya fakeroot adalah semua, mengedit cantuman itu bisa menjadi tidak trivial. Seperti halnya dengan paket yang dapat diinstal pada sistem Anda, Anda memiliki tared, gziped, xzed, bzip2ed atau format lain apa pun yang menyatukan file Anda 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 terkompresi 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. Mengapa tidak menggunakan 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 Anda Sudo, benar-benar mengubah pemilik file dan izin menjadi root, Anda keluar dari root Shell dan mencoba mengemas semuanya. Anda gagal karena sekarang Anda tidak dapat membaca file lagi karena Anda tidak memiliki akses root. Jadi Anda harus Sudo dan kompres dan membangun paket sebagai root. Secara efektif, Anda harus melakukan semuanya sebagai root.

Ini burukTM.

Sebagai seorang pembuat paket, Anda tidak memerlukan 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. Semua fakeroot lakukan adalah membuat ini mungkin. Itu memungkinkan daftar pemaket A yang dimiliki oleh root untuk pengarsipan, sehingga ketika paket didekompresi oleh pengguna, pengarsip tersebut meminta izin root dan membuat A sebagai dimiliki oleh root.

49
Shahbaz

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 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:

 fakeroot [-l|--lib library] [--faked faked-binary] [--] [command]  

Periksa lebih lanjut di sini: fakeroot

33
herbalessence

Saya 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 tersebut bukan milik pengguna aneh atau tidak ada.

Berpikir tentang itu, satu-satunya tempat saya melihat ini adalah untuk membangun semacam arsip: rootfs dari sistem embedded, arsip tar.gz, paket rpm, paket .deb, dll.

11
Dysaster

Salah 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 kode yang keras dan penanganan pengecualian yang tidak tepat.

3
Eero Ketonen

Jawaban sederhana:

su dan Sudo menjalankan perintah sebagai root. fakeroot tidak, di luar pengaturan sandbox parsial itu.

1
jdmayfield

Anda dapat menggunakan fakeroot tanpa benar-benar memiliki hak akses root. Jika Anda memiliki su dan/atau Sudo Anda akan dapat menghancurkan sistem Anda dengan rm -rf / Sederhana, tetapi dengan fakeroot paling banyak Anda akan menghapus direktori home Anda.

1
gabrielhidasy