Sudo komutu neden root şifresine ihtiyaç duymuyor?


48

Bir süredir Linux kullanıyorum ve ne zaman yazsam sudobir komut için kök kullanıcıya geçiş yaptığımı sanıyordum.

Görünüşe göre bu doğru değil çünkü ihtiyacım olan tek şey kullanıcı hesabımın şifresi. Sanırım birden fazla kullanıcıyla çalışmadığım için gerçek dünyada bunu gerçekten fark etmedim.

Ubuntu'nun ilk hesabımı nasıl kurduğundan emin değilim. Kök kullanıcı var mı? Ben kök müyüm? Sanırım kurulum sırasında yeni bir kullanıcı oluşturdum ama bana kök ayrıcalıkları verdi? Sadece biraz kafam karıştı ...

Öyleyse neden kullanıcı şifremle root komutları çalıştırmama izin veriliyor?


Hangi kullanıcıyı kullanarak şifreye ihtiyacınız var ve hangisine ihtiyacınız yok? Hangi komutu kullanıyorsun? Unutmayın, sudo şifrenizi yeniden yazmadan önce bir süre saklar.
Braiam

11
sudo"setuid" bit kümesine sahip. Bu nedenle, sahibi olan kullanıcı olarak çalışır (yanılmıyorsam tüm standart sistemlerde root olan), onu başlatan kullanıcı olarak değil. sudosonra /etc/sudoersdosyayı yükler ve kimin başlattığına bağlı olarak neyin izin verildiğini kontrol eder.
LawrenceC


1
Başka birinin söylediği bir şeyi tekrarlıyorsam özür dilerim ama bulamadım. Cevap: Bu bir politika kararı. Motivasyondaki en iyi tahminim, sudoayrıcalıklı birçok kişinin bulunduğu büyük bir kurulumda , belki coğrafi olarak dağılmış yerlerde ve 24 × 7 vardiyalı çalışmalarda, bir kişinin ayrıcalıklı erişimini derhal iptal etmek isteyebildiğinizdir (örneğin, onun bütünlüğünden şüpheleniyorsun). Herkes yalnızca bir tek kök parola kullanıyorsa ve bunu önceden koordinasyon olmadan değiştirirseniz, kaos ortaya çıkabilir. …
G-Man

1
@HagenvonEitzen Ben geç birkaç gün biriyim ama bu nasıl olduğunu değil bizim sorununun dupe?
strugee

Yanıtlar:


65

Ayrıntılı olarak şu şekilde çalışır:

  1. /usr/bin/sudoYürütülebilir dosya setuid biti ayarına sahip , yani başka bir kullanıcı tarafından çalıştırıldığında bile, dosya sahibinin kullanıcı kimliği ile çalışıyor (bu durumda root).

  2. sudoiçinde çekler /etc/sudoersdosyasının hangi ayrıcalıkları var ve size çağırıyoruz komutu çalıştırmak için izin verilip verilmediğini yapmak. Basitçe söylemek gerekirse, /etc/sudoershangi kullanıcıların hangi komutları kullanarak sudomekanizmayı çalıştırabileceğini tanımlayan bir dosyadır .

    Ubuntu'mda o dosya böyle görünüyor:

    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    
    # Members of the admin group may gain root privileges
    %admin ALL=(ALL) ALL
    
    # Allow members of group sudo to execute any command
    %sudo   ALL=(ALL:ALL) ALL
    

    Üçüncü satır, muhtemelen sizi ilgilendiren şeydir. "Sudo" grubundaki herkesin herhangi bir komutu herhangi bir kullanıcı olarak çalıştırmasına izin verir.

    Ubuntu kurulum sırasında ilk hesabı kurduğunda, bu hesabı "sudo" grubuna ekler. Hangi kullanıcıların hangi gruplara ait olduğunu groupkomut ile kontrol edebilirsiniz .

  3. sudosizden bir şifre ister. Kullanıcı şifresine ihtiyaç duyduğu gerçeğiyle ilgili olarak, kökünki değil, sudoers el kitabından bir alıntıdır :

    Kimlik doğrulama ve günlüğe kaydetme

    Sudoers güvenlik politikası, çoğu kullanıcının sudo kullanmadan önce kendilerini doğrulamasını gerektirir. Çağıran kullanıcı root ise, hedef kullanıcı çağıran kullanıcı ile aynıysa veya politika kullanıcı veya komut için kimlik doğrulamayı devre dışı bıraktıysa, şifre gerekmez. Su (1) 'den farklı olarak, sudoers kimlik doğrulama istediğinde, hedef kullanıcının (veya kökün) kimlik bilgilerini değil, çağıran kullanıcının kimlik bilgilerini doğrular. Bu daha sonra tarif edilen rootpw, targetpw ve runaspw bayrakları vasıtasıyla değiştirilebilir.

    Ancak, aslında, sudohiçbir şey için kullanıcı şifreniz gerekmez. Sadece sizin gerçekten olduğunuzdan emin olmanızı ve bazı potansiyel olarak tehlikeli bir emri başlatmadan önce size bir tür uyarı (veya durma şansı) sağlamanızı ister. Şifre sormayı kapatmak istiyorsanız, sudoers girişini şu şekilde değiştirin:

    %sudo   ALL=(ALL:ALL) NOPASSWD: ALL
    
  4. Kimlik doğrulama sudoişleminden sonra , çağrılan komutu çalıştıran alt işlem başlatılır. Çocuk kök kullanıcı kimliğini üst öğesinden miras alır - sudoişlem.


