su vs sudo -s vs sudo -i vs sudo bash


89

Aşağıdaki komutlar arasındaki fark nedir:

su
sudo -s
sudo -i
sudo bash

Ben biliyorum suben kök şifresini bilmeniz gerekir ve için sudoben de olmak zorunda sudoersdosyanın ama bir kez fark nedir idam?

Ev dizininim yürütüldükten sonra olduğu için suve arasında bir fark olduğunu biliyorum , ancak ev dizininiz hala peşinde . Ama bunun sadece eksik olduğumun altında yatan bir farkın bir belirtisi olduğundan şüpheleniyorum.sudo -s/rootsu/home/mynamesudo -s


3
Kullanmayı tercih ediyorum sudo su - Bu şekilde root şifresine ihtiyacınız yok -ve giriş dizininin doğru ayarlandığından emin olursunuz .
Jens Timmerman

Yanıtlar:


114

İle su, sen olmak başka bir kullanıcı - varsayılan olarak kök, ancak potansiyel başka bir kullanıcı. Söylerseniz su -, ortamınız o kullanıcının oturum açma ortamıyla da değiştirilir, böylece gördüğünüz kullanıcının bu kullanıcı olarak giriş yapmasından ayırt edilemez. Sistemin ne yaptığını söyleyebilmesinin imkânı yoktur, ancak sudüştüğünde, bu kullanıcının yaptıkları eylemlerden başka bir kullanıcıya.

İşler çok farklı sudo:

  • Çalıştığınız komutlar hedef kullanıcı olarak sudo yürütülür - varsayılan olarak kök, ancak değişebilir -u- ancak bunun üzerinden geçtiğiniz komutları kaydeder, kullanıcı adınızla etiketleyerek böylece suçlamadan sonra atanabilir. :)

  • sudoçok esnektir. Örneğin, belirli bir kullanıcının veya kullanıcı grubunun çalışmasına izin verilen komutları sınırlayabilirsiniz. İle su, ya hep ya hiç.

    Bu özellik genellikle rolleri tanımlamak için kullanılır. Örneğin, çalışmasına izin verilen dumpve tarher birinin sistem diskini düzgün bir şekilde yedeklemesi için kök erişimi gerektiren bir "yedekleme" grubu tanımlayabilirsiniz .

    Eğer birisi verebilir demektir çünkü burada bu söz sudoonları vermeden ayrıcalıkları sudo -sveya sudo bashyeteneklerini. Sadece işlerini yapmaları için gereken izinlere sahipler, oysa sutüm sistemi yönetiyorlardı. Bununla birlikte, buna dikkat etmelisiniz: sudo viörneğin, birisine söyleme yeteneği verirseniz , kabukları ortadan kaldırabilir vive etkili bir şekilde aynı güce sahip olabilirler sudo -s.

  • Kök parola yerine sudoer parolasını aldığı için, sudobirden fazla sudoer arasındaki izni ayırır.

    Bu, yönetici suşifresini çözer ; bu, root şifresi değiştiğinde, onu kullanmayı bilmek zorunda olan herkese suanlatılması gerektiğidir. sudosudoer şifrelerinin bağımsız olarak değişmesine izin verir. Aslında, sudotüm sysadmin görevlerini yerine getirmeye zorlamak için root kullanıcısının hesabını bir sistemde parola kilitlemek yaygındır sudo. Çok sayıda güvenilir sudocu içeren büyük bir organizasyonda, bu, sistem yöneticilerinden birinin ayrılması durumunda, kök parolayı değiştirmeniz ve kalan yöneticilere dağıtmanız gerekmediği anlamına gelir.

Arasındaki temel fark sudo bashve sudo -solmasıdır -skısadır ve birkaç yönden daki kullanıcının varsayılan kabuk yürütmek için komutları geçmesine olanak tanır:

  1. sudo -s some-commandHangisinin some-commandkabuğunun altında çalıştığını söyleyebilirsiniz . Bunun için kısaca sudo $SHELL -c some-command.

  2. Bunun yerine komutları kabuğun standart girişine, örneğin iletebilirsiniz sudo -s < my-shell-script. Bunu heredoc ile tek bir sudoaramaya birkaç komut göndermek için kullanabilirsiniz , sudotekrar tekrar yazmaya gerek kalmaz .

