Dosya izinleri “kök” kullanıcısı için nasıl çalışır?


28

Aşağıdaki dosya var:

---------- 1 Steve Steve 341 2017-12-21 01:51 myFile.txt

Kullanıcıyı rootterminalde değiştirdim ve aşağıdaki davranışları farkettim:

  • Bu dosyayı okuyabilir ve yazabilirim.

  • Bu dosyayı yürütemiyorum.

  • xBit'i kullanıcı izinlerinde ( ---x------) veya grup izinlerinde ( ------x---) veya ---------xdosyanın diğer izinlerinde ( ) ayarlarsam , o zaman bu dosyayı çalıştırabilirim.

Birisi bana açıklayabilir ya da rootkullanıcı dosya ve dizinlerle uğraşırken uygulanan tüm kuralları açıklayan bir öğreticiye işaret edebilir mi?

Yanıtlar:


38

Dosyalara ve dizinlere ayrıcalıklı erişim, aslında sadece olmamak rootya da olmamak gibi yeteneklerle belirlenir . Uygulamada, rootgenellikle tüm olası yetenekler vardır, ancak hepsinin / çoğunun düşürülebileceği ya da bazılarının diğer kullanıcılara (süreçleri) verilebileceği durumlar vardır.

Kısaca, erişim kontrolünün ayrıcalıklı bir süreç için nasıl çalıştığını zaten açıkladınız. İşte farklı yetenekler aslında onu nasıl etkiliyor:

Buradaki temel yetenekCAP_DAC_OVERRIDE , "dosya okuma, yazma ve izin denetimlerini atlama" işlemlerini atlayabilen bir işlemdir. Bu, herhangi bir dosyaya okuma ve yazmanın yanı sıra, dizin okuma, yazma ve erişmeyi de içerir.

Aslında yürütülebilir olarak işaretlenmemiş dosyaları çalıştırmak için geçerli değildir. İçinde commentgeneric_permission ( fs/namei.c), dosyalar için erişim kontrol etmeden önce, diyor

Okuma / yazma DAC'leri her zaman geçersiz kılınır. Yürütülebilir DAC'ler, en az bir yürütme biti ayarlanmış olduğunda geçersiz kılınır.

Ve xeğer dosyayı çalıştırmaya çalışıyorsanız , kod ayarlanmış en az bir bit olup olmadığını kontrol eder . Yanlışlıkla rastgele veri dosyalarını çalıştırmayı ve hata veya tuhaf sonuçlar almayı önlemek için bunun yalnızca bir kolaylık özelliği olduğunu düşünüyorum.

Her neyse, izinleri geçersiz kılabilirseniz, yalnızca çalıştırılabilir bir kopya oluşturabilir ve çalıştırabilirsiniz. Bir sürecin setuid dosyaları için teoride bir fark yaratabilir rağmen (dosya izinlerini (geçersiz kılma yeteneğine sahip oldu CAP_DAC_OVERRIDE), ancak diğer ilgili yetenekleri yoktu ( CAP_FSETID/ CAP_FOWNER/ CAP_SETUID). Fakat sahip CAP_DAC_OVERRIDEdüzenleme verir /etc/shadowyaklaşık eşit yüzden ve bunun gibi şeyler Zaten sadece tam kök erişime sahip olmak.)

Ayrıca CAP_DAC_READ_SEARCHherhangi bir dosyayı okuma ve herhangi bir dizine erişme, ancak yürütme veya bunlara yazma imkanı da yoktur. ve CAP_FOWNERbir sürecin izinleri ve dosya grubunu değiştirmek gibi genellikle sadece dosya sahibi için ayrılan şeyler yapmasına izin verir.

Dizinlerdeki yapışkan biti geçersiz kılmak sadece altta belirtilmiştir CAP_FOWNER, bu yüzden bunu CAP_DAC_OVERRIDEgörmezden gelmek için yeterli olmaz. (Size yazma izni verirdi, ancak genellikle yapışkan dizinlerde zaten buna sahipsiniz ve +tsınırlıyorsunuz.)

(Özel aygıtların burada "dosyalar" olarak sayıldığını düşünüyorum. En azından generic_permission()yalnızca dizinler için bir tür kontrol var, ancak bunun dışında kontrol etmedim.)


Elbette, yeteneklerin bile dosyaları değiştirmenize yardımcı olmayacağı durumlar vardır:

  • /procve içindeki bazı dosyalar /sysgerçekten gerçek dosyalar olmadığından
  • SELinux ve kökü sınırlandırabilecek diğer güvenlik modülleri
  • chattrdeğişmez +ive sadece +aext2 / ext3 / ext4 üzerindeki bayrakları ekleyin , her ikisi de kök dizinini durdurur ve ayrıca dosya adlarını vb. önler.
  • sunucunun kendi erişim denetimini yapabileceği ağ dosya sistemleri, örneğin root_squashNFS , kökün kimseyle eşleşmiyor
  • Fuse, sanırım her şeyi yapabilir
  • salt okunur bağlamalar
  • salt okunur aygıtlar

