Şimdiye kadar, toplayabildiğim şey, fakeroot unzip / tar'ed olduğunda kök olması gereken bir dosyaya sahiplik vermek için kullanılıyor. Benim sorum, neden bunu sadece chown ile yapamıyorsun?
Çünkü bunu chown
en azından root olmayan bir kullanıcı olarak yapamazsınız. (Ve root olarak çalışıyorsanız, buna ihtiyacınız yoktur fakeroot
.) Bütün mesele fakeroot
: root gerektiren işlemlerin başarılı olduğunu iddia ederken, root olarak çalıştırılması beklenen programların normal kullanıcı olarak çalışmasına izin vermek.
(Bu bitse bile paketin yükleme işlemi hatasız devam edebilirsiniz yüklenmekte böylece, bir paket oluştururken Bu genellikle kullanılan chown root:root
veya install -o root
vs.). fakeroot
dosya verdiğini iddia ettiği sahte sahipliği hatırlar, bu nedenle sahipliğe bakan sonraki işlemler bunu gerçek yerine görür; bu, sonraki tar
çalışmaların, örneğin dosyaları root'a ait olarak depolamasına izin verir .
Sahte kök Linux'ta istenmeyen ayrıcalık yükselmelerini nasıl durdurur? Eğer fakeroot, katranı root'a ait bir dosya yapmak için kandırabilirse, neden SUID ile benzer bir şey yapmıyorsunuz?
fakeroot
tar
hiçbir şey yapmayı kandırmaz , bu değişikliklerin yapıyı barındıran sistem üzerinde etkili olmasına izin vermeden yapının yapmak istediği değişiklikleri korur. fakeroot
Kök ve suid'e ait bir dosya içeren bir tarball üretmenize gerek yoktur ; Eğer bir ikili varsa evilbinary
, çalışan tar cf evil.tar --mode=4755 --owner=root --group=root evilbinary
, normal bir kullanıcı olarak, evilbinary
kök ve suid içeren bir tarball oluşturur. Ancak, kök olarak yapmadığınız sürece bu tarball'ı çıkaramayacak ve bu izinleri koruyamayacaksınız: burada ayrıcalık yükselmesi yoktur. fakeroot
bir ayrıcalıktır de-escalation tool: Bir yapıyı normal kullanıcı olarak çalıştırmanıza izin verirken, yapının kök olarak çalıştırılmış olsaydı sahip olacağı etkileri koruyarak bu efektlerin daha sonra tekrar oynatılmasına izin verir. Efektleri “gerçek için” uygulamak her zaman kök ayrıcalıkları gerektirir; fakeroot
bunları elde etmek için herhangi bir yöntem sağlamaz.
Kullanımını fakeroot
daha ayrıntılı olarak anlamak için , tipik bir dağıtım yapısının aşağıdaki işlemleri içerdiğini düşünün (diğerleri arasında):
- köküne ait dosyaları yükle
- ...
- hala root'a ait olan bu dosyaları arşivleyin, böylece çıkarıldıklarında root'a sahip olurlar
Kök değilseniz ilk bölüm açıkça başarısız olur. Ancak, fakeroot
normal bir kullanıcı olarak çalışırken , işlem
- kökün sahip olduğu dosyaları yükle - bu başarısız olur, ancak
fakeroot
başarılı olduğunu iddia eder ve değiştirilen sahipliği hatırlar
- ...
- hâlâ root'a ait olan bu dosyaları arşivle - ne zaman
tar
(veya arşivleyici kullanılıyorsa) sisteme dosya sahipliğinin ne olduğunu sorar fakeroot
, yanıtı daha önce kaydettiği sahiplikle eşleşecek şekilde değiştirir
Böylece, root olarak çalışıyorsanız alacağınız aynı sonuçları elde ederken, root olmadan bir paket derlemesi çalıştırabilirsiniz. Kullanımı fakeroot
daha güvenlidir: sistem hala kullanıcılarınızın yapamayacağı hiçbir şeyi yapamaz, bu yüzden sahte bir yükleme işlemi sisteminize zarar veremez (dosyalarınıza dokunmanın ötesinde).
Debian'da, derleme araçları artık buna gerek kalmayacak şekilde geliştirildi ve paketleri olmadan da oluşturabilirsinizfakeroot
. Bu dpkg
doğrudan Rules-Requires-Root
yönerge ile desteklenmektedir (bkz. rootless-builds.txt
).
fakeroot
Kök olarak çalışmanın amacını ve güvenlik yönlerini anlamak, ambalajın amacını düşünmeye yardımcı olabilir. Bir yazılım parçasını kaynaktan yüklediğinizde, sistem genelinde kullanım için aşağıdaki şekilde ilerlersiniz:
- yazılımı oluşturmak (ayrıcalık olmadan yapılabilir)
- yazılımı yükleyin (kök olarak veya en azından kullanıcının uygun sistem konumlarına yazmasına izin verdiği şekilde)
Bir yazılım paketlediğinizde, ikinci kısmı geciktirirsiniz; ancak bunu başarılı bir şekilde yapabilmek için yazılımı sistem yerine paketin içine “yüklemeniz” gerekir. Dolayısıyla, yazılımı paketlediğinizde, işlem şöyle olur:
- yazılımı oluşturun (özel ayrıcalıklarınız olmadan)
- yazılımı kurmayı taklit et (yine özel ayrıcalıklara sahip olmadan)
- yazılım kurulumunu bir paket olarak yakala (ditto)
- paketi hazır hale getir (ditto)
Artık bir kullanıcı, kök olarak yapılması gereken paketi (veya tekrar, uygun konumlara yazmak için uygun ayrıcalıklara sahip bir kullanıcı) yükleyerek işlemi tamamlar. Bu, gecikmiş ayrıcalıklı sürecin gerçekleştiği yerdir ve sürecin özel ayrıcalıklara ihtiyaç duyan tek parçasıdır.
fakeroot
yazılım yükleme işlemlerini çalıştırmamıza ve davranışlarını kök olarak çalıştırmadan yakalamamıza izin vererek yukarıdaki 2. ve 3. adımlara yardımcı olur.