Bu davranışların her ikisi de isteğe bağlıdır. Çok daha yaygın olarak, -syalnız veriyorsunuz , bu yüzden sadece kullanıcı kabuğunuzu etkileşimli olarak çalıştırıyor. Bu modda, önce çevre değişkeninde göründüğünden sudo bashfarklı bir kabuk çalıştırabileceğinden ve daha sonra ayarlanmamışsa, genellikle kullanıcı adınızın giriş kabuğu ayarında farklıdır .bashSHELL/etc/passwd

Tarafından çalıştırılan kabuk sudo -s, geçerli kullanıcı ortamınızı devralır. Gerçekten istediğin şey temiz bir ortamsa, giriş yaptıktan hemen sonra aldığın gibi, yerine istediğin şey sudo -i, görece yeni bir ekleme sudo. Kabaca sudo -ietmektir sudo -solarak su -etmektir subirkaç anahtar ortam değişkenleri ancak tüm sıfırlar ve kullanıcının ana dizinine geri gönderir. Ayrıca standart giriş yoluyla bu kabuğun altında çalışmasını da komutları vermezseniz veya sudo -i some-commandbu kabuğu etkileşimli bir giriş kabuğu olarak çalıştırır, böylece kullanıcı kabuk başlatma komut dosyaları (örn. .bash_profile) Yeniden çalıştırılır.

Bütün bunlar, sudo -içok daha güvenli hale getirir sudo -s. Neden? Çünkü birisi ortamınızı daha önce değiştirebilirse, sudo -sistenmeyen komutların yürütülmesine neden olabilir. En belirgin durum değişiyor SHELL, ancak aynı zamanda daha az doğrudan da olabilir, örneğin altındayken PAGERsöyleyeceğiniz gibi .man foosudo -s

"Değiştirebilirlerse PAGERdeğiştirebilirler PATHve sonra sadece kötü bir sudoprogramı değiştirebilirler " diyebilirsiniz, ancak yeterince paranoyak biri /usr/bin/sudo /bin/bashbu tuzağı önlemek için diyebilir . Muhtemelen o kadar paranoyak değilsindir, ayrıca diğer tüm duyarlı çevre değişkenlerindeki tuzaklardan da kaçınırsınız . EDITORÖrneğin, herhangi bir VCS komutunu çalıştırmadan önce kontrol etmeyi de hatırladınız mı? Böylece sudo -i.

Çünkü sudo -iaynı zamanda kullanıcının ana dizinine çalışma dizini değiştirir, hala kullanmak isteyebilirsiniz sudo -ssen edildi aynı dizinde kalmasını istediğini biliyorum bu durumlar için cd'sen çalıştırdığınızda içine d sudo. Bu hala daha güvenlidir sudo -ive cdolsa geri olduğun yere.


2
'Vi dışına kabuk' ile ne demek istiyorsun?
Crisron

11
@crisron: İçeriden vi, :shEnter tuşuna basın ve basın. Şimdi bir kabuk altındasınız, vibu kabuğun doğurduğu sürecin tüm ayrıcalıklarına sahipsin . Eğer viroot ayrıcalığı ile çalışan, böylece kabuk olacak. Veya bir kabuktan başka bir şeyi çalıştırabilir :!cmd, çıktıyı bir komuttan düzenleme arabelleğine :r !cmd, vb. Okuyabilirsiniz . Tüm bunlar kilitlenmişse, Makefilehedefler kabuk komut dosyalarıdır ve Vim'in :makekeyfi kabuk çalıştırmanıza izin veren komutu vardır. editörün içinden komut dosyaları. Yaramazlık için olasılıklar bu yorum kutusunun tutması için çok büyük.
Warren Young,

2
eğer birisi PATH'ınıza bash ile sahte basabilirse, o zaman birisi PATH'ınıza sahte bir sudo koyabilir. tam yolu kullanarak sudo çağırmanız gerektiğinden emin olmak için:/usr/bin/sudo
lesmana

1
@lesmana: Bunu bir düzenlemede ele aldım; temelde, PATHtek sorun bu değil.
Warren Young

6
Harika açıklama; büyük baş ağrısı okuyor.
lobi

27

Bir ubuntuforums yazısından bir süre önce yaptım:

Aşağıdaki deneyi düşünün:

