LINUX.ORG.RU
ФорумAdmin

[announce] exec-wrapper v1.0 - утилита для автоматической генерации setuid-врапперов для сркриптов

 


0

0

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

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

Скачать: http://exec-wrapper.googlecode.com/files/exec-wrapper-1.0.tar.bz2 Установка:

make install
Помощь (на корявом английском =)):
man 8 exec-wrapper

Примеры использования:

exec-wrapper touch

Созаёт враппер /opt/exec-wrapper/bin/touch, который могут запускать пользователи, находящиеся в группе root. На враппере стоит setuid-бит, так что touch всегда будет запущен с правами root'а.

exec-wrapper -A du

Почти то же самое, но только для du и запускать могут все пользователи.

exec-wrapper -g apache /var/www/cgi-bin/script.pl /var/www/cgi-bin/script

Пример использования для CGI-скриптов.

exec-wrapper -a -Wall -a -Wextra -e LANG=POSIX -m 0755 gcc

А это пример использования не совсем по прямому назначению. Полученный враппер будет без setuid-бита. Он будет просто запускать GCC с двумя дополнительными опциями (-Wall и -Wextra) и локалью POSIX.

Чтобы врапперы запускались вместо обычных программ по умолчанию, нужно добавить в PATH путь до них:

PATH="/opt/exec-wrapper/bin:$PATH"

P.S. Изложил сумбурно, но думаю поймёте...

Deleted

Дак вроде sudo хватало, хотя, может и нет.

А вот строчка:

tmp=$( mktemp -d || die "Can't create temporary directory" )

не понравилась, вроде mktemp требует (требовала) указания шаблона и, вроде die здесь бесполезен, так как порождается отдельный суб-шел и exit (die) будет в нём, вроде нужно что-то наподобие:

tmp=$( mktemp -d Шаблон )|| die "Can't create temporary directory"

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

> Дак вроде sudo хватало, хотя, может и нет.

Sudo проблематично использовать для cgi-скриптов.

> не понравилась, вроде mktemp требует (требовала) указания шаблона и, вроде die здесь бесполезен, так как порождается отдельный суб-шел и exit (die) будет в нём, вроде нужно что-то наподобие:


Судя по man mktemp - шаблон не обязателен, но на всякой случай добавлю. Вынес die за скобки. Спасибо за багрепорт (пофикшено в svn) =).

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

> поясни, пожалуйста.

У меня так и не получилось заставить lighttpd запускать скрипт через sudo. Возможно виноваты руки. Да и конфиг у sudo довольно мутный.

А вообще эта утилита появилась в результате небольшого срача на канале #linux в rusnet'е. Там один товарищ очень хотел дать всем пользователям право устанавливать софт через emerge. Причём sudo его не устраивал, так как нужно явно набирать sudo emerge, а ему хотелось просто emerge. Альяс на sudo emerge ему тоже не понравился. Попытки как-либо вразумить его на тему безопасности так же не увенчались успехом.

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

> враппер /opt/exec-wrapper/bin/touch, который могут запускать
> пользователи, находящиеся в группе root. На враппере стоит
> setuid-бит, так что touch всегда будет запущен с правами root'а.

$ /etc/sudoers
Cmnd_Alias      RootGroupCMDs = /usr/bin/touch
Cmnd_Alias      AllUserCMDs   = /usr/bin/du
Cmnd_Alias      CGI_CMDs      = /var/www/cgi-bin/script1.pl,/var/www/cgi-bin/script2.pl

%root   ALL=(root) NOPASSWD:RootGroupCMDs
%apache ALL=(root) NOPASSWD:CGI_CMDs
ALL     ALL=(root) NOPASSWD:AllUserCMDs

$ cat /opt/exec-wrapper/bin/touch
#!/bin/sh
exec sudo /usr/bin/touch "@*"


Где-то так, если я правильно понял постановку задачи.
Скрипт правящий /etc/sudoers и создающий обертку в 
/opt/exec-wrapper/bin/ будет того же уровня сложности.


>Там один товарищ очень хотел дать всем пользователям право
> устанавливать софт через emerge.

Фтопку!

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

>Те же йайца.

Ясное дело.

>Только кроме враппера нужно ещё sudo.


У sudo больше возможностей и он один на всех, а бинарный враппер будет плодиться, имеет хардкодед параметры запуска и кроме того требует gcc.

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

> У sudo больше возможностей и он один на всех, а бинарный враппер будет плодиться, имеет хардкодед параметры запуска и кроме того требует gcc.

sudo тоже не везде есть =).

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

Если нельзя поставить sudo, но можно закинуть свои бинарники, то это странное место.
И да, пожалуйста, никто не запрещает ездить на своем велосипеде, я и сам частенько этим грешу.

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

> Для lighttpd и , конечно, apache есть suexec. Он не подходит?

Там настройки безопасности только при пересборке можно изменять.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.