“Su”, “sudo -s”, “sudo -i”, “sudo su” arasındaki farklar nelerdir?


148

Zaten el kitabından okudum ama farkı göremiyorum ..

su - kullanıcı kimliğini değiştirir veya süper kullanıcı olur

sudo -s [command]

-s(Kabuk) seçeneği passwd belirtildiği şekilde ayarlanırsa KABUK ortam değişkeni tarafından belirtilen kabuk veya kabuk çalıştırır (5). Bir komut belirtilirse, yürütme için kabuğa geçirilir. Aksi takdirde, etkileşimli bir kabuk yürütülür.

sudo -i kılavuzdaki açıklamaların kaybolması


7
Ayrıca, su usergüvenilmeyen mermilerden giriş yapmak için kullanmayın , fakat su - user. Bakınız unix.stackexchange.com/q/7013/8250
Lekensteyn

@Lekensteyn vay, harika bir örnek. LOL için thx :)
törzsmókus

1
eski emri daima hatırlayın: kökünün ismini boşuna istemeyeceksiniz!
törzsmókus

Söylememek sudo -ifena değil , ama kesinlikle f *** 'ı kullanarak bunları başarabilirsin
Kolob Kanyonu

Yanıtlar:


118

Bu komutlar arasındaki temel fark, işlevlerine erişimi kısıtlamalarıdır.

su ("kullanıcı yerine" veya "kullanıcı değiştir" anlamına gelir) - tam olarak bunu yapar, hedef kullanıcının ayrıcalıklarına sahip başka bir kabuk örneği başlatır. Bunu yapma hakkınızın olduğundan emin olmak için, sizden hedef kullanıcının şifresini ister . Bu nedenle kök olmak için kök şifresini bilmeniz gerekir. Makinenizde, komutları root olarak çalıştırması gereken birkaç kullanıcı varsa, hepsinin root şifresini bilmesi gerekir - aynı şifre olacağını unutmayın. Kullanıcılardan birinin yönetici izinlerini iptal etmeniz gerekiyorsa, root şifresini değiştirmeniz ve yalnızca erişime açık tutması gereken kişilere söylemeniz gerekir - dağınık.

sudo (hmm ... hatırlatıcı nedir? Süper Kullanıcı-DO?) tamamen farklıdır. O sorar, kullanıcıların belirli eylemleri haklarını çağrılır (root, vb olarak çalıştırmak komutları) sahip olan listeleyen bir yapılandırma dosyası (/ etc / sudoers) kullanan başlattığını kullanıcının şifresi de kişiyi sağlamak için - terminal gerçekten listelenen aynı "joe" dir /etc/sudoers. Bir kişiden yönetici ayrıcalıklarını iptal etmek için, sadece config dosyasını düzenlemeniz (veya kullanıcıyı bu config'de listelenen bir gruptan çıkarmanız) yeterlidir. Bu, ayrıcalıkların daha temiz yönetimi ile sonuçlanır.

Bunun bir sonucu olarak, birçok Debian tabanlı sistemde rootkullanıcının şifre seti yoktur - yani doğrudan root olarak giriş yapmak mümkün değildir.

Ayrıca, /etc/sudoersbazı ek seçenekler de belirtilmesine izin verir - yani X kullanıcısı yalnızca Y programını vs. çalıştırabilir.

Sık kullanılan sudo suilk: Kombinasyon aşağıdaki gibi çalışır sudoiçin ister sizin , bunu yapmak için izin eğer, şifre ve bir sonraki komutu (çağırır susüper kullanıcı olarak). Çünkü sutarafından çağrılır root, hedef kullanıcının şifresini girmenizi gerektirmez. Bu nedenle, dosya sudo sutarafından süper kullanıcı erişimine izin veriliyorsa, bir kabuğu başka bir kullanıcı olarak (kök dahil) açmanıza izin verir /etc/sudoers.


2
Daha önce su"kullanıcı değiştir" olarak görmedim , ama her zaman süper kullanıcı olarak; başka birinin kullanıcı adı olmadan varsayılan davranış (mantıklı olsa da). Gönderen wikipedia : "su komutu, aynı zamanda süper kullanıcı olarak anılacaktır [1] gibi erken 1974 olarak da adlandırılan olmuştur 'o akımla ilişkili hesabı değiştirilmesine izin verir, çünkü yerine kullanıcı', 'taklit kullanıcı' veya 'set kullanıcı' terminal (pencere).
dr jimbob

5
@dr jimbob: haklısın, ancak "kullanıcı değiştir" in ne yapabileceğini daha iyi tanımladığını düşünüyorum - tarihsel olarak "süper kullanıcı" anlamına gelse de. Ayrıca, wikipedia makalesinin cevabımla çok benzer olduğunu bilmek beni çok mutlu ediyor - Daha önce bu makaleyi hiç görmedim :)
Sergey