Kaynak dosya yorumunun capabilities(7)man sayfasında yansıtılmamış görünmesi şaşırtıcı - bir hata raporu doldurmayı düşünün!
Toby Speight

@ilkkachu Gösterildiği gibi, herhangi bir dosya üzerinde (hemen hemen) izinler rootvar rw-ve xizin almak için , xbitin dosyadaki kullanıcı / grup / diğer izinler üzerinde ayarlanması gerekir. Ama ne dizinleri hakkında, yok rootolması rwxherhangi dizinin izinlerini (bir dizin tüm herhangi bir izni olmasa bile ( ----------))?
Joseph,

@Joseph, evet, CAP_DAC_OVERRIDEtüm dizin izinlerinin geçersiz kılınmasına izin verir, böylece dizinleri okuyabilir, yazabilir ve erişebilirsiniz (yani içerikleri listeleyebilir, dosyaları oluşturabilir ve bağlantılarını kaldırabilirsiniz). Exec biti hakkında alıntı yaptığım yorum dosyaların içeriğinde (sadece).
ilkkachu

11

Aynen varsayılan izinler için fark ettiğiniz gibi:

  • Okuma ve yazma:
    Varsayılan olarak, Kök kullanıcı sistemdeki herhangi bir dosyaya erişebilir. Bu erişimi burada açıklandığı gibi öznitelikleri değiştirerek kaldırabilirsiniz: chattr . Bu daha sonra yeteneklerle bağlantılıdır.

  • Yürütme:
    Yürütme bitlerinden en az biri ayarlanmadıkça, kök kullanıcının yürütme izni yoktur.


Kökün yazamadığı veya silemediği dosyalara sahip olmak mümkündür. Böylece "Kök kullanıcı sistemdeki herhangi bir dosyaya erişebilir." yanlış.
Lukas Boersma

Salt okunur dosya sistemi gibi mi demek istiyorsun? ya da başka bir dava var mı?
Kevin Lemaire

1
Bunun gibi vakalardan bahsediyorum: yazılabilir dosyalar , geri
alınamayan

5

myFile.txtElde edilir chmod 000 myFile.txt.

0 no permission
1 execute
2 write
3 execute + write
4 read 
5 read + execute
6 read + write
7 all

--------- Yani kullanıcı, grup ve diğer kullanıcılar için izin yoktur.

Kök kullanıcının bu dosyayı değiştirme kısıtlaması yok . Okuma / yazma verilir. Bu dosyayı çalıştırmak için kök kullanıcının yine de çalıştırılabilir hale getirmesi gerekir. (chmod 100, 010 veya 001)


2

Yürütme modu, diğer modlardan biraz farklı şekilde ele alınır.

Güvenlik politikalarını uygulamak için okuma ve yazma izinleri kullanılır. rootKullanıcı güvenlik kısıtlamaları (orada değişmez dosyaları gibi bazı istisnalar vardır ve yetenekleri gibi modern özellikler ince taneli bu daha yaptık) Bu hesap için başka bir isim "süper" neden olan genellikle bağışıklık olduğunu.

Yürütme izni dosya olup olmadığını ayırarak daha bir danışma modun olduğu amaçlanan yürütülebilir olması ya da sadece veridir. Bu nedenle, root kullanıcısı bile buna uyar - bir veri dosyasını çalıştırmanın bir anlamı yok. Yürütme izinlerinden hiçbiri ayarlanmadıysa, kök dosyayı yürütemez; eğer herhangi biri ayarlandıysa, yapabilir. Elbette, kök ayrıca herhangi bir dosyanın izinlerini değiştirme iznine sahip olduğundan, hesap isterse (dosya sistemi salt okunur olmadıkça) bir dosyayı çalıştırılabilir hale getirebilir.

Btw, betikler bu konuda ilginç bir durumdur. Komut dosyaları, ilgili tercüman için veri dosyalarıdır. Eğer betiğin bir #!satırı varsa, onu bir program olarak çalıştırabilirsiniz; Ancak bu yalnızca yürütme izni belirlendiğinde yapılacaktır. Öte yandan, tercümanı doğrudan çalıştırabilirsiniz, örn /bin/bash scriptname. Tercümanlar sadece dosyayı okuyabilirlerse umursarlar, yürütme izinlerini kontrol etmezler.


1

Size teorik olarak açıklayayım.

Kök kullanıcı, işletim sisteminin kralıdır.

Bir dosya veya dizinin yürütmek için X gibi bir izni varsa, ancak başka hiçbir şey ve Steve kullanıcısı gibi bazılarının dosyaya sahip olmaması durumunda, kök dosyayı da çalıştırabilir.

Her zaman unutmayın, Linux kökünde her şeyi yapabilir, kök üzerinde herhangi bir kısıtlama yoktur.


Hiçbir şey değil. Bir dosyanın değişmez bir niteliği varsa, örneğin, o zaman bile kök onu değiştiremez (açıkça bu özelliği kaldırmazsa).
Ruslan

@Ruslan evet, ancak çok istisnai bir durum bu yüzden onu temel olarak açıkladım, varsayılan olarak bu nitelikler oluşmuyor.
Hassan Sohail,
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.