Süper kullanıcı hangi erişim haklarını ihlal edemez?


23

Fr. Br. George , derslerinden birinde ( Rusça), süper kullanıcının ihlal edemeyeceği bazı erişim haklarının olduğunu söyledi. Bu, süper kullanıcının bir şey yapmasını yasaklayabilen bir erişim hakkı vardır.

İnternette bu bilgiyi bulamadım ve ne olduklarını merak ediyorum. Bu muhtemelen sistemin çekirdek uygulaması ile ilgili bir şey, değil mi? Belki bazı sistem işlemlerini durduramaz? Ya da belki gerçek modda bir işlem yürütemez?

Bu soru SELinux ile ilgili değildir (George, sorudan hemen önce bunun hakkında konuşuyordu).


2
Bir "ayrıcalık" veya "izin", belirli kullanıcı hesaplarına verilebilecek bir şey yapma hakkıdır. UNIX ve Linux'ta (SELinux gibi sertleştirilmiş sürümler hariç), root tüm haklara sahiptir. Verilecek bir hak yoktur rootve bu nedenle ondan alınabilecek bir hak yoktur root.
MSalters

1
@ MSalters, af? Birisi kesinlikle işlem yeteneklerini iptal ederken UID 0'ı tutabilir.
Charles Duffy

... set SECBIT_NOROOTve uid 0 olması artık otomatik olarak bir yetenek vermemektedir.
Charles Duffy

Pek çok cevap - bunu bir topluluk wiki'sine dönüştürmek mantıklı olur mu yoksa birileri özet bir cevap yazmalı mı?
Simon Richter

1
@SimonRichter Aynı zamanda bize dersinde ne anlama geldiğini söylemesi için George olarak gidiyorum.
Kolyunya

Yanıtlar:


24

erişim kök reddetti :

rootdoğrudan ağ erişimi reddedilebilir. Bu, internete bağlı ana bilgisayarlarda yararlıdır, çünkü smithdaha sonra oturum açmanızı gerektirir sudo.

bazı şeyler kök yapamaz :

Bu bir ayrıcalık eksikliği için DEĞİLDİR. Kökün yapamayacağı bir şey göremiyorum, ancak bazı teknik sorunlar "yasak" olarak yaşanmış olabilir.

Kökündüm, neden sıradan bir kullanıcı yapabilirken bu dosyayı neden oluşturamıyorum / silemiyorum?

NFS / samba paylaşımındasınız ve belirli ( access=) bir izin vermediniz . Sıradan bir kullanıcı genel yasaya uymuyor. (aşağıdaki yerel vs uzak kök dizinine bakın)

Kökündüm, neden bu işlemi öldüremiyorum?

Bekleyen bir G / Ç var ve fiziksel sürücü / uzak LUN bağlantısı kesildi, işlem yalnızca yeniden başlatmayla öldürülebilir.

Kökündüm, archar’ın şifresini nasıl alabilirim?

Bir su - archemaröncekini bilmeden, tamam şifresini değiştirebilirsiniz veya şifresini değiştiremezsiniz, ancak şifreler tek yönlü bir karma kullanarak saklanır, çünkü bunu okuyamazsınız (bir anahtar günlüğünün kısaltması).

yerel ve uzak kök

  • İstasyonunuzda / PC'nizde root olabilir ve bir şirket / kolej / üniversite / sağlayıcı NFS paylaşımını kullanabilirsiniz.
  • Ardından, NFS'yi dışa aktaran bilgisayarda yalnızca kök olmayan bir giriş yapabilirsiniz.

şimdi

cp /bin/bash /nfs/home/me/bash
chown root /nfs/home/me/bash
chmod u+s /nfs/home/me/bash

sadece NFS sunucusuna giriş yapın, çalıştırın ./bashve şirket / üniversite sunucusuna ihtiyacınız var.


Durum 1 temel olarak bir hatadır çünkü rootmutlaka yerel olarak değil, diğer sistemlerde değilsiniz. 2. ve 3. vaka ayrıcalık değildir (kimseye verilemez). Yani +1, ilk cümleniz doğru görünüyor.
MSalters

Teknik olarak, rootyerel makinede, su - usernamebaşka bir şey değilse , yerel kullanıcı ile aynı ayrıcalıkla, hoşlandığı her şeyi yapabilir . Neden rootböyle ağ paylaşımları yazamamaktan rahatsız olduklarından asla emin değilim ; oldukça anlamsız görünüyor.
Tom Hunt

4
Asırlık soru, "Erişemediği rootbir şifre bile oluşturabilir mi?"
corsiKa

5
@TomHunt, rootNFS paylaşımlarına erişememesinin nedenlerinden biri , uzak sunucuda "suid root" ikili dosyalarının oluşturulmasını engellemek, yani sunucuya uzaktan erişimin tamamına kaldırabilen bir şey.
Mark