11
"Su" nin resmi anlamı "yedek kullanıcı" dır. Bakınız: "erkek su".
Angel O'Sphere

1
@ AngelO'Sphere: İlginç bir şekilde, Ubuntu'nun sayfası hiç "ikame" sayılmaz. Gnu.org'daki ( gnu.org/software/coreutils/manual/html_node/su-invocation.html ) manpage gerçekten "su: Bir kullanıcı ve grup kimliği ile bir komut çalıştır" der. Bence gnu.org kanonik bir kaynaktır :)
Sergey

1
Ne hakkında sudo su?
Kaz Wolfe

59

sudoKök ayrıcalıklarıyla kendi kullanıcı hesabınızdaki komutları çalıştırmanıza izin verir. suKullanıcıyı değiştirmenizi sağlar, böylece root olarak giriş yapmış olursunuz.

sudo -skök ayrıcalıklarına sahip bir kabuk çalıştırır. sudo -iayrıca kök kullanıcının ortamını da alır.

Arasındaki farkı görmek için suve sudo -syapmak cd ~ve sonra pwdbunların her sonra. İlk durumda, kök dizininin başında olacaksın çünkü kök. İkinci durumda, kendi ana dizininizde olacaksınız, çünkü kendiniz kök ayrıcalıklarınız var.

Burada tam olarak bu sorunun tartışılması var .


20
"Kendin kök ayrıcalıklarına sahipsin" aslında olan şey değil :) :) Aslında, "Kök ayrıcalıklarına sahip kendin" olmak mümkün değil - ya sen köksin ya da sen kendin. Her iki durumda da whoami yazmayı deneyin . Aslında cd ~sonuçlar farklıdır sudo'nun sonucu $ HOME ortam değişkeni ayarı değil -s olduğunu.
Sergey,

1
@Sergey, whoami 'root' diyor çünkü 'whoami' cmd'sini sanki sudoed gibi çalıştırıyorsunuz, bu yüzden geçici olarak (bu komutun süresi boyunca) root kullanıcısı gibi görünüyorsunuz, ancak yine de tam olmayabilir sudoers dosyasına göre root erişimi.
Ahtapot,

1
@Octopus: Söylemeye çalıştığım, Unix'te bir işlemin yalnızca bir UID'ye sahip olabileceği ve UID'nin işlemin izinlerini belirlediğidir. "Kendin kök yetkileri olan" kendin olamazsın, bir program ya UID'inle ya da kökün UID'i ile çalışıyor (0).
Sergey

5
"Sudoers dosyasına göre hala tam root erişiminiz olmayabilir" ile ilgili olarak: sudoersdosya, hangi komutu başka bir kullanıcı olarak çalıştırabileceğini, ancak komut çalıştırılmadan önce gerçekleşen dosyayı denetler. Ancak, root olarak bir işlemi başlatmanıza izin verildikten sonra, çalışan işlem root'un kullanıcı kimliğine sahiptir ve sisteme tam erişime sahiptir, sudo için bunu kısıtlamanın bir yolu yoktur. Yine, her zaman kendin ya da kökünsün, "yarı yarıya" diye bir şey yok. Bu nedenle eğer sudoersdosya kabuğunu kök olarak çalıştırmanıza izin veriyorsa, o kabuktaki izinler "normal" bir kök kabuğundan ayırt edilemez.
Sergey

36

Bu cevap, bu sorunun bir dupe'una cevabımın bir dupe'sidir, burada kanonik cevabın üzerine koyunuz ki insanlar onu bulabilsin!

Arasındaki başlıca fark sudo -ive sudo -sgeçerli:

  • sudo -isize kök ortamını verir, yani ~/.bashrcgöz ardı edilir.
  • sudo -ssize kullanıcının ortamını verir, böylece ~/.bashrcsaygı duyulur.

