LINUX.ORG.RU

Какой самый адекватный вариант запуска suid приложений через GUI

 , , ,


0

1

Короче я пишу софтину на Qt (С++) которая удобно монтирует cifs(samba) и sftp(через sshfs), что-то наподобие Gigolo. И пытаюсь адекватно сделать так, чтоб пароль для операций монтирования/размонтирования спрашивался всего один раз при первой операции или вообще при входе (т.к. PAM все дела, автоанлок кейринга). Так-же конечно желательно чтоб это не оказалось дырой.

Я рассмотрел 3 варианта:

  1. sudo + keyring + mount - многие говорят, что так не стоит (т.к. там и таймауты и дырявое оно) и такие вещи может вызвать только пользователь в группе wheel (если конечно в конфиге sudo так написано). Хотя там есть и -S параметр удобный и даже -A который позволяет прикрутить ASKPASS программу любую ( например вызов keyring)
  2. pkexec (polkit) + mount - постоянно спрашивает пароль (в общем-то и понятно почему), а чтоб не спрашивал нужно руками править rules/actions. Простой смертный пользователь точно не будет этим заморачиваться
  3. Отдельный демон запущенный под рутом + dbus (и возможно polkit) - выглядит как самый адекватный вариант. Можно запилить демона который будет чисто запускать mount/umount/fusermount по запросу через dbus. Поидее тут можно и пароль адекватно запомнить и передавать.

Интересно узнать мнение разбирающихся в этом людей

★★★★

Последнее исправление: RevenantX (всего исправлений: 2)

1. Ерунда, ты собираешся дёргать приложение с suid, которое дёрнет ещё несколько приложений, и то при учете что пользователю можно это всё делать, ну такое...
2. Имхо тру вей, ты ведь не запускаешь mount командой, а дёргаешь syscall? Тут надо курить конкретную реализацию, в плане конфигов, нормальная практика запихивать такие вещи в пакет, вместе с бинарником.Его кстати через dbus можно дёргать, но в топике Polkit'а я скорее мимикрокодил
3. Оверинженеринг, ты пишешь обвязку для единственного системного вызова, прикручивать тут демон, для дёргания пользователями без CAP_ADMIN, хз, больше времени убьёшь на отладку и написания комуникаций, звучит не оч, но опять же моё имхо.
Вообще, ты можешь заталкивать всё в /etc/fstab с опциями user,noauto

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

2. Имхо тру вей, ты ведь не запускаешь mount командой, а дёргаешь syscall? Тут надо курить конкретную реализацию, в плане конфигов, нормальная практика запихивать такие вещи в пакет, вместе с бинарником.Его кстати через dbus можно дёргать, но в топике Polkit'а я скорее мимикрокодил

Я вызываю не через syscall т.к. там еще для варианта с sshfs вызывается fuse mount. Но проблема в запросе пароля. Хотелось бы чтоб программа могла спокойно работать в портабельном режиме.

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

А в чем собсно разница fuse или не fuse? Системный вызов то в конце один, я так предполагаю сейчас через QProcess с распарсиванием вывода?

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

Сейчас qprocess с результатом. Если 0 то всё хорошо в общем-то. Если нет то вывод MessageBox с stderr выводом mount.

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

Ну и не важно на самом деле. Переделать на syscall просто можно будет в итоге после создания отдельного приложения с правами.

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

Если нет то вывод MessageBox с stderr выводом mount.

Пока для тестов всё работает через pkexec (до этого работало через sudo)

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