URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID15
Нить номер: 3299
[ Назад ]

Исходное сообщение
"FreeBSD права SUID"

Отправлено mg , 07-Окт-10 12:35 
Создал простой скрипт

------------------- test.sh --------
#!/bin/sh


whoami
echo test > /root/ok.test
------------------------------------

Выставил SUID
chmod 4755 ./test.sh

После выполнения под простым пользователем test получаю

test
./test.sh: cannot create /root/ok.test: Permission denied

Что я делаю не так?


Содержание

Сообщения в этом обсуждении
"FreeBSD права SUID"
Отправлено mg , 07-Окт-10 13:02 
Решил проблему написав С - програмку

Получается что во FreeBSD игнорируется SUID выставленный на скрипты или имеет какие-то ограничения.


"FreeBSD права SUID"
Отправлено Ygor , 07-Окт-10 18:31 
> Решил проблему написав С - програмку
> Получается что во FreeBSD игнорируется SUID выставленный на скрипты или имеет какие-то
> ограничения.

В линуксе на скока я помню, тоже не получиться выставить суид на скрипт.


"FreeBSD права SUID"
Отправлено Andrey Mitrofanov , 08-Окт-10 10:23 
>> Решил проблему написав С - програмку
>> Получается что во FreeBSD игнорируется SUID выставленный на скрипты или имеет какие-то
>> ограничения.
> В линуксе на скока я помню, тоже не получиться выставить суид на
> скрипт.

Ну, да. В интернетах много где пишут - в фак-ах/ман-ах...

И если просто _немного подумать, что скрипт исполняет _на_самом_деле-то_ exe-шник вроде /bin/bash или perl, тот экзешник "просто" читатет скрипт как данные, как текст -- это не исполненеие бинарника ядром, которе и "смотрит" на SUID/SGID биты. А сам интерпретатор не суид-ный ни разу и не болжет быть... Вот.

_ http://google.com/search?hl=ru&q=suid+%D1%81%...


"FreeBSD права SUID"
Отправлено Andrey Mitrofanov , 08-Окт-10 10:29 
> SUID/SGID биты. А сам интерпретатор не суид-ный ни разу и не
> болжет быть... Вот.

Упс. %)
http://www.opennet.me/base/sec/suid_script.txt.html

Date: Fri, 12 Apr 2002 21:43:30 +0400
From: Alex Semenyaka <Alex.Semenyaka@f640.n461.z2.fidonet.org>
Subject: Пояснение почему под FreeBSD не может быть suid скриптов.

> suid+%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82+site:opennet.ru


"FreeBSD права SUID"
Отправлено mg , 08-Окт-10 18:08 
>> SUID/SGID биты. А сам интерпретатор не суид-ный ни разу и не
>> болжет быть... Вот.
> Упс. %)
> http://www.opennet.me/base/sec/suid_script.txt.html
> Date: Fri, 12 Apr 2002 21:43:30 +0400
> From: Alex Semenyaka <Alex.Semenyaka@f640.n461.z2.fidonet.org>
> Subject: Пояснение почему под FreeBSD не может быть suid скриптов.
>> suid+%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82+site:opennet.ru

Согласен полностью. Но вызов самого скрипта происходит через шел. Шел открывает файл и читает заголовок, понимая что это скрипт. Затем читает первую строчку - интерпретатор который требуется применить и фактический запускает указанный интерпретатор (собственно опять шел) передавая ему на вход уже ввиде параметра файл скрипта. Верно?

Предположим теперь, что вместо скрипта оказался бинарник. Тогда читая его заголовок шел должен понять, что это исполняемый файл, и начать его загрузку в память. При этом "система" как-то должна учесть что выставлен SUID. Но кто именно это должен учесть в случае бинарника? Получается что это делает ядро уже после загрузки в память, оно смотрит на атрибуты файла.

Я к чему клоню, так или иначе всё что запускается - запускается через оболочку шел. Но в одном случае это запускается с учётом SUID, а в другом нет. Чисто теоретически, шел мог бы учесть SUID входного файла и запуститься с нужными правами независимо от того скрипт это или бинарник.