1
Kesintisiz beklemede bir süreci öldürmek benim için bir hak gibi görünmüyor . Bu yapamayacağın bir şey. Tam bir dosya sistemine yazmak gibi.
Blacklight Shining

11

Her zamanki gibi, bu yanlıştır - Süper kullanıcı sistemin sağladığı herhangi bir işlevsellik için ayrıcalıklara / izinlere sahiptir (1). Bu kuralın bozulduğu yer, SELinux'u karışıma attığınız zamandır. SELinux ile, kök işlemlerin bile belirli eylemlere izin vermeme haklarını kısıtlamak mümkündür. Bununla birlikte, izin verilmeyen belirli eylemler yerel makinenin SELinux yapılandırmasına büyük ölçüde bağımlıdır, bu nedenle SELinux ile bile, bu soru genel anlamda cevaplanamaz.

(1) - bir sistem belirli bir özellik sağlamazsa, örneğin gerçek zamanlı çekirdek işlevselliği yoksa, o zaman "kökün bu işlevselliğe erişimi yok" ifadesinin yanlış olduğunu düşünüyorum, çünkü bu ifade bir yanlış varsayım (yani, verilen özelliğin bu sistemdeki herhangi biri tarafından kullanılabileceği)


1
Cevabınız için teşekkürler, John! Ama açıkça bu sorunun SELinux ile ilgili olmadığını belirtti ...
Kolyunya

O zaman daha fazla ayrıntıyı engellemek için, root'un sahte olması için belirli fonksiyonlara erişimi olmadığı ifadesini göz önünde bulundurmak zorunda kalacağım. (İşletim sisteminin BIOS'tan kilitlendiğini veya BIOS güvenliği ile benzer olduğunu düşünmüyorum.)
John

Ayrıca, root'un SELinux konfigürasyonunu kontrol ettiği komplikasyonlara sahipsiniz. Eğer (root olarak) bir eylemde engellenmişsem, eyleme izin vermek için SELinux'u değiştirebilir ve daha sonra tekrar değiştirebilirim. Günlük izinin nerede saklandığına bağlı olarak bununla kaçabilirsiniz.
doneal24

2
Mutlaka doğru değil. CAP_NET_ADMIN ürününü kaldırın ve kullanıcı kimliğinin 0 olması bir işlemin ağ yapılandırmasını değiştirmesine izin vermiyor. (Aynı şekilde CAP_SYS_ADMIN ve kontrol ettiği yetenekler vs.).
Charles Duffy

5

Bir yandan, hiçbir kullanıcının yapamayacağı şeyler var, örneğin:

  • bağlayıcı dizinler (dosya sistemi sınırlamaları nedeniyle)
  • önceden yazılmış bir CD-ROM'a yazma (çünkü fizik)

Ancak bunlar imtiyaz değil, çünkü onlara verilemiyor, kimseye mümkün değil.

Daha sonra, tüm sistem veya bunun açılıp kapatılabilecek kısımları için kısıtlamalar vardır.
Örneğin, OS X'te, yalnızca Apple tarafından imzalanmışsa kodun çalışmasına izin verme seçeneği vardır.

Bunun da gerçek bir ayrıcalık olduğunu düşünmüyorum, çünkü süper kullanıcı yapamazsa, hiçbir kullanıcıya sahip olamaz. Bunu yalnızca küresel olarak devre dışı bırakabilirsiniz.

Düzenleme:
Yürütülebilir bit olmadan bir dosya fikriniz de bu kategoriye girer, çünkü gerçekten kimse bunu yapamaz ve kimseye bu izin verilemez.
Ve başka bir kullanıcıya veya gruba bu dosyayı yürütme izni verirken, ancak kök veya bir kullanıcı grubu kökü bulunmadığında bile, kök bu dosyayı çalıştırabilir (OS X 10.10, 10.11 ve Ubuntu 15.04 sunucusunda test edilmiştir).

Bu durumların dışında, kökün yapamayacağı hiçbir şey yok.
Bununla birlikte, çekirdek modu adı verilen bir şey vardır (kullanıcı modunun aksine).

Bildiğim kadarıyla, aklı başında bir sistemde sadece çekirdek, çekirdek uzantıları ve sürücüler çekirdek modunda çalışır ve diğer her şey (root olarak giriş yaptığınız kabuk dahil) kullanıcı modunda çalışır.
Bu nedenle “kök olmanın yetmediğini” iddia edebilirsiniz. Bununla birlikte, çoğu sistemde kök kullanıcı, çekirdek modunda çalışacak olan çekirdek modüllerini yükleyebilir, bu da etkin bir şekilde kök modunda çekirdek modunda kod çalıştırmanın bir yolunu verir.

