LINUX.ORG.RU

Почему у скриптов не работает Suid?


0

1

Интересует почему было принято соглашение, по которому setuid и setgid работают только для бинарников.

Как запустить скрипт от другого пользователя я знаю, интересуют именно причины такого соглашения.

★★

Ответ на: комментарий от sdio

Это я видел. Интересует какие именно могут возникнуть проблемы. Встречал утверждение, что в таком случае возможна гонка. Не могу понять каким образом.

at ★★ ()
Ответ на: комментарий от at

due the massive security holes

какие именно могут возникнуть проблемы.

Неужели надо объяснять какие могут быть проблемы из-за security holes?

sdio ★★★★★ ()
Ответ на: комментарий от at

Если мы создаём симлинк на SUID-скрипт, то ядро запускает интерпретатор с SUID правами, и даёт ему имя этого скрипта. Если в этот момент заменить этот симлинк другим... Да, можно что-нибудь придумать, но зачем? Проще запретить.

И второй момент, интерпретатор команд, в общем случае, не расчитан на то, что он может быть запущен SUID, в отличии от простой программы, например, ping, интерпретатор может вести себя по разному от переменных среды или файла конфигурации. То есть ещё одна потенциальная дыра.

mky ★★★★★ ()
Ответ на: комментарий от sdio

Неужели надо объяснять какие могут быть проблемы из-за security holes?

Чего ты взъелся? Человек хочет знать, в чём эти security holes конкретно заключаются, потому что объяснение «умные люди так сказали» его не удовлетворяет.

proud_anon ★★★★★ ()
Ответ на: комментарий от mky

Если мы создаём симлинк на SUID-скрипт, то ядро запускает интерпретатор с SUID правами, и даёт ему имя этого скрипта. Если в этот момент заменить этот симлинк другим... Да, можно что-нибудь придумать, но зачем?

Возможно я что то не понимаю, то же самое можно провернуть и с бинарником

интерпретатор команд, в общем случае, не расчитан на то, что он может быть запущен SUID, в отличии от простой программы

Это понятно. этому правилу х.з. сколько лет. Интересны причины почему оно появилось

at ★★ ()
Ответ на: комментарий от at

то же самое можно провернуть и с бинарником

Нет, ядро получает имя бинарника, открывает его (файл), смотрит атрибуты, читает, запускает. Ему безралично, что в какой-то момент симлинк начнёт показывать куда-то в другое место, suid'ны будет запущен именно тот файл, куда показывал симлинк изначально. А если файл открывает suid'ный интерпретатор, то между тем моментом времени, когда на файл «смотрело» ядро и тем моментом времени, когда содержимое файла (символической ссылки) будет читать интерпретатор, можно провести подмену.

Интересны причины почему оно появилось

Наверное, тех архивов не сохранилось. Линукс, если я не путаю, просто взял это правило, а где оно впервые появилось, отдельный вопрос.

mky ★★★★★ ()
Ответ на: комментарий от mky

Нет, ядро получает имя бинарника, открывает его (файл), смотрит атрибуты, читает, запускает. Ему безралично, что в какой-то момент симлинк начнёт показывать куда-то в другое место, suid'ны будет запущен именно тот файл, куда показывал симлинк изначально.

Здесь ещё есть правила на счет подгружаемых либ, но дело не в этом. Суидному интерпретатору точно так же можно передавать файл после разрешения всех симлинков.

Наверное, тех архивов не сохранилось. Линукс, если я не путаю, просто взял это правило, а где оно впервые появилось, отдельный вопрос.

Не нашел в сети когда это появилось. Почему и был задан вопрос.

P.S. в данном случае возможны проблемы со средой. То есть environment но это отдельный вопрос

at ★★ ()
Последнее исправление: at (всего исправлений: 1)
Ответ на: комментарий от at

И было бы интересно существуют ли другие решения в nix-подобных системах. qnx и т.д.

at ★★ ()
Ответ на: комментарий от at

Интерпретатору предаётся не файл, а имя файла. Можно городить огород с /dev/fd/3 и тогда у скрипта могут возникнуть проблемы с самоиднетификацией (со своим именем), их можно решать, но зачем весь этот огород?

С таким же успехом ведь можно сделать интерпретатор, понимающий suid-файлы. ЕМНИП, perl, если он сам suid и ему на выполнение дали suid-файл, то он не будет сбрасывать привилегии и выполнит файл с правами суперпользователя.

Про историю немного говорится здесь: http://www.in-ulm.de/~mascheck/various/shebang/ , приводится выжимка из kern_exec.c, то-ли от 4.3BSD-Tahoe, то-ли от 4.4BSD. Вроде как сейчас их исходники доступны бесплатно (но с регистрацией) скачайте, посмотрите.

mky ★★★★★ ()
Ответ на: комментарий от mky

Интерпретатору предаётся не файл, а имя файла.

Эту возможность я не учел. Спасибо! То есть, насколько понимаю, могут возникнуть проблемы со скриптами, которые написаны без учета возможности выполняться в суидном режиме.

К сожалению, чтение исходников дает понимание как это работает, но не почему так сделано. Мне интересны в основном причины.

С таким же успехом ведь можно сделать интерпретатор, понимающий suid-файлы.

Это явный костыль

at ★★ ()
Последнее исправление: at (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.