Страница 1 из 1
ipacctd и запуск скрипта от указанного юзера
Добавлено: 2006-08-30 14:01:49
P0hi1
Такая трабла: поставил считалку ipacctd, почитал man сделал, заколбасил в rc.conf
Код: Выделить всё
ipacctd_enable=YES
ipacctd_rules=sis0
ipacctd_rule_sis0_flags="-p 10000 -v -f /var/traffic/traf-%F-%T"
Сделал диверт в ipfw
Код: Выделить всё
add 100 divert 10000 ip from any to any via sis0
Перегрузился... и обломился: ipacctd не запустился, соответственно трафик считать в незапущенном состоянии трудно...
Не беда, подумал я, и сделал стартовый скрипт
Код: Выделить всё
/usr/local/sbin/ipacctd -v -p 10000 -f /var/traffic/traf-%F-%T
и не найдя более подходящего места засунул его в /etc/rc.d/
Все. Ок. ipacctd запустился. Отправил ему SIGHUP
Все так, трафик считается, сохраняется. Написал скрипт, который отправляет HUP и дальше формирует более читабельный фаил из лога, засунул его в cron. Ну вроде все... и вот, когда счастье было так близко, наступил на грабли...
Владельцем процесса ipacctd был root, а cron запускал скрипт от имени юзера, и на все мольбы
Код: Выделить всё
killall -HUP ipacctd или killall -u root -HUP ipacctd
жестко отвечал
No matching processes belonging to you were found или
Operation not permitted соответственно.
Так вот я подошел к сути:
1. как послать HUP чужому процессу
2. как запустить ipacctd от лица другого пользователя, лучше виртуального
3. ну или подскажите другие варианты решения проблемы
Ну и оффтопик: киньте плзз ссылку на какой нить хороший учебник или мануал по SH
Добавлено: 2006-08-30 14:21:31
Alex Keda
никак...
есть стрёмный метод - скрипт который содержит две строки:
с судошным битом. Но он должен быть тока на чтение-исполнение для юзера! Чтоб править не мог!
Добавлено: 2006-08-31 7:31:57
P0hi1
Ну подскажите кто нить, разумный выход из положения, живут же люди...

и статистику считают. Кстати, скрипт все же можно запустить от другого юзера. К примеру владельцем процесса sendmail является smmsp, а у MySQL одноименный mysql.
Добавлено: 2006-08-31 8:45:45
Alex Keda
lissyara писал(а): с судошным битом. Но он должен быть тока на чтение-исполнение для юзера! Чтоб править не мог!
Добавлено: 2006-08-31 9:14:45
P0hi1
lissyara писал(а): с судошным битом. Но он должен быть тока на чтение-исполнение для юзера! Чтоб править не мог!
Ну, если я правильно понял, то
И от имени какого пользователя запустится скрипт?
Добавлено: 2006-08-31 9:20:26
Alex Keda
от владельца
пример:
Код: Выделить всё
/usr/bin/>ll | grep pass
-r-sr-xr-x 6 root wheel 17K May 7 03:59 chpass
-r-xr-xr-x 1 root wheel 6.0K May 7 03:57 kpasswd
-r-sr-xr-x 1 root wheel 10K May 7 03:59 opiepasswd
-r-sr-xr-x 2 root wheel 5.7K May 7 03:59 passwd
-r-sr-xr-x 6 root wheel 17K May 7 03:59 ypchpass
-r-sr-xr-x 2 root wheel 5.7K May 7 03:59 yppasswd
/usr/bin/>
заметь - они все судошные.
Добавлено: 2006-08-31 9:22:23
Alex Keda
и заметь - править их никто не имеет права!
ввиду что у тебя будет не бинарник а шелл скрипт - тебе надо не тока выполнение разрешить но и чтение, т.к. бинарники выполняет ядро, а оно по любому их прочтёт, а вот шелл скрипты - интерпретатор, и ему надо его прочесть, на что в случае если тока бит на выполнение стоит у него не хватит прав.
Добавлено: 2006-08-31 12:02:50
P0hi1
Как сказал бы мой знакомый, чей то здесь падалью воняет...
Не поркатил такой номер с убийственным битом. Накатал скрипт, присвоил ему суидный бит, создал для него виртуального пользователя, внутри скрипта единственная команда
read a, просто чтоб не выключался, вот что вышло:
Код: Выделить всё
-r-sr-xr-x 1 ipacctd ipacctd 181 31 авг 14:44 ipacctd_start.sh
Ок. Запускаю из под рута, ./ipacctd_start.sh, а на второй консоли наблюдаю
Код: Выделить всё
ps -axj | grep ipacctd
root 18056 17770 18056 698 1 S+ p0 0:00,01 /bin/sh ./ipacctd_start.
pohil 18061 18059 18060 18059 2 RL+ p1 0:00,01 grep ipacctd
Облом... Скрипт работает из под рута, а владелец скрипта ipacctd. И вот какая у меня мысля: с бинарниками номер с суидным битом, наверное, прокатит а для скрипта создается еще один экземпляр sh, в котором он и выполняется. Так, что разве только sh присваивать сумашедший бит, но это уже, ИМХО, порнография...
Может еще какие варианты, или скажи, где я не прав.
Добавлено: 2006-08-31 12:05:57
Alex Keda
чё-то ты не так делаешь....
тебе же надо от простого пользователя скрипт с рутоыми правами запустить...
Добавлено: 2006-08-31 12:15:24
P0hi1
Не обязательно рутовыми, даже лучше не рутовыми. Тем более какая разница, сделаю я
И что изменится? Какая разница между root и ipacctd? Насколько я понимаю, скрипт запущенный от лица ipacctd вполне имеет право послать SIGHUP процессу владельцем которого является тот же ipacctd.
И к тому же запускать скрипт от имени виртуального, непривилегированного пользователя, на мой взгляд, гораздо лучше, с точки зрения безопасности.
Добавлено: 2006-08-31 12:25:58
Alex Keda
у тебя ipacctd от кого пашет?
Код: Выделить всё
/usr/home/lissyara/>ps -axjwww | grep ipac
root 531 1 531 531 0 Ss ?? 28:51,37 /usr/local/sbin/ipacctd -v -p 10001 -f /var/log/traffic_myk0.log -r /var/run/ipacctd.myk0
root 534 1 534 534 0 Ss ?? 25:31,23 /usr/local/sbin/ipacctd -v -p 10002 -f /var/log/traffic_xl0.log -r /var/run/ipacctd.xl0
root 537 1 537 537 0 Ss ?? 6:34,68 /usr/local/sbin/ipacctd -v -p 10003 -f /var/log/traffic_lo0.log -r /var/run/ipacctd.lo0
lissyara 50457 37684 50456 37684 2 R+ p0 0:00,00 grep ipac
/usr/home/lissyara/>
Добавлено: 2006-08-31 13:04:20
P0hi1
Может я чего не так делаю, но:
Код: Выделить всё
ls -l /sbin | grep ping
-r-sr-xr-x 1 root wheel 21792 3 ноя 2005 ping
Вот обычный бинарник с суидным битом. Запускаю его из под юзера
смотрю на другой консоли:
Код: Выделить всё
ps -axj | grep ping
pohil 18608 698 18608 698 1 S+ p0 0:00,06 ping x.x.x.x
Несмотря на то, что ping принадлежит руту и имеет суидный бит, выполняется он от имени юзера.
С другой стороны /usr/bin/chpass, имеющий те же атрибуты что и ping, при запуске из под юзера выполняется от имени root.
Добавлено: 2006-08-31 13:11:32
P0hi1
Пока что он из под рута крутится