Bununla birlikte, (iOS gibi) bunun mümkün olduğu (keyfi olarak) mümkün olmadığı, en azından güvenlik önlemlerinden yararlanmadan yapılan sistemler vardır. Bu çoğunlukla, kod imzalama zorunluluğu gibi artan güvenlik nedeniyledir.
Örneğin, yalnızca çekirdek modundan erişilebilen iDevices işlemcilerinde yerleşik AES şifreleme anahtarları vardır . Çekirdek modülleri olabilir olanlar erişmek, ancak bu çekirdek modüller kodu da bunları kabul çekirdek için sırayla Apple tarafından imzalanacak gerekecekti.

OS X'te, sürüm 10.11'den (El Capitan) bu yana, aynı zamanda "köksüz mod" olarak da adlandırılan (kök hala var olduğu için ad yanıltıcı olmasına rağmen) da vardır, bu da yükleyicilerin yapabileceği bazı şeyleri etkin bir şekilde yasaklar.
Alıntı AskDifferent bu mükemmel cevap :

İşte kökten bile kısıtladığı şey:

  • / System, / bin, / sbin veya / usr içindeki hiçbir şeyi değiştiremezsiniz (/ usr / local dışında); veya yerleşik uygulamalardan ve yardımcı programlardan herhangi biri. Yalnızca Yükleyici ve yazılım güncellemesi bu alanları değiştirebilir ve hatta yalnızca Apple imzalı paketleri yüklerken bunu bile yapabilir.

1
Aslında, çalıştırılan bit kümeleri olmadan bir yürütülebilir dosyayı çalıştırabilirsiniz: gcc -o hello hello.c && chmod 400 hello && /lib64/ld-linux-x86-64.so.2 ./hellobeklenen Hello, World!çıktıyı verir ,
doneal24

@ DougO'Neal Ama o /lib64/ld-linux-x86-64.so.2zaman gerçek yürütülebilir değil , ve ./hellosadece bir argüman? Çünkü bu, PHP kodunu içeren bir metin dosyasını PHP yorumlayıcısına geçirmek gibi ... ya da kullanarak bir bash betiği çalıştırmak gibi bash ./my_script...
Siguza

1
@ DougO'Neal Bu işe yarardı, ancak glibc'nin son sürümlerinde devre dışı bırakıldı (noexec bağlarının önemsiz bir baypas olmasını engellemek için).
duskwuff

@duskwuff Bir glibc sürümü ne kadar yeni? Bu hala Ubuntu 14.04 altında çalışmaktadır.
doneal24

1
Elma ln kullanır örneğin bağlantı bu bkz izin anlamına ln ancak sistem sınıfa eklemek vermedi stackoverflow.com/a/4707231/151019 This Time Machine işleri yoludur
user151019

4

Bahsettiğiniz "sistem çekirdek uygulaması", rootörneğin yüklenebilir çekirdek modülleri aracılığıyla kontrol altında . Elbette, bu yükleme çekirdek modüllerinin çekirdek tarafından desteklendiğini varsayar, hiç kimse bile mümkün olmayan eylemleri gerçekleştiremez root.

Aynısı sistem işlemleri için de geçerlidir. rootherhangi bir süreci öldürmesine izin verilir, ancak çekirdek bütünlüğünden ödün vermeden çekirdek modunda çalışan bir işlemi durdurmak mümkün değildir, bu yüzden hemen böyle bir işlemi durdurmak mümkün değildir. Not rootsadece hiçbir etkisi olmayacaktır kendisini öldürme, bu süreçleri öldürmek için inkar edilemez.

Son olarak, gerçek mod: Linux çekirdeği bunun için bir desteğe sahip değil, bu yüzden yine kimse mümkün olanı bile yapamaz root.

@Siguza, xizinsiz dosyaların çalıştırılmasından bahsetti , bu rootkullanıcı için oldukça muhtemel :

/lib/ld-linux.so.2 /path/to/executable

... ancak bir uid-0 işlemi, /proc/kmemyetenek iptali yoluyla yeni çekirdek modüllerini yükleme (ya da içinden geçirme ) özelliğini kaybedebilir .
Charles Duffy

4

Bir örnek değişmez dosyasının değiştirerek olabilir: Bir dosya özniteliği ayarlayabilirsiniz iile chattrbile root için dosya değişmez hale getirir. Örneğin:

# whoami
root
# touch god
# chattr +i god
# rm god
rm: cannot remove ‘god’: Operation not permitted
# touch god
touch: cannot touch ‘god’: Permission denied

Dosyanın ls -lçıktıda normal yazılabilir dosya olarak göründüğünü unutmayın :

# ls -l god
-rw-r--r-- 1 root root 0 Oct 26 19:27 god

Özelliği görmek iiçin kullanmanız gerekir lsattr:

