# Руководство пользователя &kdesu;

&Geert.Jansen; &Geert.Jansen.mail;
Екатерина
Пыжова

    haleth@yandex.ru

Перевод на русский язык
Виктор
Ерёмин

    ErV2005@rambler.ru

Перевод на русский язык
2000
Геерт Янсен (Geert Jansen)
&FDLNotice;
2005-06-07
1.00.00

&kdesu; представляет собой графическую оболочку к команде &UNIX;`su`.

KDE
su
пароль
root

## Введение

Добро пожаловать в &kdesu;! Эта программа представляет собой графическую оболочку к команде &UNIX; `su` для среды &kde;. Она позволяет вам запускать программы от имени другого пользователя, если вы укажете ей пароль этого пользователя. &kdesu; является непривилегированной программой и пользуется системной программой `su`.

&kdesu; предлагает ещё одну дополнительную возможность — запоминание паролей. Чтобы использовать её, вам нужно ввести пароль всего один раз для каждой команды. Подробности и анализ безопасности смотрите в разделе .

Эта программа рассчитана на запуск из командной строки или из файлов `.desktop`. Хотя она спрашивает пароль пользователя root, используя графический интерфейс, мне кажется, что она скорее основана на слиянии командной строки и графического интерфейса, а не просто на графическом интерфейсе.

## Использование &kdesu;

Использовать &kdesu; просто. Синтаксис вызова следующий:

    kdesu -c -d -f  файл -i  имя_значка -n -p  приоритет -r -s -t -u  пользователь --nonewdcop команда аргумент1 аргумент2

    kdesu специфические параметры &kde; специфические параметры Qt

Параметры командной строки описаны ниже.

`-c программа`

  Указать программу для запуска с правами root. Это должен быть один аргумент. Поэтому, если вы хотите запустить новый файловый менеджер, вам следует ввести следующее: ``kdesu `-c kfm -sw```.

`-d`

  Выводить отладочную информацию.

`-f файл`

  Этот параметр позволяет эффективно использовать &kdesu; в файлах `.desktop`. При этом &kdesu; проверяет файл, указанный в параметре `файл`. Если он доступен для записи текущему пользователю, &kdesu; запустит команду с правами этого пользователя. Иначе команда будет запущена с правами пользователя `пользователь` (root по умолчанию).

  `файл` анализируется следующим образом: если этот параметр начинается с `/`, то он считается абсолютным путём. Иначе — именем глобального файла конфигурации &kde;. Например, чтобы настроить менеджер входа в систему kdm, вам следует набрать `kdesu `-c kdmconfig -f kdmrc``.

`-f` имя_значка

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

  Например, чтобы запустить `kfmclient` и использовать значок &konqueror; в диалоге пароля, введите команду:

      kdesu  -i konqueror kfmclient

`-n`

  Не сохранять пароль. Делает недоступным флажок Сохранить пароль в окне ввода пароля.

`-p` приоритет

  Устанавливает приоритет выполнения программы. Для указания приоритета используется целое число от 0 до 100, где 100 соответствует максимальному приоритету, и 0 — минимальному. По умолчанию используется 50.

`-r`

  Использовать приоритет реального времени.

`-s`

  Остановить сервис kdesu. Подробности в разделе .

`-t`

  Разрешить терминальный вывод. Это делает невозможным запоминание паролей. В основном эта возможность служит для отладки. Если вы хотите запустить обычное консольное приложение, пользуйтесь стандартным `su`.

`-u` пользователь

  Хотя чаще всего &kdesu; используется для запуска команд с правами root, вы можете указать имя пользователя и соответствующий пароль.

## Внутренние особенности

### Аутентификация в X

Запускаемая вами программа будет работать с идентификатором пользователя root и, в общем случае, не будет иметь прав для доступа к вашему дисплею X. &kdesu; исправляет это, добавляя cookie аутентификации для вашего дисплея во временный файл `.Xauthority`. После завершения выполнения команды файл удаляется.

Если вы не используете систему X cookie, то &kdesu; обнаружит это и не будет добавлять новый cookie, однако никакой гарантии, что root получит доступ к вашему дисплею, не даётся.

### Взаимодействие с `su`

