KDE su использует системную команду su, чтобы получить привилегированный доступ. В этом разделе подробно объясняется то, как KDE su это делает.
Так как некоторые реализации команды su (например, в Red Hat®) не позволяют вводить пароль, используя stdin
, KDE su создаёт пару терминалов pty/tty и запускает su с его стандартными файловыми дескрипторами, настроенными на такой tty.
Чтобы выполнить программу, которую выбрал пользователь, а не запустить оболочку интерактивно, для команды su используется аргумент -c
. Этот аргумент понимается всеми оболочками, соответственно, он должен быть переносимым. Команда su передаёт аргумент -c
оболочке пользователя, которая и запускает программу на исполнение. Пример: su root -c
.программа
Вместо прямого запуска команды пользователя через su, KDE su запускает небольшую программу, называемую kdesu_stub. Она (запущенная с правами требуемого пользователя) запрашивает определённую информацию от KDE su через канал pty/tty (stdin и stdout для этой программы), а затем уже выполняет программу пользователя. Передаваемая информация: номер X-дисплея, авторизационный X cookie (если доступен), переменная PATH
и команда для запуска. Такая вспомогательная программа нужна, потому что X cookie содержит секретную информацию и поэтому не может быть передан в командной строке.