“Sudo -u root echo` whoami ”neden kök döndürmüyor?


11

Ubuntu'da asıl kök kullanıcı olarak bir komutu çalıştırmak için sudo'yu nasıl kullanırsınız? Aslında ben koştu kadar bu sudo, varsayılan davranış olduğunu düşündüm:

myuser@localhost:~$ sudo echo `whoami`
myuser

myuser@localhost:~$ sudo -u root echo `whoami`
myuser

Ancak, bu, ancak tek bir satırda istiyorum davranış türüdür:

myuser@localhost:~$ sudo su -
root@localhost:~# echo `whoami`
root

11
neden yankı whoami? Sadece sudo whoami deyin. Kök döndürür
Neo

Yanıtlar:


26

Aslında yaptığı kök olarak bunları çalıştırın. Ancak, başınıza gelen şey, arka kenelerin koşmadan önce değerlendirilmesidir sudo, çünkü komutu değerlendirmek için gereklidir. Daha doğrudan, neden sadece bu değil:

sudo whoami

Sizin whoamine yaptığını görmek için neden geri aslında geçerli kullanıcı olarak bir kabuktaki değerlendirilir keneler.


2
Bu yanlış. sudo kök ayrıcalıklarıyla çalışır, ancak kök olarak çalışmaz.
Manfred Moser

@Moser, Peki neden komutu "root" yazıyor?
Cerin

4
@ManfredMoser: Bu bir UID ile çalışır 0(sıfır), olduğu tam olarak "kök" dediğimiz insanlar. ( sudoSadece
UID'yi

1
M. Moser , set-UID'nin yalnızca sürecin etkili kullanıcı kimliğini değiştirmesi , sürecin kendisinin de gerçek kullanıcı kimliğini değiştirmesini gerektirmesini gerektiriyor olabilir sudo. Ancak xyr cevabını okurken, durum böyle görünmüyor.
JdeBP

7

Önce alt kabuk ( whoami) yürütülür, siz ve sonuç ( myuser) sudokomuta yerleştirilir ; ne sudogörür echo myuser. Bunu kısayol olarak düşünün:

tmpvar=`whoami`
sudo echo "$tmpvar"

1

Burada bazı tahminler sürüyor ...

Backticks açıkça diğerlerinin açıkladığını yapıyor, whoami'sudo' çağırmadan önce genişliyor ve backticks beklendiği gibi 'root' dönüşü bırakıyor.

Ancak sudo ile gerçekte ne olduğunu anlamak faydalıdır (8). Bu yüzden aslında adam sayfasına baktım!

"Gerçek ve etkili uid ve gid hedef kullanıcınınkilerle eşleşecek şekilde ayarlandı…"

Dolayısıyla, gözlenen davranışın etkili ve gerçek kullanıcı kimliği arasındaki farkla ilgisi yok gibi görünüyor.

Ayrıca "sudo printenv" yapmak ve sadece beni biraz şaşırtan "printenv" ile karşılaştırmak açıklayıcıdır. [İ] bazı [/ i] dışa aktarılan değişkenlerin kullanılabilir olduğunu ve diğerlerinin olmadığını gösterir: çağrılan kullanıcının HOME, PATH, PS1, SHELL, TERM ve EDITOR'larını rapor eder, ancak MANPATH, CVSROOT, LD_LIBRARY_PATH veya ENV. Bu, programların orijinal kullanıcı veya kökten farklı şekilde davranmasına neden olabileceğinden, biraz garip görünüyor.


0

sudo, root ayrıcalıklarıyla herhangi bir komutu çalıştırmanıza izin verir ancak root kullanıcısı olarak çalıştırmanıza izin vermez. Bunun yararlı olmasının nedeni, bu kurulumda birden fazla kişinin kök haklarına sahip olabilmesidir, ancak tüm günlük kaydı vb. Hala değişiklikleri kimin yaptığını gösterir.

Bu kurulum, root şifrelerini paylaşmaktan daha iyidir. Bu nedenle, Ubuntu da dahil olmak üzere birçok dağıtımda kök kullanıcılara sahip olmak yerini aldı.

sudo su ise kök kullanıcı yapar ve bu nedenle gerçekten kullanılmamalıdır.

Bu fark gözlemlediğiniz (doğru) davranışınızı da açıklar.


6
Hayır. Davranışı açıklayan şey, kabuktaki komut ikamesinin nasıl çalıştığıyla ilgili çok basit bir konudur. Ayrıcalıklarla hiçbir ilgisi yoktur.
JdeBP

-2

Sudo geçici olarak kim olduğunuzu (ilk etapta sudo yapmanıza izin verilir) kök düzeyinde ayrıcalıklar verir.

Kök olmak için, varsayılan olarak Ubuntu'da engellenen kök olarak oturum açmanız gerekir.

Buna dikkat etmelisin, sudo kök değil. Fred'in sudo, che3d SUDO ortam değişkenlerini yürüttüğünü göstermek istiyorsanız, SUDO_COMMAND en faydalı olabilir.


Ubuntu'da kök engellendi mi? Bundan emin misin? Cesareti kırıldığını biliyorum, ama normal yöntemler kullanılarak değiştirilebilen bir UUID kullanarak belirsiz bir şifre ayarlayarak acemi için biraz daha zor hale getirdiklerini düşündüm.
Marty Fried
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.