Burada ben bir uygulamaya sahip olduğunu görebilirsiniz, bir örnek lslbenim de ~/.bin/erişilebilir dizinde sudo -sancak erişilebilir değil sudo -i. Ayrıca Not ile irade olarak Bash istemi değişikliklerin olduğunu sudo -iancak ile sudo -s:

dotancohen@melancholy:~$ ls .bin
lsl

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ sudo -i

root@melancholy:~# which lsl

root@melancholy:~# exit
logout

dotancohen@melancholy:~$ sudo -s
Sourced .bashrc

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ exit
exit

sudo -sSize aşina olduğunuz ortamı vermek için uygun olsa da , iki nedenden dolayı kullanmanızı tavsiye ederimsudo -i :

  1. 'Kök' oturumunda olduğunuzu görsel hatırlatma.
  2. Kök ortamının, haydut hattı gibi kötü amaçlı yazılımlarla zehirlenmesi olasılığı çok düşüktür .bashrc.

Sudo -s 'nin / etc / profile veya /etc/profile.d/.' Da sahip olduğum herhangi bir şeyi işleyemediğini fark ettim.
17'de

@dotancohen - sudo -sBir kullanıcının aşina olduğu bir ortam sağlayarak neyi kastediyorsunuz ?
Motive

@dotancohen - sudo -s komutu zaten görsel ipuçları sağlar, bu yüzden sudo -i'nin neden daha iyi bir seçenek olduğuna dair merak ediyorum.
Motive

9

su "root" kullanıcısının şifresini sorar.

sudokendi parolanızı sorar (ve ayrıca komutları root olarak çalıştırıp çalıştırmadığınızı kontrol eder /etc/sudoers- varsayılan olarak "admin" veya "sudo" gruplarına ait olan tüm kullanıcı hesaplarının sudo kullanmasına izin verilir).

sudo -sbir kabuğu kök olarak başlatır ancak çalışma dizininizi değiştirmez. sudo -iroot hesabına giriş yapmayı simüle eder: çalışma dizininiz olacaktır /rootve root'un .profilevb. giriş yapmış gibi kaynaklanacaktır.


1
cevabı daha eksiksiz hale getirmek için: sudo -shemen hemen eşittir su($ HOME farklı) ve sudo -ieşittirsu -
DJCrashdummy

@DJCrashdummy - Neden neredeyse eşit diyorsunuz? Ne farklı?
Motive

2

Ubuntu veya ilgili bir sistemde, sugeleneksel, süper kullanıcı anlamında pek bir fayda bulamıyorum . sudobu davayı çok daha iyi ele alıyor. Ancak, susudoer yapılandırmanın aptalca olduğu bir kerelik durumlarda başka bir kullanıcı olmak için mükemmeldir.

Örneğin, sistemimi canlı bir CD / USB'den onarıyorsam, sabit diskimi ve diğer gerekli eşyaları chrootsisteme sık sık takarım . Böyle bir durumda, ilk komutum genellikle:

su - myuser  # Note the '-'. It means to act as if that user had just logged in.

Bu şekilde, root olarak değil normal kullanıcım olarak çalışıyorum ve ardından sudouygun şekilde kullanıyorum.


0
  • su Kök şifre sorar, kök olur, etkileşimli bir giriş kabuğu çıkarır.
  • su - Kök şifre sorar, kök olur, etkileşimli bir giriş kabuğu açar.

  • sudo -s Şifrelerinizi sorar, root olur, etkileşimli bir oturum açma kabuğu açar.
  • sudo -i Şifrelerinizi sorar, root olur, etkileşimli bir giriş kabuğu açar.

En iyi uygulama bu ikisini kullanmaktır.


  • sudo suŞifreniz susorulur , bir saniye root olur ve root `olarak çalışır.
  • sudo su -Parolanızı sorar, bir saniye root olur ve su -root olarak çalışır .

Yani bu durumda sukullanarak çalışıyoruz sudove kökün gerçek şifresini bilmek zorunda değilsiniz. Sonuçlar aynıdır suve su -.


Giriş ve giriş olmayan kabuk arasındaki fark nedir?
Pilot6

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.