Ne kadar sahte Linux'ta bir güvenlik ihlali değil?


18

Bu sorudan oldukça güzel cevaplar okuduktan sonra , neden kök olmanın faydalarından hiçbirini almadan kök gibi davranmak istediğinize hala bulanıkım.

Ş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?

Burada bir Google Grupları tartışması , Debian çekirdeğini derlemek için sahte kök gerektiğine dikkat çekiyor (bunu ayrıcalıksız bir kullanıcıdan yapmak istiyorsanız). Benim yorumum, derlemek için kök olmanızın nedeni büyük olasılıkla diğer kullanıcılar için okuma izinleri ayarlanmamış olmasıdır. Öyleyse, fakeroot'un derlemeye izin verdiği bir güvenlik ihlali değil (bu, gcc'nin artık kök için olan bir dosyayı okuyabileceği anlamına gelir)?

Bu cevap burada asıl sistem çağrıları gerçek uid / gid kullanıcının ile hazır olduğunu açıklar nerede fakeroot bu moral yüzden daha?

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?

Topladığım şeyden, fakeroot, kök oluşturmak için oluşturduğunuz paket dosyalarının sahibini değiştirmek istediğinizde yararlıdır. Ama bunu chown ile yapabilirsiniz, öyleyse bu bileşenin nasıl kullanıldığını anlama konusunda eksikliğim var mı?


1
Bir çekirdeği derlemek için sahte köklere ihtiyacınız yoktur. Çekirdek oluşturma sistemi o kadar da deli değil. Bağlantılı tartışma, gerçek çekirdek yapısının sadece bir adım olduğu bir Debian çekirdek paketi yapmakla ilgilidir .

@ WumpusQ.Wumbley Bunu düzeltirim ve neden böyle olduğunu söyleyebilir misiniz?
ng.newbie

Sahte kök Debian bir şey ve Linux Debian daha fazla olduğu için?

@ WumpusQ.Wumbley herhangi bir dağıtım üzerinde çalışmalıdır.
user253751

Yanıtlar:


33

Ş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 chownen 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:rootveya install -o rootvs.). fakerootdosya 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?

fakeroottarhiç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. fakerootKö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, evilbinarykö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. fakerootbir 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; fakerootbunları elde etmek için herhangi bir yöntem sağlamaz.

Kullanımını fakerootdaha 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, fakerootnormal bir kullanıcı olarak çalışırken , işlem

  • kökün sahip olduğu dosyaları yükle - bu başarısız olur, ancak fakerootbaş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ı fakerootdaha 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 dpkgdoğrudan Rules-Requires-Rootyönerge ile desteklenmektedir (bkz. rootless-builds.txt).

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

  1. yazılımı oluşturmak (ayrıcalık olmadan yapılabilir)
  2. 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:

  1. yazılımı oluşturun (özel ayrıcalıklarınız olmadan)
  2. yazılımı kurmayı taklit et (yine özel ayrıcalıklara sahip olmadan)
  3. yazılım kurulumunu bir paket olarak yakala (ditto)
  4. 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.


1
@ ng.newbie Alternatif bir açıklama istiyorsanız: Kök veya diğer olası izinlere sahip dosyaları içeren bir tar dosyasını el ile oluşturmak için bir hex düzenleyici kullanmak tamamen mümkündür. Paketlenmiş sadece bazı bilgiler, sonuçta, dosya aslında sistemde var olana kadar herhangi bir gücü yoktur.
mbrig

@ ng.newbie Sahte ile veya sahte olmadan açar mısınız?
user253751

2
@ ng.newbie, ek olarak, kötü amaçlı amaçlar için bir suid-root ikili dosyasıyla bir tarball oluşturmak istiyorsanız, bunu gerçek kök olarak başka bir makinede yapabilir ve ardından hedefe kopyalayabilirsiniz. Orada fakeroot'a gerek yok. fakeroot, tar dosyasını oluşturmaya yardımcı olan bir araçtır tar --mode --owner, arşive eklenen her dosya için (ve diğer programlarla da çalışır) kullanım ihtiyacını ortadan kaldırır . Güvenilmeyen bir tar dosyasını veya arşivi kök olarak açtığınızda / açtığınızda, oluştururken değil, potansiyel sorunlar gelir.
ilkkachu

7

