<?xml version="1.0" ?> <!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [ <!ENTITY kappname "&kdesu;"> <!ENTITY package "kdebase"> <!ENTITY % addindex "IGNORE"> <!ENTITY % Russian "INCLUDE" > <!-- change language only here --> ]> <book lang="&language;"> <bookinfo> <title >Справочное руководство по &kdesu;</title> <authorgroup> <author >&Geert.Jansen; &Geert.Jansen.mail;</author> <othercredit role="translator" ><firstname >Екатерина</firstname > <surname >Пыжова</surname > <affiliation ><address ><email >haleth@yandex.ru</email ></address ></affiliation > <contrib >Перевод на русский</contrib ></othercredit > </authorgroup> <copyright> <year >2000</year> <holder >Геерт Янсен (Geert Jansen)</holder> </copyright> <legalnotice >&FDLNotice;</legalnotice> <date >2002-01-18</date> <releaseinfo >1.00.00</releaseinfo> <abstract ><para >&kdesu; представляет собой графическую оболочку к &UNIX;-команде <command >su</command >.</para ></abstract> <keywordset> <keyword >KDE</keyword> <keyword >su</keyword> <keyword >пароль</keyword> <keyword >root</keyword> </keywordset> </bookinfo> <chapter id="introduction"> <title >Введение</title> <para >Добро пожаловать в &kdesu;! Эта программа представляет собой графическую оболочку к &UNIX;-команде <command >su</command > для среды &kde;. Она позволяет вам запускать программы от имени другого пользователя, если вы передадите ей пароль этого пользователя. &kdesu; является непривилегированной программой и пользуется системным <command >su</command >.</para> <para >&kdesu; предлагает еще одну дополнительную возможность — запоминание паролей. Чтобы использовать ее, вам нужно ввести пароль всего однажды для каждой команды. Подробности и анализ безопасности смотрите по ссылке <xref linkend="sec-password-keeping"/>.</para> <para >Эта программа расчитана на запуск из командной строки или из файлов <filename >.desktop</filename >. Хотя она спрашивает пароль пользователя <systemitem class="username" >root</systemitem >, используя графический интерфейс, мне кажется, что она скорее основана на слиянии командной строки и графического интерфейса, а не просто на графическом интерфейсе.</para> </chapter> <chapter id="using-kdesu"> <title >Использование &kdesu;</title> <para >Использовать &kdesu; просто. Синтаксис следующий:</para> <cmdsynopsis ><command >kdesu</command > <arg >USER</arg > <arg >-n</arg > <arg >-t</arg > <arg >-q</arg > <arg >-d</arg > <arg >-f <replaceable >FILE</replaceable ></arg > <arg >-c <group > <arg > <replaceable >COMMAND</replaceable > <arg ><replaceable >ARG1</replaceable ></arg > <arg ><replaceable >ARG2</replaceable ></arg > <arg rep="repeat" ><replaceable ></replaceable ></arg > </arg > </group > </arg > </cmdsynopsis> <cmdsynopsis ><command >kdesu</command > <group > <arg >-v</arg > <arg >-h</arg > <arg >-s</arg > </group > </cmdsynopsis> <para >Параметры командной строки описаны ниже.</para> <variablelist> <varlistentry> <term ><option >-c <replaceable >PROGRAM</replaceable ></option ></term> <listitem ><para >Указать программу для запуска с правами root. Это должен быть один аргумент. Поэтому, если вы хотите запустить новый файловый менеджер, вам следует ввести следующее: <userinput ><command >kdesu <option >-c <replaceable >kfm -sw</replaceable ></option ></command ></userinput >.</para ></listitem> </varlistentry> <varlistentry> <term ><option >-f <replaceable >FILE</replaceable ></option ></term> <listitem ><para >Этот параметр позволяет эффективно использовать <filename >.desktop</filename >-файлы. При этом &kdesu; проверяет файл, указанный в <parameter >FILE</parameter >. Если он доступен для записи текущему пользователю, то &kdesu; запустит команду с правами этого пользователя. Иначе команда будет запущена с правами пользователя <parameter >USER</parameter > (root по умолчанию).</para> <para ><parameter >FILE</parameter > анализируется так: если этот параметр начинается с <literal >/</literal >, то он считается абсолютным путем. Иначе — именем глобального файла конфигурации &kde;. Например, чтобы настроить менеджер входа в систему <application >kdm</application >, вам следует набрать <command >kdesu <option >-c kdmconfig -f kdmrc</option ></command >.</para ></listitem> </varlistentry> <varlistentry> <term ><option >-t</option ></term> <listitem ><para >Разрешить терминальный вывод. Это делает невозможным запоминание паролей. В основном служит для отладки. Если вы хотите запустить обычное консольное приложение, пользуйтесь стандартным <command >su</command >.</para > </listitem> </varlistentry> <varlistentry> <term ><option >-n</option ></term> <listitem ><para >Не сохранять пароль. Делает недоступным флажок <guilabel >Сохранить пароль</guilabel > в окне ввода пароля.</para ></listitem> </varlistentry> <varlistentry> <term ><option >-q</option ></term> <listitem ><para >Не выводить никакой информации.</para ></listitem> <!-- Lauri: This could do with a little expansion. quiet as in no screen --> <!-- output, quiet as in no gui prompt for the password, or quiet as in no --> <!-- beeping? --> </varlistentry> <varlistentry> <term ><option >-d</option ></term> <listitem ><para >Выводить информацию для отладки.</para ></listitem> </varlistentry> <varlistentry> <term ><option >-v</option ></term> <listitem ><para >Вывести номер версии и завершить работу.</para ></listitem> </varlistentry> <varlistentry> <term ><option >-h</option ></term> <listitem ><para >Вывести небольшое описание.</para ></listitem> </varlistentry> <varlistentry> <term ><option >-s</option ></term> <listitem ><para >Остановить сервис kdesu. Подробности: <xref linkend="sec-password-keeping"/>.</para ></listitem> </varlistentry> </variablelist> </chapter> <chapter id="configuration"> <title >Настройка</title> <para >&kde; устанавливается с модулем настройки <application >kcmkdesu</application >. Его можно найти в <guimenu >Меню &kde;</guimenu > в подменю <menuchoice ><guisubmenu >Настройка</guisubmenu ><guisubmenu >KDE</guisubmenu ><guimenuitem >Безопасность</guimenuitem ><guimenuitem >Пароли</guimenuitem ></menuchoice >.</para> <variablelist> <varlistentry> <term ><guilabel >Отображать вводимый символ</guilabel ></term> <listitem ><para >Определяет режим отображения символов пароля. Можно выводить звездочку вместо каждого символа, три звездочки или вообще ничего не выводить. По умолчанию — одна звездочка вместо символа.</para ></listitem> </varlistentry> <varlistentry> <term ><guilabel >Запоминание паролей</guilabel ></term> <listitem ><para >Если флажок <guilabel >Помнить пароль</guilabel > установлен, &kdesu; будет запоминать введенные пароли. Время (в минутах), в течение которого вас не спросят повторно пароль, вводится в поле ниже. По умолчанию эта возможность не используется.</para ></listitem> </varlistentry> </variablelist> </chapter> <chapter id="Internals"> <title >Внутренние особенности</title> <sect1 id="x-authentication"> <title >Авторизация X</title> <para >Запускаемая вами программа будет работать с идентификатором пользователя root и, в общем случае, не будет иметь прав для доступа к вашему X-дисплею. &kdesu; исправляет это, добавляя авторизационный cookie для вашего дисплея во временный файл <filename >.Xauthority</filename >. После завершения команды, файл удаляется. </para> <para >Если вы не используете систему X cookie, то &kdesu; обнаружит это и не будет добавлять новый cookie, однако никакой гарантии, что root получит доступ к вашему дисплею, не дается.</para> </sect1> <sect1 id="interface-to-su"> <title >Взаимодействие с <command >su</command ></title> <para >&kdesu; использует системную команду <command >su</command >, чтобы получить привилегированный доступ. В этом разделе объясняются детали того, как &kdesu; это делает. </para> <para >Так как некоторые реализации <command >su</command > (например в &RedHat;) не позволяют задавать пароль из <literal >stdin</literal >, &kdesu; создает пару pty/tty и запускает <command >su</command > с его стандартными файловыми дескрипторами, настроенными на этот tty.</para> <para >Чтобы выполнить программу, которую выбрал пользователь, а не запустить оболочку интерактивно, используется параметр <option >-c</option > для <command >su</command >. Этот аргумент понимается всеми известными мне оболочками и должен быть переносимым. Команда <command >su</command > передает аргумент <option >-c</option > оболочке пользователя, которая и запускает программу на исполнение. Это выглядит так: <command >su <option >root -c <replaceable >the_program</replaceable ></option ></command >.</para> <para >Вместо прямого запуска команды пользователя через <command >su</command >, &kdesu; запускает небольшую программу, называемую <application >kdesu_stub</application >. Она (запущенная с правами требуемого пользователя) запрашивает определенную информацию от &kdesu; через канал pty/tty (stdin и stdout для этой программы), а затем уже выполняет программу пользователя. Передаваемая информация: номер X-дисплея, авторизационный X cookie (если доступен), переменная <envar >PATH</envar > и команда для запуска. Такая вспомогательная программа нужна, потому что X cookie содержит секретную информацию и поэтому не может быть передан в командной строке.</para> </sect1> <sect1 id="password-checking"> <title >Проверка пароля</title> <para >&kdesu; проверяет введенный вами пароль и выдает сообщение об ошибке, если он не верен. Проверка организована с помощью выполнения программы-теста <filename >/bin/true</filename >. Если это возможно, то пароль считается правильным.</para> </sect1> <sect1 id="sec-password-keeping"> <title >Хранение паролей</title> <para >Для вашего удобства в &kdesu; реализован механизм хранения паролей. Если вас интересуют вопросы безопасности, прочитайте этот раздел.</para> <para >Запоминание паролей в &kdesu; создает небольшую дыру в системе безопасности вашей системы. Очевидно, что &kdesu; не позволяет никому, кроме пользователей с вашим идентификатором пользоваться этими паролями. Однако если это реализовать без предосторожностей, системный уровень безопасности <systemitem class="username" >root</systemitem > понизится до уровня обычного пользователя (вас). И человек, который получит доступ к вашей учетной записи, получит доступ уровня <systemitem class="username" >root</systemitem >. &kdesu; пытается не допустить этого. Схема безопасности, используемая им, на мой взгляд, достаточно безопасна.</para> <para >&kdesu; использует сервис под названием <application >kdesud</application >. Этот сервис ожидаает команды с &UNIX;-сокета, расположенного в <filename >/tmp</filename >. Режим его доступа равен 0600, то есть только пользователь с вашим идентификатором может соединиться с ним. Если хранение паролей включено, &kdesu; выполняет команды через этот сервис. Он пишет команды и пароль пользователя <systemitem class="username" >root</systemitem > в сокет, и сервис выполняет команду <command >su</command >, как описано выше. После этого команда и пароль не теряются, а хранятся в течение указанного времени (устанавливается в модуле настройки). Если другой запрос на запуск такой же команды приходит в течение этого периода времени, клиент может не предоставлять пароль. Чтобы не дать человеку, получившему доступ к вашей учетной записи, украсть у сервиса пароль (например, запуском отладчика), sgid сервиса (группа при запуске) установлен в nogroup. Это не дает обычным пользователям, в том числе и вам, получать пароли от процесса <application >kdesud</application >. Также этот сервис устанавливает переменную окружения <envar >DISPLAY</envar > в значение при запуске. Все, что сможет сделать взломщик — это запустить на вашем дисплее приложение.</para> <para >Слабое место в этой схеме в том, что запускаемые программы могут быть написаны без соблюдения правил защиты (например, программы с setuid <systemitem class="username" >root</systemitem >). Это означает, что они могут вызвать переполнение буферов или другие проблемы, а взломщик может использовать это.</para> <para >Использование хранения паролей — это компромисс между безопасностью и удобством. Подумайте и решите, что вам больше важно, и решите, будете ли вы им пользоваться.</para> </sect1> </chapter> <chapter id="Author"> <title >Автор</title> <para >&kdesu;</para> <para >(C) 2000 Геерт Янсен (Geert Jansen)</para> <para >&kdesu; написал Геерт Янсен (Geert Jansen). Эта программа основана на &kdesu;, версии 0.3, написанной Пьетро Иглио (Pietro Iglio). Мы договорились, что я буду проводить дальнейшую поддержку этой программы.</para> <para >С автором можно связаться по адресу &Geert.Jansen.mail;. Пожалуйста, сообщайте мне о всех встреченных ошибках, чтобы я мог их исправить. Также жду любых предложений и комментариев.</para> &underFDL; &underArtisticLicense; </chapter> </book> <!-- Local Variables: mode: sgml sgml-omittag: nil sgml-shorttag: t End: -->