LINUX.ORG.RU

про suid


0

0

Программе требуются повышенные привилегии, но требуется взаимодействие с пользователем.
Первый вариант: ставим suid-бит на программу.
Второй вариант: реализуем клиент-серверный вариант, сервер запускается как системный процесс с нужными правами, клиент взаимодействует с ним через IPC.

Какие есть плюсы и минусы этих вариантов?

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

★★★★★

suid - запускается с правами

sudo - права поднимаются до... и админ может это дело гибче регулировать: пароли, то-сё. более того, по соображением безопасности, суид не распространяется на скрипты: race condition какой-то там возникает, тогда поможет судо

ipc - кошерно, но сложно :)

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

> ipc - кошерно, но сложно :)

имхо, самый разумный и секурный вариант.

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

Какой еще race condition? На скрипт не может быть suid по той простой причине, что выполняется не скрипт, а интерпретатор.

По теме - скажи что именно делает твоя программа. Без это сказать что лучше - suid, sudo или демон - невозможно.

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

Я даже попробую конкретизировать задачу.

Предположим мы делаем sudo.

Первый вариант - как он сделан сейчас - /usr/bin/sudo имеет suid-ный бит, проверяет при запуске, всё ли ок, и exec-ается в запрашиваемый процесс с нужными правами.

Второй вариат - сделать /usr/sbin/sudo-server, включить его в /etc/init.d/, а /usr/bin/sudo будет просто посылать запрос на запуск программы в какой-нибудь /tmp/sudo-fifo. sudo-server уже будет проверять всё, что ему надо, и, если всё нормально, запускать. Правда здесь будут возникать (именно в случае sudo) проблемы со всякими терминалами, не теми предками-потомками, но предположим, что это не существенно.

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

Интересны конкретные плюсы и минусы каждого варианта. Пока я вижу в обоих вариантах одинаковые недостатки, если у suid-ного бинарника/сервера баг с переполнением, можно в него заслать "/bin/rm -rf /" (условно говоря).

А так и мне кажется IPC «кошернее», но почему - объяснить (себе) не могу.

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

Демон делать нет смысла, если он не занимается чем-то самостоятельно независимо от юзера. sudo в виде демона - лишняя сложность и занятая память. Аналогично ping в виде демона. В случае с sudo в виде демона будет еще куча проблем с взаимодействием с выполняемым приложением, сигналами и т.д.

AMDmi3
()

Короче, общий подход такой: если программа что-то делает в фоне, то это демон. Если нужно иметь контроль за тем, кто имеет доступ к управлению демоном, можно:

1) Сделать свою систему аутентификации. Это действительно нужно если демон будет управляться по сети.
2) Если демон управляется только локально - это можно рулить правами на сокет.

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

Suid нужен в очень малом числе случаев. Либо, когда софт должен делать что-то привилегированное из-под любого юзера без дополнительных телодвижений, при это следя чтобы не было возможности напакостить (ping, traceroute), либо когда приложение само следит за привилегиями и хранит у себя per-user данные (типа at, crontab, screen и того-же sudo).

Если не можешь сказать, зачем тебе демон и suid, то тебе не нужно ни то ни другое.

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

> Если не можешь сказать, зачем тебе демон и suid, то тебе не нужно ни то ни другое.

Я могу сказать, но на ЛОРе это будет оффтопиком :) Я лишь постарался свести задачу к указанной.

Спасибо, буду дальше думать.

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

sudo для vist-ы в качестве упражнения по Windows security и освежения С++ных скиллов. Знаю, что есть Start++, это только упражнение.

Legioner ★★★★★
() автор топика

А если сделать консольную программу с suid-ом и GUI для вызова первой программы без suid? Должно работать, не надо делать IPC, надёжно.

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

А кто мешает мне запускать suid-ную программу без GUI-шного враппера?

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