# &kppp; и безопасность

В основном этот раздел предназначен для суперпользователей (`root`), людей с высокими потребностями в безопасности и тех, кто просто интересуется безопасностью. Нет необходимости в прочтении этого материала тем, кто использует &Linux; дома, тем не менее, кое-какие знания можно почерпнуть и отсюда.

## Запрет на доступ к &kppp;

Системный администратор может ограничить доступ на использование &kppp;. Существует два способа для достижения этого.

### Разрешение на доступ на уровне привилегий группы

Создайте новую группу (назовите её, к примеру, `dialout` или как-нибудь в этом роде) и добавляйте в неё тех пользователей, кому разрешено использовать &kppp;. Затем наберите в командной строке:

    # chown root.dialout /opt/kde/bin/kppp
    # chmod 4750 /opt/kde/bin/kppp

Здесь подразумевается, что &kde; установлена в каталог `/opt/kde/` и что новая группа называется `dialout`.

### Запрет на доступ с непосредственным использованием &kppp;

С самого начала &kppp; проверяет, существует ли файл `/etc/kppp.allow`. Если такой файл существует, только перечисленные в нем пользователи могут использовать программу. Этот файл должен быть открыт для всех на чтение (но, конечно, НЕ запись.) Распознаваемыми являются только имена пользователей, вы не можете использовать UID в этом файле. Короткий пример:

    # /etc/kppp.allow
    # строки комментариев игнорируются,
    # как и пустые строки

    fred
    karl
    daisy

В приведённом примере только пользователи `fred`, `karl` и `daisy` могут использовать программу, а так же пользователи с UID 0 (нет необходимости добавлять суперпользователя в этот файл).

## У &kppp; присутствует SUID-бит. А безопасность?

Представляется невозможным написать программу дозвона без использования SUID-бита, безопасную и простую в использовании неопытными пользователями. В плане безопасности &kppp; использует следующую стратегию.

- Процессы программы &kppp; разветвляются в самом начале выполнения программы.

- Основной процесс, ответственный за операции с GUI (такие как взаимодействие с пользователем), теряет бит SUID после разветвления и выполняется с привилегиями обычного пользователя.

- Порождённый процесс сохраняет привилегии и отвечает за все действия, которым нужны привилегии `суперпользователя`. Для обеспечения безопасности этой части, в ней не используются вызовы библиотек &kde; и &Qt;, а только вызовы обычных библиотек. Исходный код этого процесса короток (около 500 строк) и хорошо документирован, его легко проверить на наличие дыр в безопасности.

- Головной и порождённый процессы взаимодействуют согласно стандартному IPC (взаимодействие процессов) ОС &UNIX;.

Особая благодарность выражается Harri Porten за написание этого замечательного участка программы. Задача казалась невыполнимой, но он сумел решить её за одну неделю.