Kabuk Komut Dosyalarında UID Ayarlanamıyor


14

Burada neler olup bittiğini öğrenmeme yardımcı olan var mı? İzleme paketi sayılarını ayarlayan bazı kurallar var. Aşağıdaki komut dosyasını root olarak çalıştırdığımda:

#!/bin/bash
iptables -t mangle -xnvL

Beklediğim çıktıyı alıyorum:

//snip
233203 199929802 MARK  //blah blah blah
//snip

Ancak, bunu apache olarak çalışan kaktüslerin bir parçası olarak çalıştırmak istiyorum. Şimdi apache iptables çalıştıramaz, bu yüzden senaryo var. SUID kökü olarak ayarladım :

-rwsr-sr-x 1 root root   37 May 14 23:06 iptables_packet_report.sh

Ama sonra bu çıktıyı alıyorum:

server # sudo -u apache ./iptables_packet_report.sh
iptables v1.4.2: can't initialize iptables table `mangle': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

Açıkçası benim çekirdeğim gayet iyi ve kök olmayan olarak çalıştırdığım bir şeyi karıştırıyor, ama nedenini anlamıyorum. SUID'yi [gösteri] ( http://en.wikipedia.org/wiki/Setuid#Demonstration) ile iki kez kontrol ettim ve çalıştığını doğruladım.

server # sudo -u apache ./printid
Real UID  = 81
Effective UID = 0
Real GID  = 81
Effective GID = 0

Son hedefim, apache olarak çalışırken iptables -t mangle -xnvL çıktısını almak, böylece hepsini güzelce grafiklemek için kaktüsler kullanabilirim.

Yanıtlar:


16

Kabuk komut dosyaları için SUID kökü kullanamazsınız. Sadece gerçek programlar SUID kökü olabilir, kabuk betikleri "#!" ve tercüman SUID'yi çalıştırmak zorunda kalacaktı ve bilmediğim bir nedenden dolayı çalışmıyor

Sudo'ya bir göz atın ve kurun! / Etc / sudoerrs dosyasını düzenleyin, şöyle bir satır ekleyin:

www-data        ALL=NOPASSWD: /usr/local/sbin/iptables_packet_report.sh

Sonra sadece koş

sudo /usr/local/sbin/iptables_packet_report.sh

kodundan.

Daha sonra parola istememeli, ancak işlemi otomatik olarak değerlendirmelidir.

Manuel olarak www-data'ya girip manuel olarak çalıştırırsanız hata mesajlarınızın da olacağından eminim


13

Christian'ın belirttiği gibi benim sorunum bir kabuk senaryosu üzerinde SUID yapmaya çalışıyordu. Burada açıklandığı gibi , bir kabuk betiğinde SUID ayarı yapmak çok kötü bir fikirdir:

UNIX altında bir kabuk komut dosyası yürütmek iki adımlı bir işlem içerir: çekirdek bir kabuk komut dosyasının çalıştırılmak üzere olduğunu belirlediğinde, önce kabuk yorumlayıcısının SUID kopyasını başlatır, ardından kabuk yorumlayıcısı kabuk komut dosyasını yürütmeye başlar. Bu iki işlem iki ayrı adımda gerçekleştirildiğinden, ilk adımdan sonra çekirdeği kesebilir ve kabuk yorumlayıcısının yürütmek üzere olduğu dosyayı değiştirebilirsiniz. Bu şekilde, bir saldırgan bilgisayarı seçtiği herhangi bir kabuk komut dosyasını yürütmesini sağlayabilir

Bu nedenle, birçok modern linux dağıtımı, kullandığım gentoo dahil olmak üzere SUID kabuk komut dosyalarını yok sayıyor. Sudoers dosyasını düzenleyebildim ve çalıştırabildim.


Harika cevap!
Dave Cheney

Bunun Solaris 10 için doğru olup olmadığını bilen var mı?
Eric Johnson

2

Bence hıristiyan'ın çözümü en iyisidir, ama eğer gerçekten isterseniz , derlenmiş programda shc ve sonra setuid root kullanarak betiği derleyebilirsiniz .

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.