Yani, sorularınızı tam olarak yanıtlayın:

Bir komut için kök kullanıcıya geçtiğimi sanıyordum.

Haklıydın. Her komuttan önce sudoroot kullanıcı kimliği ile çalışır.

Kök kullanıcı var mı?

Evet, sistem kurulumu sırasında oluşturulan kullanıcı hesabınızdan ayrı bir kök kullanıcı hesabı vardır. Bununla birlikte, varsayılan olarak Ubuntu'da, etkileşimli terminale root kullanıcısı olarak giriş yapmanıza izin verilmez.

Ben kök müyüm?

Hayır, sen kök değilsin. Sen sadece kök olarak bireysel komutları çalıştırmak için ayrıcalığına sahip kullanarak, sudoyukarıda açıklanan mekanizma.

Öyleyse neden kullanıcı şifremle root komutları çalıştırmama izin veriliyor?

Kullanıcı şifresini yalnızca sudodahili güvenlik mekanizması nedeniyle girmeniz gerekir . Kolayca kapatılabilir. Kök güçlerinizi /usr/bin/sudogirdiğiniz parolalar nedeniyle değil , setuid biti nedeniyle kazanırsınız.


6
Cevap setuid kısmıyla gerçekten başlamalı, çünkü bu aslında mümkün olmasının nedeni. / etc / sudoers, sudo komutunun esnekliğinin nedenidir.
daniel kullmann

İlginç. sudoŞifremi girmeden çalıştırılabileceğini belirtebileceğinizi bilmiyordum . Mükemmel cevap!
jwir3

1
Sudo 'nun içinde rootpwbayrak bulunan kök parolayı isteyecek şekilde yapılandırılabileceğini unutmayın sudoers.
Monica’yı eski durumuna getirin - M. Schröder

2
Sen edebilirsiniz kök kullanıcı olarak gerçeği login: sudo su - rootsadece bunu yapmak ve size kök terminali verecektir. Ancak, bir masaüstü oturumuna kolayca root olarak giriş yapamazsınız.
jmiserez

1
Temel olarak sudokendi başına kök ayrıcalığına sahiptir ve bir yapılandırma dosyasına dayanarak bunu size verip vermemeye karar verir.
Siyuan Ren,

15
  • Bunun amacı sudo, bu hesabın şifresini (aksine su) sormadan, size başkalarının ayrıcalıklarını (genellikle root) vermektir .

  • sudo yoldan geçen kişinin kilidi açık terminalinizi kötüye kullanmayacağından emin olmak için burada şifrenizi istiyor.

  • Ubuntu ve diğer birçok Linux ve Unix işletim sistemi, kurulum sırasında oluşturulmuş bir ilk hesabı, herhangi bir komutu çalıştırma hakkı veriyor root.

  • rootHala Linux altında bir hesap olsa da , rootdaha iyi güvenlik ve izlenebilirlik için doğrudan girişler varsayılan olarak devre dışı bırakılmıştır.


