Мы используем Capistrano в некоторых системах в качестве системы развертывания. Новый системный администратор, который у нас есть, говорит, что наша установка действительно опасна, и я хотел бы знать, как ее исправить.
У нас есть пользователь развертывания с именем «foo», который мы используем для развертывания »:
cap deploy
Этот пользователь foo может перезапускать apache, очищать файлы tmp и так далее.
Проблема в том, что если кто-то украдет наш закрытый ключ ssh и получит доступ к нашим машинам в качестве пользователя foo, он сможет закрыть веб-сайт.
ssh foo@server <-- Able to shutdown apache!
Как мы можем решить эту дыру в безопасности?
Есть ли другие решения, которые следует учитывать?
если кто-то украдет наш закрытый ключ ssh и получит доступ к нашим машинам в качестве пользователя foo, сможет закрыть веб-сайт
Зашифруйте свои закрытые ключи SSH с помощью безопасной парольной фразы и не копируйте их на удаленные серверы.
Если кто-то получит ваш закрытый ключ, он будет бесполезен без парольной фразы.
Одна вещь, которую я хотел бы добавить, это то, что было бы лучше исключить foo guy из возможности входить в систему из ssh. Я имею в виду, чтобы подключиться к серверу как пользователь "superman", а затем использовать su foo
стать пользователем foo и выполнить любую команду, которую вы хотите
Используя этот способ, злоумышленнику нужны как пароль, так и закрытый ключ, чтобы иметь возможность использовать capistrano. Если он был закрытым ключом, он может подключиться к серверу, но не может выполнить capistrano. если у него есть пароль, он даже не может подключиться к серверу, потому что пользователю foo не разрешено входить в систему.
Если вы используете ключи SSH для аутентификации и кто-то их украдет, это будет такая же ситуация, как если бы кто-то украл пароль этой учетной записи; в обоих случаях он получит привилегии, связанные с этой учетной записью.
Вот почему SSH-доступ к общедоступному серверу должен не быть разрешенным из-за пределов сети вашей компании: таким образом, даже если кто-то знает пароль root, он просто не сможет использовать его для подключения к вашему веб-серверу.
Я надеюсь, что вы защищаете этот сервер с помощью брандмауэра, или, если это не удается, вы, по крайней мере, используете встроенный веб-сервер (IPTABLES в Linux, я бы предположил), чтобы разрешить трафик HTTP / S только извне. Если нет ... ну, сделай это. Сейчас.
На самом деле это не проблема capistrano, скорее ssh. Если вам разрешено входить в систему через ssh (с ключом или паролем), если злоумышленник найдет эти учетные данные, он также может делать то, что вам разрешено на этой машине. Ваш системный администратор должен установить границы того, что может делать ваша учетная запись развертывания (права доступа к файлам, разрешения на команды ...). Здесь есть хорошее пошаговое руководство, как защитить ssh для этой задачи. http://www.linuxjournal.com/article/8257
Вы уверены, что это проблема?
если кто-то украдет наш публичный ssh
Это будет закрытый ключ, а не открытый. Ваши административные пользователи, вероятно, проходят аутентификацию таким же образом, и это разумная настройка.
Вы должны защитить эти ключи в равной степени. Хост управления с закрытым ключом должен быть хорошо защищен брандмауэром и строго контролируемым доступом.
Есть несколько вариантов улучшения:
Вы можете полностью использовать двухфакторную аутентификацию, но это бесполезно, если вы не сделаете то же самое с вашим административным доступом.
Другой вариант - заставить capistrano использовать аутентификацию ssh-agent.
Если вы не используете capistrano ни для чего, кроме начального развертывания, вы можете заставить этого пользователя самоуничтожиться, IE удалит pubkey из каталога .ssh.