Yanıtlar:
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.
$ 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
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
İ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.
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!
$ 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.
$ 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
# 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.