7
Doğrudan kök girişi varsayılan olarak gerçekten devre dışı bırakılmış olsa da, Ubuntu'da hala bir kök hesabı var. Artık en azından Solaris'te, varsayılan olarak bir rol olduğu bir hesap değil.
jlliagre

Çok teşekkürler - Ben her zaman nasıl çalıştığını merak ettim ve şimdi çok daha mantıklı geliyor.
mikeserv

5

Piotr nasıl sudoçalıştığını çok iyi bir açıklama yaptı . Ancak, neden bu şekilde çalıştığını gerçekten motive etmedi , bu yüzden bunu buraya eklemeye çalışacağım.

sudoEmir yaratılmadan önce emir aldık su. Bu komut, bir kullanıcının genellikle başka bir kullanıcı olarak komutları çalıştırmasına izin verir root( sudobu, varsayılan hedef kullanıcı olduğu gibi). Tamamen ayırt edici değildi, herhangi bir komutu uygulayabilirsiniz. Herhangi bir kullanıcı tarafından kullanılabildiğinden, bu kullanıcı olarak oturum açmaya etkili bir şekilde eşit olduğundan, hedef kullanıcının şifresini bilmenizi gerektiriyordu.

Bir noktada, biraz daha fazla erişim kontrolü eklendi: kullanmak suiçin wheelgrubun bir üyesi olmanız gerekiyordu . Ama yine de herhangi bir komutu yerine getirebildiğinden, şifrelerini bilmenizi istemek hâlâ mantıklı geldi.

Kullanıcıların birbirlerini ya da üst kullanıcıların şifresini bilmeleri isteniyor olsa da şifreleri pek güvende değildi. Genellikle, belirli kullanıcılara başka bir hesaba sınırlı erişim izni vermek istersiniz (bu, en az ayrıcalık prensibi olarak adlandırılan güvenlik kavramının bir parçasıdır ). Ayrıca hesap verebilirliği zorlaştırır: Birden fazla kişi bir hesabın şifresini biliyorsa ve bu hesap bir hata veya kötüye kullanımdaysa, hangisinin gerçekten yaptığını söyleyemezsiniz.

Böylece sudoyaratıldı. Kullanıcıların herhangi bir komutu yerine getirmelerine izin vermek yerine, Piotr'ın cevabına kısaca değinilmiş, onu kimin kullanabileceğini, hangi kullanıcılara geçebileceklerini ve hangi komutları çalıştırmalarına izin verileceklerini belirten ayrıntılı bir yapılandırma dosyasına sahiptir. Kimin kime ne yapabileceğini kontrol eden bu hassas kontrolle, artık kullanıcılara hedef hesabın şifresini vermemize gerek yok; yapsaydık konfigürasyon dosyasındaki tüm kontrolleri bu kullanıcı olarak giriş yaparak kolayca atlayabilirlerdi. Bunun yerine, normalde sadece giriş yaptıkları kişilerin isimlerini, kendi şifrelerini girerek kanıtlamalarını istiyoruz - bu, terminal gözetimsiz bırakılırsa bir hesaptan yararlanmasını engellemek içindir.

Bu gereksinim, süper kullanıcı için feragat edilir - bu hesap, kullanmadan sisteme neredeyse her şeyi yapabilir sudo, bu nedenle gereksiz kabul edildi. Ayrıca yapılandırma dosyasında kullanıcıların bir şifre girmesi gerekmediğini de belirtmek mümkündür - bazı kuruluşlar bunu iş istasyonu ortamlarının fiziksel güvenliğinin kötüye kullanımı önlemek için yeterli olduğuna inandıklarında kullanırlar.


Bunu araştırmamıştım, ancak sudo'da bulunmayan sudo'nun özelliklerinden birinin, problemleri takip etmeyi kolaylaştırmak için hangi kullanıcı tarafından hangi komutların çalıştırıldığına dair bir kayıt tutması gerektiğidir. onların kaynakları. Sadece kubuntu sistemime baktım ve böyle bir günlük göremiyorum, bu yüzden bu varsayılan bir davranış değildir.
Joe,

