[devel] Re: suid/sgid programs and temporary files

Alexey Tourbin at на altlinux.ru
Ср Авг 17 01:42:56 MSD 2005


On Tue, Aug 16, 2005 at 11:56:29PM +0400, Dmitry V. Levin wrote:
> > Условия подчеркнутой проверки можно перевести примерно как
> > 	st.st_uid > 10 && st.st_uid != getuid()
> > 
> > Вопрос: хорошо ли, что здесь используется real uid?  Не лучше ли
> > проверять effective uid? 
> 
> Это зависит от семантики модуля.
> Другими словами, для чего он предназначен.

Модуль предназначен для безопасного создания временных файлов.
Семантика, грубо говоря, такая же, как у mktemp(1).

Когда при помощи `mktemp -t prog.XXXXXX` создается временный файл, я не
знаю, проверяет ли mktemp *каталог*, в котором будет создан временный
файл.  Если каталог принадлежит не руту (st_uid > 10) и не нам, то
"кто-то" (потенциальный злоумышленник) может попросту подменить
временный файл (старый удалить, а вместо него сделать новый).
Возможность подмены сохраняется, если каталог доступен по записи
кому-нибудь ещё (и не защищен sticky bit'ом).

> При той информации, что содержится в комментарии, у меня складывается
> ощущение, что проверять effective uid было бы логичнее.

Это особенно актуально для suid'ных скриптов.  Если Василий запускает
suid скрипт, который создаёт временный файл в ~/tmp (каталог считается
безопасным, потому что getuid() == Василий), то временный файл можно
будет подменить.  С другой стороны, если бы выполнялась проверка
geteuid() == Василий, то каталог ~/tmp уже не считался бы безопасным.
----------- следущая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: отсутствует
Url     : http://lists.altlinux.ru/pipermail/devel/attachments/20050817/1fbea3b6/attachment.bin


Подробная информация о списке рассылки Devel