ALT Linux Community general discussions
 help / color / mirror / Atom feed
* [mdk-re] "ÓÀÉÔÁ ÄÌÑ ÔÒÅÈ ÎÁÐÉÌØÎÉËÏ×" Ë vtund
@ 2002-03-14 18:11 Denis Kulgeyko
  2002-03-15 19:25 ` [mdk-re] "сюита для трех напильников" к vtund Dmitry V. Levin
  0 siblings, 1 reply; 2+ messages in thread
From: Denis Kulgeyko @ 2002-03-14 18:11 UTC (permalink / raw)
  To: mandrake-russian

     Доброго времени суток, ув. community !

  Вопрос к людям имеющим опыт в девелопменте под юнихи.
Есть vtund-2.5. Решил я дописать туда chroot() + setuid()/setgid(). Причина: не 
хочу оставлять процесс, висящий во внешний мир (а надо именно его юзать и 
именно в иаком виде) работающим под root'ом.
Сделал, но есть одна проблема: когда именно лучше делать setuid() ?
  Вкратце о происходящем - сперва делаю chroot(), конфиг читается уже из 
нового корня, потом процесс fork()'ается и родитель делает exit() а потомок 
отцепляетя от терминала и висит демоном. Дальше возможны 2 варианта - или это 
будет клиент или сервер.
  Если сервер - то он цепляется на порт и слушает его, ждет вызовов от 
клиентов. Вариант - сделать setuid() здесь. setgid() я делаю тут и это ничему 
не мешает.
  Клиент идет на соответствующий сервер/порт, обменивается ключами, 
устанавливает соединение, поднимает сетевой интерфейс и через него уже 
пускает туннель. setuid()/setgid() делаю здесь.
  Для сервера можно поставить setuid() после поднятия сетевого интерфейса 
(там делается еще один fork() - так для каждого клиента), но тогда сервер 
будет от момента начала слушанья порта до подьема туннеля работать с 
root'овыми правами.
  Если сбросить привилегии после "цепляния" к порту - то понадобятся 
root'овые права на подъем сетевого интерфейса, настройку маршрутов, 
firewall'а и пр. Можно кинуть в новый "/" xто-то типа sudo/super, но они 
тянут за собой не так уж и мало всякого барахла и являют собой еще одну 
лишнюю "дыру" (есть setuid + executable - файлы). Да и выглядит это несколько 
"кривовато".
  Если же делать setuid() сразу после поднятия сетевого интерфейса - то не 
хватит прав на опускание этого интерфейса при разрыве соединения (ну .. тут 
он упадет сам), удаление лишних маршрутов (уйдут сами сразу за интерфейсом), 
вычистку firewall'а и прочее.
  Есть еще вариант, который потянет за собой переделку в структуре всей 
программы - чтобы настройкой интерфейсов и иже с ним занимался самый главный 
прародитель-демон (потомки его шевелят по мере надобности), который работает 
под root'ом, но напрямую сеть не слушает. Наверно так и сделаю, если не 
придумается более лучший вариант, хотя это весьма прилично мороки.
  Вот я сижу и ломаю голову .. как бы это все нормально сделать ?
Может что-то подскажете. Заранее огромное пасиба.
?

WBR
  Denis A. Kulgeyko aka Burzumie





^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2002-03-15 19:25 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-03-14 18:11 [mdk-re] "ÓÀÉÔÁ ÄÌÑ ÔÒÅÈ ÎÁÐÉÌØÎÉËÏ×" Ë vtund Denis Kulgeyko
2002-03-15 19:25 ` [mdk-re] "сюита для трех напильников" к vtund Dmitry V. Levin

ALT Linux Community general discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
		mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
	public-inbox-index community

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.community


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git