Новости

Новости страны бэкапов

Новости Бэкапленд - #1 Ошибка в документации SSH или в алгоритме работы SSH.

Ошибка в документации или алгоритме работы SSH

При работе с SSH ключами разработчики компании Бэкапленд столкнулись с ошибкой подключения к удаленному серверу. Она возникает в случае, когда на сервере появляется пользователь с UID и GID равным 0, не являющийся root-пользователем.

В «/etc/passwd» это выглядит следующим образом:

  • root:x:0:0:root:/root:/bin/bash
  • atest:x:0:0::/var/www/dev/data:/bin/bash

У каждого пользователя в своей домашней директории имеется приватный и публичный ключи, сгенерированные для каждого из них отдельно. В «man ssh» написано что: «The default is ~/.ssh/id_rsa for protocol version 2». При подключении к удаленному серверу ключ берется из «~/», то есть, из домашней директории пользователя.

С этого места и проявляется найденная ошибка. Если на сервере авторизоваться как пользователь «su atest» и подключиться к удаленному серверу, где ранее размещен публичный ключ пользователя «atest», то произойдёт ошибка.

Разработчики смогли выяснить, что SSH берет ключ не от пользователя «atest», а от root-пользователя, что в корне не верно. Для наглядности некорректной работы алгоритма можно набрать команду «cd ~». Сразу становится видно, что домашняя папка пользователя «atest» - это «/var/www/dev/data», следовательно, ключ нужно брать из «/var/www/dev/data/.ssh/id_rsa».

Так же в переменных окружения указано следующее:

  • HOME=/var/www/dev/data
  • LOGNAME=atest
  • PWD=/var/www/dev/data

Отсюда следует, что SSH не умеет корректно работать с корневой папкой пользователя при совпадении UID и GID у нескольких подключившихся к серверу. Возможно, так изначально задумано, но тогда документация к SSH не точна и «~/» берется от первого попавшегося юзера с таким же UID и GID.

Проверялась эта ошибка на следующих версиях: OpenSSH_7.4p1 и OpenSSH_6.7p1.

Чтобы устранить ошибки в работе сервиса в BackupLand стали использовать параметр «-i» для четкого указания местоположения ключа: