'sudo su -' vs 'sudo -i' vs 'sudo / bin / bash' - hangisinin kullanıldığı önemli mi, yoksa hiç önemi yok mu?

195

Kök gerektiren düzinelerce bir şey yazdığımda, oturumumu bir kök oturumuna geçirmeyi tercih ederim. İnternette kullanmış olduğum çeşitli derslerde ve talimatlarda, bir kök oturumu açmak için kullanılan sudo su , sudo su - , sudo -i ve sudo /bin/bash değerlerini görüyorum, ancak bunlar arasındaki fark konusunda net değilim. Bu fark ne zaman olursa olsun.

Biri bunu benim için temizleyebilir mi?

    
sordu Paul 13.11.2013 00:30

1 cevap

256

Bunu açıklamak için programların ne yaptığını bilmeniz gerekir:

su - su komutu, başka bir kullanıcıya geçmek için kullanılır ( s cadı u ser), ancak root kullanıcısına da geçebilirsiniz. komutu hiçbir parametreyle çağırmak. su , kullanıcının parolasını yazdıktan sonra, kullanıcının ortamına geçiş yaptığınız parola sormanızı ister.

sudo - sudo , root ayrıcalıklarına sahip tek bir komut çalıştırmayı amaçlamaktadır. Ancak, su 'nin aksine, geçerli kullanıcının şifresi sizi yönlendirir. Bu kullanıcı sudoers dosyasında (veya sudoers dosyasında bulunan bir grupta) olmalıdır. Varsayılan olarak, Ubuntu şifrenizi 15 dakika "hatırlar", böylece şifrenizi her seferinde yazmak zorunda kalmazsınız.

bash - Bilgisayarla etkileşime girecek bir metin arayüzü. Oturum açma, oturum açma, etkileşimli ve etkileşimli olmayan kabuklar arasındaki farkı anlamak önemlidir:

  • oturum açma kabuğu: Bir oturum açma kabuğu, sisteme, belirtilen kullanıcı olarak giriş yapar; bunun için gerekli olan kullanıcı adı ve paroladır. Bir sanal terminalde oturum açmak için ctrl + alt + F1 tuşlarına bastığınızda başarılı bir giriş kabuğundan sonra giriş yapın.
  • giriş yapmayan kabuk: Giriş yapmadan çalıştırılan bir kabuk, bunun için gerekli olan şu anda oturum açmış bir kullanıcıdır. Gnome'da bir grafik terminali açtığınızda, giriş yapılmayan bir kabuktur.
  • etkileşimli kabuk: Komutları etkileşimli olarak yazabileceğiniz veya kesebileceğiniz bir kabuk (oturum açma veya oturum açma). Örneğin bir gnome terminali.
  • etkileşimli olmayan kabuk: Muhtemelen otomatikleştirilmiş bir işlemden geçirilen bir (alt) kabuk. Ne girdi ne de çıktı göreceksiniz.

sudo su sudo komutunu su ile çağırır. Bash interaktif giriş-dışı kabuk olarak adlandırılır. Yani bash sadece .bashrc yürütür. Köküne geçtikten sonra hala aynı dizinde olduğunuzu görebilirsiniz:

[email protected]:~$ sudo su
[email protected]:/home/user#

sudo su - Bu sefer bir giriş kabuğudur, bu yüzden /etc/profile , .profile ve .bashrc yürütülür ve root'un bulunduğu ortamda kök dizininizde kendinizi bulabilirsiniz.

sudo -i Neredeyse sudo su - ile aynıdır -i (ilk girişi simüle et) seçeneği, hedef kullanıcının parola veritabanı girdisi tarafından belirtilen kabuğu bir oturum açma kabuğu olarak çalıştırır. Bu, .profile , .bashrc veya .login gibi girişe özgü kaynak dosyalarının kabuk tarafından okunacağı ve çalıştırılacağı anlamına gelir.

sudo /bin/bash Bu, sudo komutunu /bin/bash ile çağırdığınız anlamına gelir. /bin/bash , oturum açma dışı kabuk olarak başlatılır, böylece tüm nokta dosyaları çalıştırılmaz, ancak bash, kendisini arayan kullanıcının .bashrc değerini okur. Ortamınız aynı kalır. Eviniz kökün evi olmayacak. Yani siz köktünüz, fakat çağrı yapan kullanıcının ortamında.

sudo -s , $SHELL değişkenini okur ve içeriği yürütür. % Co_de% $SHELL içeriyorsa /bin/bash çağırır (yukarıya bakın).

kontrol edin: Giriş kabuğunda olup olmadığınızı kontrol etmek için (sadece bash'ta çalışır çünkü sudo /bin/bash yerleşik bir komuttur):

shopt -q login_shell && echo 'Login shell' || echo 'No login shell'
    
verilen cevap chaos 13.11.2013 10:43

Etiketlerdeki diğer soruları oku