&kdesu; использует системную команду `su`, чтобы получить привилегированный доступ. В этом разделе разъясняется, как &kdesu; это делает.

Так как некоторые реализации `su` (например в &RedHat;) не позволяют задавать пароль из `stdin` (стандартного потока ввода), &kdesu; создаёт пару pty/tty и запускает `su` с файловыми дескрипторами, настроенными на этот tty.

Чтобы выполнить программу, которую выбрал пользователь, а не запустить оболочку интерактивно, используется параметр `-c` для `su`. Этот аргумент понимается всеми известными оболочками и должен быть переносимым. Команда `su` передаёт аргумент `-c` оболочке пользователя, которая и запускает программу на исполнение. Это выглядит так: `su `root -c программа``.

Вместо прямого запуска команды пользователя через `su`, &kdesu; запускает небольшую программу, называемую kdesu_stub. Она (запущенная с правами требуемого пользователя) запрашивает определённую информацию от &kdesu; через канал pty/tty (потоки ввода и вывода для этой программы), а затем уже выполняет программу пользователя. Передаваемая информация: номер X-дисплея, X cookie для аутентификации (если доступен), переменная `PATH` и команда для запуска. Такая вспомогательная программа нужна, потому что X cookie содержит секретную информацию и поэтому не может быть передан в командной строке.

### Проверка пароля

&kdesu; проверяет введённый вами пароль и выдаёт сообщение об ошибке, если он не верен. Проверка организована с помощью выполнения программы-теста `/bin/true`. Если это возможно, то пароль считается правильным.

### Хранение паролей

Для вашего удобства в &kdesu; реализован механизм хранения паролей. Если вас интересуют вопросы безопасности, прочитайте этот раздел.

Запоминание паролей в &kdesu; создаёт небольшую дыру в системе безопасности вашей системы. Очевидно, что &kdesu; не позволяет никому, кроме пользователей с вашим идентификатором пользоваться этими паролями. Однако если это реализовать без предосторожностей, системный уровень безопасности root понизится до уровня обычного пользователя (вас). И человек, который получит доступ к вашей учётной записи, получит доступ уровня root. &kdesu; пытается не допустить этого. Схема безопасности, используемая им, на мой взгляд, достаточно безопасна.

&kdesu; использует сервис под названием kdesud. Этот сервис ожидает команды с &UNIX;-сокета, расположенного в `/tmp`. Режим его доступа равен 0600, то есть только пользователь с вашим идентификатором может соединиться с ним. Если хранение паролей включено, &kdesu; выполняет команды через этот сервис. Он пишет команды и пароль пользователя root в сокет, и сервис выполняет команду `su`, как описано выше. После этого команда и пароль не теряются, а хранятся в течение указанного времени (устанавливается в модуле настройки). Если другой запрос на запуск такой же команды приходит в течение этого периода времени, клиент может не предоставлять пароль. Чтобы не дать человеку, получившему доступ к вашей учётной записи, украсть у сервиса пароль (например, запуском отладчика), sgid сервиса (группа при запуске) установлен в nogroup. Это не даёт обычным пользователям, в том числе и вам, получать пароли от процесса kdesud. Также этот сервис устанавливает переменную окружения `DISPLAY` в значение при запуске. Все, что сможет сделать взломщик — это запустить на вашем дисплее приложение.

Слабое место в этой схеме в том, что запускаемые программы могут быть написаны без соблюдения правил защиты (например, программы с setuid root). Это означает, что они могут вызвать переполнение буферов или другие проблемы, а взломщик может использовать это.

Использование хранения паролей — это компромисс между безопасностью и удобством. Подумайте и решите, что вам больше важно, и решите, будете ли вы им пользоваться.

## Автор

&kdesu;

© &Geert.Jansen;, 2000

&kdesu; написал Геерт Янсен (Geert Jansen). Эта программа основана на &kdesu;, версии 0.3, написанной Пьетро Иглио (Pietro Iglio). Мы договорились, что я буду проводить дальнейшую поддержку этой программы.

С автором можно связаться по адресу &Geert.Jansen.mail;. Пожалуйста, сообщайте мне о всех встреченных ошибках, чтобы я мог их исправить. Также жду любых предложений и комментариев.

&underFDL; &underArtisticLicense;