Я пишу панель для администрирования nginx (домены, переписывает и т. Д.), Svn и других сервисов. Для этого я пишу бэкэнд, который будет работать с root (для изменения конфигураций nginx, их перезагрузки, изменения паролей пользователей и т. Д.) И клиента (консольный клиент и веб-приложение).
Приложение работает на сокетах Unix, и я сделал для него очень простой протокол:
\0\0\0\0user\0key\0module\0command\0data\0
Ну, это довольно просто. Клиент отправляет команду и данные на сервер, fox ex:
\0\0\0\0morsik\0\0nginx\0add_domain\0www.domain.tld something\0
Проблема в том, как подтвердить, что пользователь действительно morsik? Для веб-интерфейса мне не нужно - у веб-страницы есть собственная авторизация, поэтому я могу послать ключ, который будет работать для каждого пользователя, которого никто не узнает.
Проблема в том, если кто-то имеет доступ к SSH. Затем он мог бы написать простой клиент, который будет подделывать имя пользователя, а затем он мог изменить другую конфигурацию пользователя.
Итак, как мне сделать правильную авторизацию для пользователей?