"FreeBSD права SUID"
Отправлено alexs , 09-Окт-10 08:25 
>[оверквотинг удален]
> должен понять, что это исполняемый файл, и начать его загрузку в
> память. При этом "система" как-то должна учесть что выставлен SUID. Но
> кто именно это должен учесть в случае бинарника? Получается что это
> делает ядро уже после загрузки в память, оно смотрит на атрибуты
> файла.
> Я к чему клоню, так или иначе всё что запускается - запускается
> через оболочку шел. Но в одном случае это запускается с учётом
> SUID, а в другом нет. Чисто теоретически, шел мог бы учесть
> SUID входного файла и запуститься с нужными правами независимо от того
> скрипт это или бинарник.

Рекомендую почитать что-нибудь по системе, чтобы выйти из области неверных предположений и фантазий на тему. У шелла нет прав дать или не дать SUID (хоть он 10 раз будет пытаться это "учесть") - раз, система всегда пускает только бинарники, скриптов для нее нет - два. Шелл передает команду запуска с указанием запускаемого файла через соответствующий системный вызов, а не "грузит в память", не хватало еще. Вода мокрая. Небо голубое. Книги рулез.

Суидный скрипт был бы возможен, если бы 1) сам интепретатор имел сам SUID-bit, 2) и при наличии этого бита на и на скрипте тоже выполняо бы его без сброса привилегий - а при отсутствии, соответственно, привилегии сначала сбрасывал бы. Но эта схема неуниверсальна - нужно каждый интерпретатор учить такому поведению. И дыр при ее реализации столько, что куда дешевле отказаться от сомнительной радости SUID-скриптов, чем пытаться их залатать. Так что на нынешний момент такой подход считается bad practice.


"FreeBSD права SUID"
Отправлено mg , 11-Окт-10 13:03 
> Рекомендую почитать что-нибудь по системе, чтобы выйти из области неверных предположений
> и фантазий на тему. У шелла нет прав дать или не
> дать SUID (хоть он 10 раз будет пытаться это "учесть") -
> раз, система всегда пускает только бинарники, скриптов для нее нет -
> два. Шелл передает команду запуска с указанием запускаемого файла через соответствующий
> системный вызов, а не "грузит в память", не хватало еще. Вода
> мокрая. Небо голубое. Книги рулез.

Ну по-сути вы ведь к словам прицепились. В конечном счёте сам шел и создаст процесс (пусть средствами ядра, но инициирует именно он - вежливо попросив ядро создать новый процесс). На счёт скриптов я всё же вас не понял, я писал что шел анализирует заголовок полученного файла и что если понимает что это скрипт, то запускает сам себя с передачей на вход этого скрипта(да собственно сам себя он запускает даже на бинарниках). Вы же пишите что "для системы нет скриптов" - ну и причём тут то, что писал я?

По поводу что шел не может запускать с произвольными правами - это верно, я с этим и не спорил, только предположил что шел мог бы быть более "особенным" чем обычные программы - например уметь наследовать бит SUID от скрипта. А выставить шелу SUID - по-моему это означает дать всем пользователям данного шела права root.


"Жестокий мир, да."
Отправлено Andrey Mitrofanov , 11-Окт-10 16:30 
> Согласен полностью.

Или "полностью", или "но", да? B)

>Но вызов самого скрипта происходит через шел. Шел открывает файл
> и читает заголовок, понимая что это скрипт. Затем читает первую строчку
> - интерпретатор который требуется применить и фактический запускает указанный интерпретатор

Шелу сказали выполнить, он сказал ядру - выпоолнить, _ядро_ посмотрело заголовок и...

_бинарнику_ с SUID-ом -- дало, чего положено,а

_скрипту_ -- с SUID-ом -- не дало. Потому что ядро-то _фактически выполняет какой-нибудь /bin/sh или /bin/perl (с имеренм скрипта -> параметром~~), а на _этих бирарниках никакого SUID-а нет (и не будет никогда).

Я даже ещё раз повторю: нет и небудет никогда SUID-ных скриптов.
Проще и правильнее "настроить наконец sudo"(тм).