LINUX.ORG.RU

Права root по необходимости

 , ,


0

1

Добрый день, ЛОР.

Насколько я помню, некоторые программы, (например, относящиеся к настройке системы) умеют большую часть времени работать с правами обычного пользователя и запрашивать рутовые полномочия только при необходимости.

Как мне реализовать такое в своей программе?

Первое, что приходит в голову - выделить всю рутоспецифичную бодягу в отдельный процесс и вызывать его при необходимости. Как тогда организовать запрос пароля? Да, есть вроде как для этого всякие kdesudo (которые я могу вызвать в своей программе), но они привязаны к DE, можно ли как-то это унифицировать?

Или задача в принципе имеет другое решение?

★★★★★

Т.к. ты никаких данных о своей «программе» не предоставил, то предлагаю import getpass.

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

Если это важно — программа будет на C++, GUI будет (и да, это одна из причин, по которым я не хочу её целиком погружать в sudo, вторая причина — root нужен только для некоторых операций).

import getpass

Питонолиба?

hobbit ★★★★★
() автор топика
Последнее исправление: hobbit (всего исправлений: 1)

На чем программа?

ananas ★★★★★
()

Первое, что приходит в голову - выделить всю рутоспецифичную бодягу в отдельный процесс и вызывать его при необходимости. Как тогда организовать запрос пароля? Да, есть вроде как для этого всякие kdesudo (которые я могу вызвать в своей программе), но они привязаны к DE, можно ли как-то это унифицировать?

this. Кроме kdesu есть ещё gtksu (вроде так называется), делаешь зависимостью наличие одного из этих пакетов в системе

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

Из бубунты gksudo выпилили. Среднестатистическому пользователю бубунты не под силу поставить этот пакет из стороннего репозитория.

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

man 8 polkit, нет?

Насколько я знаю, это, фактически, просто способ «выделить всю рутоспецифичную бодягу в отдельный процесс и вызывать его при необходимости» (со стандартизированным и гибким администрированием доступа к нему). Однако если нужно выполнять какие-либо стандартные действия, этот отдельный процесс мог уже кто-нибудь написать. Можно начать его искать с просмотра политик на собственной машине в /usr/share/polkit-1/actions или использовать polkit-explorer.

Я, впрочем, ни разу не писал клиентов для polkit.

Однако polkit даёт ответ на вот этот вопрос, по крайней мере:

Да, есть вроде как для этого всякие kdesudo (которые я могу вызвать в своей программе), но они привязаны к DE, можно ли как-то это унифицировать?

Программа pkexec

proud_anon ★★★★★
()
Ответ на: комментарий от TheKnight
function LinuxBinary(instance, end) {
  var index = 0;
  // We used to prefer gksudo over pkexec since it enabled a better prompt.
  // However, gksudo cannot run multiple commands concurrently.
  var paths = ['/usr/bin/kdesudo', '/usr/bin/pkexec'];
  function test() {
    if (index === paths.length) {
      return end(new Error('Unable to find pkexec or kdesudo.'));
    }
    var path = paths[index++];
    Node.fs.stat(path,
      function(error) {
        if (error) {
          if (error.code === 'ENOTDIR') return test();
          if (error.code === 'ENOENT') return test();
          end(error);
        } else {
          end(undefined, path);
        }
      }
    );
  }
  test();
}

Какой-то петух на самокате создал целый пакет для того чтобы запускать бинарники.

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

а если их нет? потом вот выкусывать из пакетов эту пое-нь.

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

kdesu есть ещё gtksu

Активно выпиливают из дистров. Агитируют за использование polkit.

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

Какой-то петух на самокате создал целый пакет для того чтобы запускать бинарники.

Ты знаешь, почитав эту тему, я его начинаю слегонца понимать. Подозреваю, что есть ещё наверняка дистры без polkit. Только колёс к самокату надо приделать побольше (кроме pkexec и kdesudo).

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

Подозреваю, что есть ещё наверняка дистры без polkit.

Или он может присутствовать, но не быть установленным. У меня так.

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

Или он может присутствовать, но не быть установленным.

У некоторых даже dbus не установлен.

anonymous
()

с точки зрения потенциального конечного пользователя твоей программы, я бы предпочёл следующий интерфейс:

+-------------------------------------+
| System configuration changes needed |
+-------------------------------------+
| Please run the following commands   |
| as root in order to enable juggling:|
|                                     |
| sysctl -w kernel.juggling=1         |
| echo red green blue > /proc/balls   |
|                                     |
|               [ OK ]                |
+-------------------------------------+

где, естественно, строчки можно скопировать.

так я (1) буду знать, что у меня в системе происходит и (2) воспользуюсь релевантным механизмом получения прав рута, а тебе не надо будет ничего об этом знать.

anonymous
()

Единственный вменяемый вариант - это собрать всю хрень, которая требует прав рута, в один бинарник и запускать его из своего софта при помощи [inline]su -c[/inline] (потому что sudo в системе может вообще отсутствовать — скажем, в генте "из коробки" его нет — или пользователь может не входить в группу sudoers; правда, он может и в wheels не состоять, но это уже проблема пользователя).

А всякие dbus’ы с polkit’ами — хипстерское говно, на которое серьезному человеку ни в коем случае нельзя ориентироваться!

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