applic@ion:~% sudo su
[sudo] password for applic:
root@ion:/home/applic# env > /tmp/sudo_su_env
root@ion:/home/applic# exit
exit
applic@ion:~% sudo -s
applic .bashrc read...
root@ion:~% env >/tmp/sudo_s

İşte bulduğum farklılıklar:

İle sudo -s:

HOME=/home/applic
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
reads $USER's ~/.bashrc

İle sudo su:

HOME=/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
reads /etc/environment
reads /root/.bashrc

Farkı fark et $HOME. Kök olmak ve $HOMEnormal kullanıcının evine alışmak sorunlara neden olabilir. Örneğin, grafiksel bir uygulama çalıştırırsanız, normal kullanıcı ~/.Xauthorityroot tarafından üzerine yazılabilir. Bu, daha sonra belirli grafik uygulamaları cron üzerinden çalıştıramamak gibi normal kullanıcı sorunlarına neden olur.

Özetlemek:

                                     corrupted by user's 
        HOME=/root  uses root's PATH     env vars
sudo -i     Y       Y[2]                 N
sudo -s     N       Y[2]                 Y
sudo bash   N       Y[2]                 Y
sudo su     Y       N[1]                 Y
  1. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games muhtemelen tarafından /etc/environment
  2. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

Alt satırda, sudo -ikullanıcının ortamı tarafından korunmayan bir kök kabuğu istediğinizde çalıştırılacak uygun komuttur.


1
Ortamın ne kadar “lekeli” olduğu sudo(içinde /etc/sudoersve ilgili dosyaların) yapılandırmasına da bağlıdır . Gibi yapılandırma ayarları always_set_home, env_reset, env_keep, env_checkve env_resetve bu, kullanıcı ve komuta bağlı olarak değişebilir. Bkz 'Komut ortamı' ve Sudoers SEÇENEKLERİ ait bölümüne (5) sudoers manpage.
Curt J. Sampson

Şahsen, sudo -Hsayarlarım tarafından korunmasız bir ortam istediğimde giderim , çünkü zsh kullanıyorum ve tüm uygulama hesaplarını bash kullanmak için değiştiriyor olabilirim. Bu, belirli sayıda ortam değişkeninin test edilmeden geçmesine izin verir, ancak genellikle /etc/profile.d/* tarafından yazılanları bulurum.
Ed Grimm

7

su( S cadı u ser veya ler yerini tutmaz u ser) kullanıcıyı geçiş yapmanızı sağlar. suTemel olarak, amaçlanan kullanıcının yetkileriyle başka bir kabuk örneği başlatır. Varsayılan olarak sizi rootkullanıcıya yönlendirir, belirli bir kullanıcıyı değiştirmek istiyorsak, aşağıdaki şekilde kullanıcıyı geçmemiz gerekir:

$ su bob  # switches to bob (requires bob's password)

su -ortam değişkenlerinin kök olarak sıfırlanacağı ve suortam değişkenlerinin eski kullanıcı olduğu anlamına gelir.

örneğin: kökün ana dizini kullanıyorsanız su -veya eski kullanıcı ana dizini kullanıyorsanız su.

sudo ( ler uper u ser do varsayılan yani süper olduğu kadar), kullanıcıların başka bir kullanıcının güvenlik ayrıcalıklarıyla programları çalıştırmak için izin veren bir komut satırı aracıdır root. /etc/sudoersHangi kullanıcıların belirli işlemlerde haklara sahip olduğunu listeleyen bir yapılandırma dosyası kullanır

sudo / ˈsuːduː / şeklinde okunmalıdır . sözdizimi sudo commandyani s cadı u ser ve bunu bu komutu.

  • sueşittir sudo -ive root hesabına giriş yapmayı simüle eder. Çalışma dizininiz /rootkök dizini .profilevb. Okuyacak. İstem, $ 'dan #' a değişerek kök erişiminizin olduğunu gösterir.

  • sudo -s bir kabuğu kök olarak başlatır ancak çalışma dizininizi değiştirmez.

  • sudo bash nerede bashile çalıştırmak için komut sudo. Bu komut bashsüper kullanıcı olarak çalışıyor .

  • sudoBirisi yaptığı her şeyi kullanarak günlüğe kaydedilebilir.
  • Kullanmak sudo, kullanıcının root şifresini bilmesini engeller.
  • Kullanarak sudokomutları sınırlandırabiliriz.
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.