Bir programı yürütmenin root gerektirip gerektirmediğini nasıl bilebilirsiniz?


10

Bunun biraz temel ve belki de aptalca bir soru olduğunu anlıyorum, ancak bir cevap bulamadım.

Her dosyanın "Executable"biraz olduğunu anlıyorum .

Gerektiren root, rootkullanıcı ve rootgruba ait olan programların Executablebiti Otherolmayacağını ve kök olmayan kullanıcıların bunları yürütmesini engelleyeceğini varsaydım . Ancak /binve /sbindizinlerinde tüm dosyaların aşağıdaki gibi izinlere sahip olduğunu görüyorum-rwxr-xr-x

Peki, kullanıcının bir şeyi yürütmek için root iznine ihtiyacı olup olmadığını gerçekten belirleyen nedir?


1
Varsayılan olarak, siz veya herhangi bir kullanıcı herhangi bir programı /binveya /sbindizinleri yürütebilirsiniz . Sorun, bu programlardan bazılarının hangi kullanıcının çalıştırdığına bağlı olarak farklı çalışmasıdır.
Radu Rădeanu

Yanıtlar:


13

Bazen kodda. Örneğin, ortasında hwclock.c:

if (getuid() == 0)
            permitted = TRUE;
else {
            /* program is designed to run setuid (in some situations) */
            if (set || systohc || adjust) {
                    warnx(_("Sorry, only the superuser can change "
                            "the Hardware Clock."));
[...]

Kökseniz veya olmasanız programın davranışını değiştirecektir.

Diğer çoğu durumda, örtüktür; çekirdeğe devredildi. Örneğin, program sistemi yeniden başlatmanıza izin veren sistem çağrısını çağırırsa , yalnızca kökseniz çalışır. Kök değilseniz, uygulamanın (iyi yazılmışsa) size bildirdiği bir "izin reddedildi" hatasıyla karşılaşırsınız. Veya bir dosyayı silmeye çalışıyorsunuz; dosya üzerinde doğru izne sahipseniz başarılı olur; değilse, kök olup olmadığınıza bağlıdır - çekirdek rmçağrıldığında unlink()izinleri kontrol eder.

Yani hayır, prensip olarak, program kök ayrıcalıkları gerektiriyorsa veya istemiyorsa, sadece yürütülebilir dosyanın iznine bakarak diyemezsiniz. Birçok program sadece bazı işlemler için bunları gerektirecektir, bu nedenle böyle bir şey yapmak gerçekten zor olacaktır. Davası hwclockbir (kimse saatini okuyabilir ancak yalnızca kök ayarlayabilirsiniz) 'dir, ancak bunların yüzlerce ( kill, rm, cat...)

Sonra setuid programlarının ilgili ve ilginç dünyası var ...


Yani temelde çekirdek "bundan sorumlu" mu? Program bir sistem çağrısı yaparsa, çekirdek, programı çalıştıran kullanıcının root olması gerekip gerekmediğini belirler ve zorlar mı?
Dean

2
Temel olarak, evet. Program ek testler yapabilir , ancak izin kontrolü çekirdek düzeyindedir. Setuid-root programları istisnadır; her zaman root olarak çalışırlar, bu yüzden izinlerini kontrol etmeleri gerekir (ve güvenlik kusurlarının güzel bir yazı tipidir ...)
Rmano
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.