HAYIR. Sahte kök izin manipülasyonu ve raporlama araçları çalıştırmanıza izin verir, tutarlı bir şekilde rapor verecektir. Ancak aslında bu izinleri vermeyecektir. Sadece onlara sahip gibi görüneceksin (sahte). Çevre dışında hiçbir şeyi değiştirmeyecek.

Kullanıcı tarafından ayarlanamayan, daha sonra katran, zip veya başka bir paket kullanacak olan sahiplik ve izinleri içeren bir dizin yapısı oluşturmak istiyorsanız kullanışlıdır.

O değil gerçekten sahte, izinleri yükseltebilir. Başka türlü yapamayacağınız hiçbir şeyi (silme, yazma, okuma) yapmanıza izin vermez. Paketi (teorik olarak) onsuz üretebilirsiniz. lsO olmadan sahte bir rapor ( ) alabilirsiniz .

O çünkü bir güvenlik açığı değildir gelmez erişime izin veya onsuz yapamayacağını şey. Ayrıcalık olmadan çalışır. O doz Tümü olarak kesişim çağrılar ise chown, chmodo ne olurdu kaydeden dışında, vb, onları no-işlem yapar. Ayrıca, statvb. Çağrıları da engeller , böylece diğer komutlar yapılmış gibi kendi dahili veritabanından izinleri ve sahipliği raporlar. Bu yararlıdır, çünkü daha sonra dizini sıkıştırırsanız sahte izinlere sahip olacaktır. Daha sonra kök olarak sıkıştırmayı açarsanız, izinler gerçek olur.

Daha önce okunamaz / yazılamaz dosyalar, okunamaz / yazılamaz kalır. Oluşturulan özel dosyaların (örn. Aygıtlar) özel yetkileri olmayacaktır. Herhangi bir set-uid (başka bir kullanıcıya), dosyalar set-uid olmaz. Başka herhangi bir ayrıcalık yükselmesi çalışmaz.

Bu bir sanal makine türüdür: Genel olarak, sanal bir makine herhangi bir ortamı / işletim sistemini simüle edebilir, ancak diğer uygulamaların yapamadığı ana bilgisayara hiçbir şey yapamaz. Sanal makinede, herhangi bir şey yapıyor gibi görünebilirsiniz. Güvenlik sistemini aynı veya farklı olacak şekilde yeniden keşfedebilirsiniz. Ancak, sanal ortamda çalışan işlemin kullanıcı / grubuna ait kaynaklar olarak bunların tümü ana bilgisayarda olacaktır.


@ ctrl-alt-decor Yukarıdaki yorumda sorduğum gibi, * nix'te, sahibi başka bir ayrıcalıksız kullanıcıdan root atamak mümkün değil, değil mi? Bu nedenle, bir program izin veriyorsa, bunun bir güvenlik kusuru olmaması için iyi bir neden olmalı?
ng.newbie

@ ctrl-alt-decor Fakeroot okumam / yazmam / silmeme izin vermiyor, ancak syscalls için bir sarıcı yazdıysam, bu işlemleri de yapabilmem için mantıklı geliyor.
ng.newbie

@ ctrl-alt-decor Bu nedenle fakeroot'un var olmasının tek nedeni, kök olmadan bir dosyanın kök dizinine izinler ayarlamaktır. Bu bir güvenlik açığı değilse, Linux neden ilk başta buna izin vermiyor?
ng.newbie

1
Hayır , herhangi bir kullanıcıya sahte ayar kullanıcısı ve diğer bazı şeyleri sahte yapmanıza izin verir . Deneyin: fakeroot'u çalıştırın ve dışarıdan dosyalara bakın, dosyalara erişmemeye çalışın.
ctrl-alt-delor

4

Burada zaten iki iyi ve çok ayrıntılı cevap var, ancak orijinal fakeroot sayfa 1'in giriş paragrafının aslında oldukça açık ve özlü bir şekilde açıkladığını belirteceğim:

fakeroot , dosya işleme için kök ayrıcalıklarına sahip olduğu görünen bir ortamda bir komut çalıştırır. Bu, kullanıcıların kök izinleri / sahipliği olan dosyalarla arşiv (tar, ar, .deb vb.) Oluşturmasına izin vermek için kullanışlıdır. Sahte kök olmadan , doğru izinlere ve sahipliğe sahip arşivlerin kurucu dosyalarını oluşturmak ve daha sonra bunları paketlemek için kök ayrıcalıklarına sahip olmak gerekir veya arşivleyiciyi kullanmadan arşivleri doğrudan oluşturmak gerekir.