# lsattr god
----i----------- god

Chattr ' in manuel sayfası , iözniteliği takip eder :

'İ' özelliğine sahip bir dosya değiştirilemez: silinemez veya yeniden adlandırılamaz, bu dosyaya bağlantı oluşturulamaz ve dosyaya veri yazılamaz. Yalnızca süper kullanıcı veya CAP_LINUX_IMMUTABLE özelliğine sahip bir işlem bu özelliği ayarlayabilir veya silebilir.

Yine de, kök değişmezliği kolayca geri alabilir:

# chattr -i god
# rm -v god
removed ‘god’

Linux çekirdeği, BSD güvenlik düzeyindeki tesisi (artık) doğru şekilde uygulamamakta, size değişmez sonuçlar üzerinde azalan getiri ve sadece özellikler eklemektedir . İle güvenlk sistemi çok kullanıcılı çalışma seviyesinde bir kez yönetici kapatıldı ve ağ saldırganların durdurmak edecek bir yerel konsol, kullanması gerekir, böylece bu bitler, reset edilemez.
Simon Richter

2

FreeBSD'de gmirrorönceden kurulmuş bir bölümde, hatta root olarak kullanamazsınız :

gmirror etiketi -v -b, gm0s1 ad4s1'i tercih eder gmirror
: meta4a ad4s1'de depolanamaz: İşleme izin verilmez.

Bunu yapabilmek için bir sysctl( kern.geom.debugflags=16) ayarlamanız gerekir.

rootayrıcalıklı bir kullanıcıdır, ancak bu haklar çekirdek tarafından verilir. Yani çekirdeğin ondan daha fazla imtiyazı var root.


1

Kök kullanıcının kendisinden işbirliğini rootüstlenerek, FUSE bağlantılarına ( allow_otherveya allow_rootseçenekleriyle) erişmesi engellenebilir , ancak bunun nedeni FUSE'nin bu şekilde davranmasıdır. FUSE sanal bir katman üzerinde bulunduğundan, mümkün olduğunca şeffaf ve ince olmaya çalışan ortak blok cihaz modüllerinin aksine izinleri başka bir katmana devretmek yerine, mantığa dayalı herhangi bir hatayı geri getirebilir.

Bu, dosya sistemini salt okunur yapmazsanız, kök kullanıcının seçeneği devre dışı bırakmasını veya FUSE modülünü seçeneği sessizce atan bir seçenekle değiştirmesini engellemez. Ancak, bu yalnızca “bekçileri izleyen” durumuna yol açar: sistemin yalan söylemediğini nasıl doğrulayabilirsiniz? Kabuk, size meşru bir FUSE modülünü gösteren bir chroot içinde oturuyor olabilirken, çekirdek aslında bunun kötü niyetli bir sürümünü çalıştırıyor.


0

Çalıştırılamayan dosyaları yürütememenin dosya izinlerine bağlı olduğu için önemsiz bir sınırlama olduğunu söyleyebilirim. (Bu, dışlanamayan bir dosya için /lib64/ld-linux-x86-64.so.2 kullanılarak çözülebilir, ancak çalıştırılmayan bir bağdaki dosya değil)

Ayrıca, bir dosya şu anda bir işlem tarafından kullanılıyorsa, dosya düzenlemesini engelleyen zorunlu dosya kilitleri sorunu da vardır, ancak süper kullanıcı işlemi öldürebilir.

Bir noktada, süper kullanıcı cihaz meşgulken bir cihazın bağlantısını kesemedi, ancak bu şimdi tembel bir miktar kullanarak yapılabilir.

Diğer sınırlamalar:

değiştirilemez dosyaları değiştiremez ve yalnızca yalnızca eklenmiş dosyaları ekleyebilir (linux, süper kullanıcının değiştirilemezleri kaldırmasına ve herhangi bir çalışma düzeyinde yalnızca bayrakları eklemesine izin verir, ancak kısmen amaçlarını yitirmesine izin verir)

salt okunur bir bağlama yazamıyor ya da bir yürütme olmayan bağda herhangi bir şeyi yürütemiyor

birleştirilemez bir montajı bağlayamıyor

blok aygıtı salt okunur ise, bir dosya sistemini salt okunur olarak yeniden kuramazsınız

allow-other veya allow-root-root-root-root-root-root-Root-root-root-root-root-Root-root-root-root-root-Ro-Ro-root-Ro-Ro-Ro-Ro-Ro-root-Ro-Ro-Ro-Ro

SELinux ayarlarını ihlal edemez

Kök etkileyen sistemin kendisinde bulunan kasıtlı sınırlamalar:

bir dosyanın c-zamanını doğrudan ayarlayamıyor (ya da daha önce uygulanmışsa doğum zamanını)

şifreleri düz metin olarak görüntüleyemiyorum

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.