Süper kullanıcı salt okunur dosyalara yazabilir mi?


11

FreeBSD'de şaşırtıcı (benim için) izin davranışına rastladım. Diyelim ki root olmayan bir kullanıcı olarak çalışıyorum. Bir dosya oluşturuyorum, iznini salt okunur olarak ayarlıyorum ve içine yazmaya çalışıyorum:

$ touch f
$ chmod 400 f
$ ls -l f
-r--------  1 user  wheel  f
$ echo a >> t
t: Permission denied.

Çok uzak çok iyi. Şimdi root ile aynı şeyi yapıyorum ve dosyaya yazıyor:

# ls -l f2
-r--------  1 root  wheel  f2
# echo a >> f2
# echo $?
0

Bir hata mı yoksa amaçlanan bir davranış mı? Bunun herhangi bir Unix ve Linux'ta işe yarayacağını güvenli bir şekilde varsayabilir miyim?


İle herhangi bir kullanıcı CAP_DAC_OVERRIDEbunu yapabilir. Neredeyse tüm Linux sistemlerinde bu, root'un bunu yapabileceği anlamına gelir, bu yüzden kasıtlıdır. FreeBSD kısmı için konuşamıyor ama benzer bir kurulum var hayal ediyorum.
Bratchley

1
Kökün HER ZAMAN bir dosyaya yazabilmesinin nedeni, geleneksel unix dosya sistemlerinde (ext4, zfs vb.) Dosya izinlerinin dosyanın bir parçası olmasıdır. Kök bir dosyaya yazamazsa, NOBODY salt okunur dosyayı yeniden yazılabilir chmodyapabilir, çünkü dosyaya yazamaz.
slebetman

1
@slebetman İzinleri güncellemek için bir dosyaya yazma erişiminizin olması gerekmez. touch somefile; chmod 0000 somefile; chmod 0644 somefileNormal bir kullanıcı olarak deneyin .
user253751

@immibis: Sahip olduğun. Root, sahip olmadığı dosyalardaki izinleri değiştirebilmelidir
slebetman

@slebetman Evet ... ama yazamayacağınız dosyalardaki izinleri değiştirme hakkında konuşuyordunuz, sahip olmadığınız dosyadaki izinleri değiştirme hakkında konuşuyordunuz.
user253751

Yanıtlar:


13

rootİzinleri bu şekilde geçersiz kılabilmek normaldir .

Başka bir örnek, rootokuma erişimi olmayan bir dosyayı okuyabilmektir:

$ echo hello > tst
$ chmod 0 tst
$ ls -l tst
---------- 1 sweh sweh 6 Aug 16 15:46 tst
$ cat tst
cat: tst: Permission denied
$ sudo cat tst
hello

Bazı sistemler değişmez dosyalar kavramına sahiptir . ör. FreeBSD'de:

# ls -l tst
-rw-r--r--  1 sweh  sweh  6 Aug 16 15:50 tst
# chflags simmutable tst
# echo there >> tst
tst: Operation not permitted.

Şimdi rootdosyaya bile yazamıyorum. Ama, tabii ki, rootolabilir kaldırmak bayrağı:

# chflags nosimmutable tst
# echo there >> tst
# cat tst
hello
there

FreeBSD ile bir adım daha ileri gidebilir ve bayrağın rootkaldırılmasını önlemek için bir çekirdek bayrağı ayarlayabilirsiniz :

# chflags simmutable tst
# sysctl kern.securelevel=1
kern.securelevel: -1 -> 1
# chflags nosimmutable tst
chflags: tst: Operation not permitted

Şimdi hiç kimse, rootbu dosyayı bile değiştiremez.

(Güvenlik seviyesini azaltmak için sistemin yeniden başlatılması gerekir).


Yeniden başlatmayı etkin bir güvenlik önlemi nasıl alır? Ayrıca, eğer kök kökü ise ve herhangi bir şey yapabiliyorsa, neden kökün istediği şeyi yapmasını engellemeye çalışıyorsunuz?
kedi

1
Güvenli bir sistem üzerinde köküdür değil Tanrı-benzeri. FreeBSD güvenli seviyesi, kökü daha az Tanrı gibi yapmak için küçük bir girişimdir. Güvenlik düzeyi, sistem yapılandırmasında varsayılan olarak 1 olarak ayarlanabilir, böylece yeniden başlatmadan sonra bile etkin kalır. Bu yüzden konsol erişimine ve tek kullanıcı moduna ihtiyaç duyar ve bu çok kurcalanır. Unix güvenliği hakkında bir SE yorum alanı için çok fazla bir deneme var, ancak bir 'kök tüm erişime sahip' modelinden daha nüanslı bir şeye geçmeye çalışıyoruz. Mümkün olan yerlerde (örn. Güvenli düzey) zorlamaya çalışıyoruz ve olmayan yerlerde tespit ediyoruz (kanıtları yeniden başlat, denetim yolları).
Stephen Harris

4
FWIW, Linux'ta değişmez bir öznitelik chattr +i tstbelirler .
Ruslan

3

Evet, bu çok normal. root'un okuma / yazma sınırlaması yoktur (çok az istisna dışında), çünkü o köktür.

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.