ipacctd и запуск скрипта от указанного юзера

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
P0hi1
рядовой
Сообщения: 13
Зарегистрирован: 2006-08-21 10:41:08
Контактная информация:

ipacctd и запуск скрипта от указанного юзера

Непрочитанное сообщение P0hi1 » 2006-08-30 14:01:49

Такая трабла: поставил считалку 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

Код: Выделить всё

killall -HUP ipacctd
Все так, трафик считается, сохраняется. Написал скрипт, который отправляет 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

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2006-08-30 14:21:31

никак...
есть стрёмный метод - скрипт который содержит две строки:

Код: Выделить всё

#!/bin/sh
killall -1 ipacctd
с судошным битом. Но он должен быть тока на чтение-исполнение для юзера! Чтоб править не мог!
Убей их всех! Бог потом рассортирует...

Аватара пользователя
P0hi1
рядовой
Сообщения: 13
Зарегистрирован: 2006-08-21 10:41:08
Контактная информация:

Непрочитанное сообщение P0hi1 » 2006-08-31 7:31:57

Ну подскажите кто нить, разумный выход из положения, живут же люди... :!: :!: и статистику считают. Кстати, скрипт все же можно запустить от другого юзера. К примеру владельцем процесса sendmail является smmsp, а у MySQL одноименный mysql.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2006-08-31 8:45:45

lissyara писал(а): с судошным битом. Но он должен быть тока на чтение-исполнение для юзера! Чтоб править не мог!
Убей их всех! Бог потом рассортирует...

Аватара пользователя
P0hi1
рядовой
Сообщения: 13
Зарегистрирован: 2006-08-21 10:41:08
Контактная информация:

Непрочитанное сообщение P0hi1 » 2006-08-31 9:14:45

lissyara писал(а): с судошным битом. Но он должен быть тока на чтение-исполнение для юзера! Чтоб править не мог!
Ну, если я правильно понял, то

Код: Выделить всё

 chmod u+sx script 
И от имени какого пользователя запустится скрипт?

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2006-08-31 9:20:26

от владельца
пример:

Код: Выделить всё

/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/>
заметь - они все судошные.
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2006-08-31 9:22:23

и заметь - править их никто не имеет права!
ввиду что у тебя будет не бинарник а шелл скрипт - тебе надо не тока выполнение разрешить но и чтение, т.к. бинарники выполняет ядро, а оно по любому их прочтёт, а вот шелл скрипты - интерпретатор, и ему надо его прочесть, на что в случае если тока бит на выполнение стоит у него не хватит прав.
Убей их всех! Бог потом рассортирует...

Аватара пользователя
P0hi1
рядовой
Сообщения: 13
Зарегистрирован: 2006-08-21 10:41:08
Контактная информация:

Непрочитанное сообщение P0hi1 » 2006-08-31 12:02:50

Как сказал бы мой знакомый, чей то здесь падалью воняет... :D
Не поркатил такой номер с убийственным битом. Накатал скрипт, присвоил ему суидный бит, создал для него виртуального пользователя, внутри скрипта единственная команда 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 присваивать сумашедший бит, но это уже, ИМХО, порнография...
Может еще какие варианты, или скажи, где я не прав.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2006-08-31 12:05:57

чё-то ты не так делаешь....
тебе же надо от простого пользователя скрипт с рутоыми правами запустить...
Убей их всех! Бог потом рассортирует...

Аватара пользователя
P0hi1
рядовой
Сообщения: 13
Зарегистрирован: 2006-08-21 10:41:08
Контактная информация:

Непрочитанное сообщение P0hi1 » 2006-08-31 12:15:24

Не обязательно рутовыми, даже лучше не рутовыми. Тем более какая разница, сделаю я

Код: Выделить всё

chown root:wheel ipacctd_start.sh
И что изменится? Какая разница между root и ipacctd? Насколько я понимаю, скрипт запущенный от лица ipacctd вполне имеет право послать SIGHUP процессу владельцем которого является тот же ipacctd.
И к тому же запускать скрипт от имени виртуального, непривилегированного пользователя, на мой взгляд, гораздо лучше, с точки зрения безопасности.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2006-08-31 12:25:58

у тебя 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/>
Убей их всех! Бог потом рассортирует...

Аватара пользователя
P0hi1
рядовой
Сообщения: 13
Зарегистрирован: 2006-08-21 10:41:08
Контактная информация:

Непрочитанное сообщение P0hi1 » 2006-08-31 13:04:20

Может я чего не так делаю, но:

Код: Выделить всё

ls -l /sbin | grep ping
-r-sr-xr-x  1 root  wheel      21792  3 ноя  2005 ping
Вот обычный бинарник с суидным битом. Запускаю его из под юзера

Код: Выделить всё

ping x.x.x.x
смотрю на другой консоли:

Код: Выделить всё

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.

Аватара пользователя
P0hi1
рядовой
Сообщения: 13
Зарегистрирован: 2006-08-21 10:41:08
Контактная информация:

Непрочитанное сообщение P0hi1 » 2006-08-31 13:11:32

Пока что он из под рута крутится