/Var/log/auth.log’da sudo günlüğünü buldum - Çin’den bazı IP’ler de dahil olmak üzere, sistemime kök ssh erişimi sağlamaya çalışan pek çok başka şey de dahil - sudo’yu görmek istiyorsanız, grep veya benzeri ile.
Joe,

Doğru. suayrıca günlüğe kaydeder, ancak yeni bir kabuk başlattığından, yalnızca birinin çalıştırdığı gerçeğini günlüğe kaydeder.
Barmar

Günlüklere güvenemezsiniz, kök alan herhangi biri günlükleri değiştirebilir (başka bir makineye giriş yapmazsanız ve günlük işlemi tamamlanana kadar erişim izni vermediğinizden emin olun). Bununla birlikte sudo, root şifresini ihtiyaç duyan herkese tekrar vermek zorunda kalmadan ayrıcalıkların iptal edilmesine izin verir.
ctrl-alt-delor

1
@ richard sudoBir kullanıcının yürütebileceği komutları kısıtlamanıza izin verdiğinden, günlüklerin üzerine yazacak komutlara erişmediklerinden emin olmayı deneyebilirsiniz.
Barmar

3

Sorunuzun cevabı:

Sudo ile bir komut çalıştırdığınızda, komutu yükseltilmiş ayrıcalıklarla , yani kök ayrıcalıklarıyla çalıştırırsınız . Yalnızca normal kullanıcı şifrenizi yazmanız gerekir, çünkü siz (kullanıcı) size kök yetkileri veren sudoers dosyasına eklersiniz .


2
Sudo hariç, yükseltilmiş ayrıcalıklar anlamına gelmez, sadece mevcut kullanıcıya farklı olanları belirtir. Örneğin, bir programı kabuğu olmayan normal bir kullanıcı olarak çalıştırabilirsiniz. Ayrıca, sudoers dosyasında olmak root vermez.
James Tocknell

1
@aragilar evet sudoher zaman yüksek ayrıcalıklar vermez, ancak bir şey yaptıktan sonra yüksek ayrıcalıklarda çalışır (kimlik doğrulamasını kontrol ederek ayrıcalıkları düşürebilir). Kullanıcıyı değiştirebilmek için bu yükseltilmiş ayrıcalıklara ihtiyacı var.
ctrl-alt-delor

1
Tabii, sudokullanım yükseltilmiş ayrıcalıklar yapar (ama bu montaj, örneğin sudo özgü değil, aynı zamanda yapar), ancak yani dediğimiz komut commandiçinde sudo command(ayarlanır şeye bağlı olmayabilir /etc/sudoers).
James Tocknell

1

İlk olarak, bir hesabı devre dışı bırakmak, genellikle herhangi bir dizginin şifreli değeri olmayan şifreli şifreyi * olarak ayarlayarak yapılır. Şu anda kontrol edemiyorum, ancak Ubuntu'nun root için de yaptığını düşünüyorum. Yani teknik olarak, Ubuntu'da root şifresi yoktur.

Fakat sudo Ubuntu'dan önce gelir; kesinlikle kök şifrenin bulunduğu sistemler için tasarlandı. Peki neden root şifresi gerektirmiyor? Temel olarak, sudo belirli kullanıcılara belirli komutlar çalıştırma izni vermek üzere tasarlanmıştır - örneğin, bir geliştirici kök erişiminin web uygulamasını yeniden başlatmasına izin verir, ancak keyfi sunucuları başlatmaz. Kök şifresini bilmek, diğer yandan, sınırsız erişim sağlar; Bir kök kabuğu açmak ve isteğe bağlı komutları çalıştırmak için login veya su kullanabilirsiniz. Sudo, bu erişim seviyesi olmayan kişiler için çalışmak zorunda olduğundan, kök şifrenin çalışmasını gerektiremez.


Ayrıca, bir kullanıcının root şifresini değiştirmek zorunda kalmadan root izinlerini iptal etmesine izin verir.
Ian D. Scott
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.