Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: ivanatora в Jun 03, 2005, 12:40



Титла: Изпълняване на скрипт като root
Публикувано от: ivanatora в Jun 03, 2005, 12:40
Имам един скрипт който взима от командния ред параметър - IP и по него прави tcpdump за това IP. Искам да го стартирам като нормален потребител, но tcpdump иска root. Пробвах да го направя suid root (chmod 4755), но като се стартира получавам:
tcpdump: socket: Operation not permitted
Мислех си да го направя със sudo. Обаче tcpdump все се стартира с различен параметър, не мога да пиша в /etc/sudoers нов запис за всяко от възможните IPта..
Някакви идеи?


Титла: Изпълняване на скрипт като root
Публикувано от: VladSun в Jun 03, 2005, 12:59
не би ли трябвало да има и SGID, т.е.
chmod 6755


Титла: Изпълняване на скрипт като root
Публикувано от: ivanatora в Jun 03, 2005, 13:32
Пак получавам
tcpdump: socket: Operation not permitted
Пробвах и с chmod a+s .. същото.


Титла: Изпълняване на скрипт като root
Публикувано от: VladSun в Jun 03, 2005, 13:57
При мен:

kernel 2.6.10, tcpdump version 3.8.3, libpcap version 0.7.2

6755 tcpdump

няма проблеми с дъмпването от нормален потребител ...

Какви параметри пускаш на tcpdump?


Титла: Изпълняване на скрипт като root
Публикувано от: ivanatora в Jun 03, 2005, 14:30
Викам го така:
system("/usr/sbin/tcpdump -nqt -i eth1 dst host  $ARGV[0]");
Става дума за Perl скрипт като $ARGV[0] е първия параметър, подаден от командния ред. Ако го пусна с потребител root, работи нормално.
tcpdump version 3.8.3 libpcap version 0.8.3
2.4.22 kernel


Титла: Изпълняване на скрипт като root
Публикувано от: VladSun в Jun 03, 2005, 14:36
Примерен код
vladsun@levski:~$ /usr/local/sbin/tcpdump -nqt -i eth1 dst host 192.168.2.107
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 68 bytes
IP 195.149.248.137.80 > 192.168.2.107.3995: tcp 1460
IP 195.149.248.137.80 > 192.168.2.107.3990: tcp 1460
IP 195.149.248.137.80 > 192.168.2.107.3990: tcp 1460
IP 195.149.248.137.80 > 192.168.2.107.3995: tcp 1460
IP 195.149.248.137.80 > 192.168.2.107.3990: tcp 1460

... и с тези параметри нямам проблеми.

Може да ти звучи глупаво, ама айде постни резултата от
ls -l tcpdump :)

Примерен код
ls -l /usr/local/sbin/tcpdump
-rwsr-sr-x    1 root     root       511978 Apr 26  2004 /usr/local/sbin/tcpdump*


Титла: Изпълняване на скрипт като root
Публикувано от: ivanatora в Jun 03, 2005, 14:43
ls -l `which tcpdump`
-rwxr-xr-x    1 root     bin        539096 Apr  2  2004 usr/sbin/tcpdump*
Мойто няма suid root на binary-то. Мдаа, май от това ще е.. Абе то нормално ли е тоя suid там, та всеки да гледа минаващите пакети...


Титла: Изпълняване на скрипт като root
Публикувано от: VladSun в Jun 03, 2005, 14:43
май проблема е и в system()

пробвай само
Примерен код
'/usr/sbin/tcpdump -nqt -i eth1 dst host  $ARGV[0]'


Титла: Изпълняване на скрипт като root
Публикувано от: VladSun в Jun 03, 2005, 14:44
Цитат (ivanatora @ Юни 03 2005,14:43)
Абе то нормално ли е тоя suid там, та всеки да гледа минаващите пакети...

Еми не е :)


Титла: Изпълняване на скрипт като root
Публикувано от: ivanatora в Jun 03, 2005, 15:03
system()-a май си е наред. Измислих едно решение, ама е хамалогия. Записвам във външен файл IPто, на което ще се пуска tcpdump и изпълнявам друг скрипт със sudo (тук вече не му подавам параметри), който взима IPто от временния файл и си върши работата.
Трябва да има някакъв по-елегентен начин, който не включва +s на tcpdump binary-то ;)


Титла: Изпълняване на скрипт като root
Публикувано от: Йордан в Jun 03, 2005, 21:26
Според мене sudo е добро решение :)


Титла: Изпълняване на скрипт като root
Публикувано от: ivanatora в Jun 04, 2005, 11:27
Ами с една дума - стана :)
Проблема е бил в задклавиатурния драйвър ??? Мислех че в /etc/sudoers заедно с командата трябва да напиша и параметрите към нея, пък то не било задължително.


Титла: Изпълняване на скрипт като root
Публикувано от: Йордан в Jun 04, 2005, 14:07
докакто съм чел синтаксиса е следния...
потребител_на_който_даваме_права машина_на_която_ще_се_изпълнява=(като_кой_потребител_ще_се_изпълнява) изброени_файловете_до_които_ще_дадем_достъп

П.П. параметрите не се въвеждат т.к. даваме права към файл а не към параметрите към него


Титла: Изпълняване на скрипт като root
Публикувано от: ivanatora в Jun 04, 2005, 21:30
Ами така са горе-долу. Мислех че трябва да се укажат и параметрите, един вид за повече сигурност ;)