Bir astarın başına “sudo” yazarsam, komutların geri kalanına uygulanır mı?


10

Bir sudosatırın başına bash yazarsam, komutların geri kalanına uygulanır mı?

Başka bir deyişle, bu:

sudo foo | foo2 | foo3

buna eşdeğer:

sudo foo | sudo foo2 | sudo foo3

Yanıtlar:


11

Kendinizi sudoyalnızca sağlanan ilk komutu kullanarak çalıştığına ikna etmenin bir yolu olarak ve ilk kanalın orijinal kullanıcı kimliğiniz olarak çalıştırılmasından sonraki her şey, onu görmek için bu işe yaramaz komut zincirini kullanabilirsiniz.

Örnek 1

$ sudo whoami > file1 | whoami > file2 | whoami > file3

Daha sonra catbu dosyaları oluşturduğunuzda aşağıdaki kullanıcı adlarını görürsünüz:

$ cat file{1..3}
root
saml
saml

Örnek 2

Ancak bir alt kabuk çalıştırırsanız:

$ sudo sh -c 'whoami > file4 | whoami > file5 | whoami > file6'

Ardından catbu dosyaları oluşturduğunuzda aşağıdaki kullanıcı adlarını görürsünüz:

$ cat file{4..6}
root
root
root

Örnek 3

İle ilgili yorumunuz sudo foo1 | sudo foo2 ...hiçbir zaman işe yaramayacaktı, çünkü sudo foo1kaynağından çıktı alınacak sudo foo2. whoamiÖrneklerimi kullanarak bu komutlar zincirinin hiçbir şey yapmadığını gösterir.

$ sudo whoami | sudo whoami | sudo whoami
root

Birincisi koştu, ancak 2. ve 3. hiçbir şey yapmıyorlar, çünkü girdi almak için donanımlı değiller. Bunun yerine böyle bir şey yazmak istedim düşünüyorum:

$ sudo whoami;sudo whoami;sudo whoami
root
root
root

Hangi 3 farklı komut istemlerinde 3 kez çalıştırmak için eşdeğerdir. Veya bu:

$ sudo whoami && sudo whoami && sudo whoami
root
root
root

Ama bunu asla sonuncusu yapma. Bir sonraki bölüme aittir.

Sudo'yu aramanın gizli yolları

Bunlar benim en iyi işim değil, birden çok komut kullanarak beni çalıştırdığınızı görmüş olabilirsiniz sudo. Onlara sadece başkalarının mutlaka yapması için değil , öğretmek için göstereceğim!

Yol # 1

$ echo "echo 1 > /proc/sys/vm/drop_caches" | sudo sh

Nasıl çalışır?

Çift tırnak içindeki echo programı sudo nedeniyle root olarak çalışıyor, ancak echo'nun çıktısını salt root dosyasına yönlendiren kabuk hala sizin gibi çalışıyor. Geçerli kabuğunuz yeniden yönlendirme başlamadan önce yapar sudo.

Yol # 2

$ sudo tee /proc/sys/vm/drop_caches <<<1

Nasıl çalışır?

Bu yöntem teeprogramı root olarak çalıştırır ve komutu çağırmadan önce çalışan burada dizeden girdi alır .sudotee

Yol # 3

# this way
$ sudo -s -- 'whoami'

# or this way
sudo -s -- sh -c 'whoami;whoami'

Nasıl çalışır?

Bunlar farklı görünebilir ama gerçekten de aynı şeyi yapıyorlar. -sAnahtarı kullanırken, sudotek bir komut çalıştıracaktır. Kaçmak için bir yol olup olmadığını asla anlayamadım. Böyle bir şey işe yaramaz.

# this
$ sudo -s -- 'whoami;whoami'

# or this
$ sudo -s -- 'whoami\;whoami'

Ancak man sayfasına bakıldığında -sanahtar, kullanıcının /etc/passwddosya girişinde tanımlanan kabuğa tek bir komut ileteceğini söyler . Bu yüzden ikinci formda bir hile kullanırız, esas olarak kabuğu geçiririz, başka bir kabuk ( sh -c) çalıştırırız.

Dahası var ama burada duracağım. Bunlar sadece bir şeyleri anlarsanız ne yapabileceğinizi göstermek içindir, ancak mutlaka gereksiz yere zincirleme yapmamalısınız, çünkü yapabileceğiniz gibi, kod pragmalarınızı mantıklı bir seviyede tutmaya çalışmalısınız, böylece diğerleri hem anlayabilir hem de destekleyebilir Onları gelecekte.


6

Hayır, örneğinizde yalnızca footarafından yürütülür sudo. Tüm komutları yükseltilmiş ayrıcalıklarla çalıştırmak istiyorsanız, bir kabuk oluşturabilirsiniz:

sudo sh -c 'foo | foo2 | foo3'
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.