Написал небольшую утилиту, которая позволяет автоматически генерировать 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. Изложил сумбурно, но думаю поймёте...