Fakeroot, kök olmayan bir kullanıcının, Linux'ta ikili yazılım paketleri oluşturmanın ve dağıtmanın kritik bir parçası olan köklere ait dosyalar içeren arşivler oluşturmasına izin verir. Olmadan fakeroot, paket köklerinin gerçek kök olarak çalışırken doğru dosya sahipliği ve izinlerini içerecek şekilde oluşturulması gerekir. Yani olur bir güvenlik riski oluşturabilir. Potansiyel olarak güvenilmeyen yazılımlar oluşturmak ve paketlemek, root privs ile yapılırsa büyük bir pozlamadır. Bu fakerootnedenle, ayrıcalıksız dosyaları olan ayrıcalıksız bir kullanıcı, kök sahipliğine sahip dosyalar içeren arşivler oluşturabilir. 2

Arşivde hiçbir şey çünkü Ama, bir güvenlik riski değil aslında dosyalar kadar kök ait TUTUCULU . Ve o zaman bile, dosyalar yalnızca ayrıcalıklı bir kullanıcı tarafından yapılırsa kök izinleri bozulmadan çıkarılır. fakeroot"Kök" dosyaları içeren destekli bir arşivin ayrıcalıklı bir kullanıcı tarafından çıkarıldığı adım , "sahte" kökün sonunda gerçek olduğu yerdir. Bu noktaya kadar, hiçbir gerçek kök ayrıcalığı elde edilmez veya atlanmaz.

notlar

  1. Fakeroot taklit edecek bazı rakipler / taklitçileri oluşmasına neden oldu fakeroot, yüklü dahil eğer fakeroot-ngve pseudo. Ancak IMHO'nun hiçbiri "taklitçinin" kılavuz sayfası neredeyse bu sorudaki noktaya ulaşmak konusunda net değil. Orijinal, tek ve tek fakerootOG ile sopa
  2. Diğer dağıtımlar / ambalaj-sistemleri sadece bu üstesinden değil kendi paket arşivinde kök sahipliğini kullanarak. Örneğin Fedora'da yazılım, ayrıcalıksız bir kullanıcı tarafından gerek kalmadan derlenebilir, kurulabilir ve paketlenebilir fakeroot. Her şey kullanıcının $HOME/rpmbuild/alanı içinde yapılır ve normalde ayrıcalıklı adımlar make install( --prefixve gibi mekanizmalar aracılığıyla DESTDIR) $HOME/rpmbuild/BUILDROOT/bir tür "fakechroot" alanı (aslında kullanmadan fakechroot) olarak düşünülebilecek bir hiyerarşiye yönlendirilir .

    Ancak sırasında bile make install, her şey ayrıcalıklı kullanıcı olarak yürütülür ve sahiplenir. Paket tanımı ( ) dosyasında geçersiz kılınmadıkça, çıkarılan dosya sahipliği ve izinler varsayılan olarak root,rootve 0644(veya 0755yürütülebilir dosyalar için) olarak ayarlanır .spec. Bu durumda, son paket içinde meta veri olarak depolanırlar. Rpm paketinin (ayrıcalıklı) kurulum işlemine kadar hiçbir izin veya sahiplik uygulanmadığından, fakerootpaketleme sırasında ne kök ne de gereklidir. Ama fakerootaynı sonuca giden yol gerçekten farklı.


1
İlk nota ile ilgili olarak, fakeroot-ng iddialar yerini alacak fakeroot, ama pratikte yerini olmadı ve AFAIK fakeroothala varsayılan olarak Debian kullanılan alet (gerektiğinde) 'dir.
Stephen Kitt

@StephenKitt Aha! Teşekkürler. Bunu merak ediyordum. Başlangıçta kafam karıştı çünkü ben fakerootmanpage aramaya gittim ve Google beni fakeroot-ng's ( terk maskeli fakeroot(1)) ' a attı ve sanırım gereğinden fazla aldım. Ama şimdi görüyorum ki fakeroot-ng 2014'ten beri güncellenmedi , fakeroot hala aktif . Görünüşe göre bir kaç yıl önce onu bırakan, ama şimdi durmuş sözde de var. Cevabımı buna göre ayarlayacağım.
FeRD

1
Evet o zamandan beri ilk çok az karıştı Debian'ın sitesinde manpage için potansiyel varsayılan olarak 'ın sürümü. Eğlenceli bir bükülme ;-) için son paragrafına göz atın . fakerootfakeroot-ngfakeroot-ng
Stephen Kitt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.