Подключение из Windows к Linux по SSH с приватным ключом и паролем, безопасный SUDO

30 August 2019

Конфигурирование подключения по SSH с ключом и паролем, не такая уж и травильная задача для многих, системных администраторов, тем более пользователей, которые только начинают осваивать Linux.

Посмотрев в сети инструкции создания приватного и публичного ключа подключения по SSH, мне стало понятно, что они в большинстве своём перепечатка одного мануала, как из Linux подключиться по SSH к другому Linux.

Конфигурирование SUDO во многих инструкциях, сводится к разрешению пользователю делать, что угодно и где угодно.

Во многих инструкциях, предлагается генерировать файлы приватных ключей именно на том компьютере к которому вы в последствии будете подключаться.

Это обусловлено тем что на Linux системах процедура создания ключей, сводиться к паре команд, логически проста и понятна даже простым пользователям Linux не занимающихся системным администрированием.

Если ваш компьютер уже скомпрометирован в плане безопасности, такие действия позволят злоумышленникам получить неограниченный доступ к системе. Учитывая это условие, приватные ключи необходимо создавать на том компьютере с которого вы будете подключаться к удаленной системе. Это позволит отсечь возможность управлять вашей системой, злоумышленникам, даже в случае раннего проникновения в систему, на этапе установки.

Подключение из Windows машины к Linux, редко в каком мануале рассматривается с позиций:

1. Простоты создания приватных ключей

2. Понятности

3. Возможности зайти на Linux как root

4. Настройка безопасного SUDO

Вся приведённая здесь информация, покажет вам один из способов сделать ваш Linux защищенным и легко администрируемым.

За основу взят, Debian 9.6 64 бит, в любой другой Linux системе команды и последовательность действий будет схожа с теми что приведены здесь.

Самое первое что сделаем, это установим необходимый софт, Putty и MobaXterm на компьютер под управлением Windows.

Подключаемся к нашему серверу или рабочей станции Linux при помощи PuTTY, как обычный пользователь.

Подключайтесь к Linux при помощи MobaXterm, создав новую SSH сессию, как показано на рисунке,

xex@samps:~$

Выполняем команду:

mkdir ~/.ssh

На Windows машине, там, где установлена программа PuTTY находиться генератор приватных ключей, puttygen.exe. Рекомендую запускать его от администратора или используйте MobaXterm генератор ключей MobaXterm SSH Key Generator

Создайте каталог где будет расположен ваш приватный ключ для подключения к Linux, используйте только английские буквы в названии, если у вас Windows установлен русской версии, то располагайте такой файл в корне любого диска, чтоб избежать ошибок в дальнейшем.

Запустите puttygen.exe. Нажимайте кнопку «Генерировать» и перемещайте курсор мыши в окне программы, до появления диалогового окна в котором будет находиться вновь созданный ключ.

Создайте надежный пароль не менее 16 символов любым генератором паролей, крайне не рекомендую вам придумывать пароль самостоятельно, людям свойственно упрощать пароли чтоб легче их запомнить. Вам же нужно будет, записать вновь созданный пароль в нескольких местах чтоб не забыть, очень важно так же менять пароли каждые 3-6 месяцев спустя.

Заполнив окошки ввода парольной фразы и повторения пароля, нажимайте кнопку «Сохранить сгенерированные ключи».

«Открытый ключ» сохраните в предварительно созданной для этого каталог под названием «authorized_keys»

«Личный ключ» сохраните в предварительно созданной для этого каталог под названием

«id_rsa.pub»

Окно генератора ключей не закрываем. Выглядеть все это будет вот так:

Переходим в программу MobaXterm и в левой части, диспетчера файлов открываем каталог .ssh

Загрузите в открытый каталог .ssh ваш файл «authorized_keys» нажав на зелёную стрелку, направленную в верх.

Теперь проверим какие файлы есть в каталоге .ssh , выполните команду:

ls -la ~/.ssh/

В ответ консоль выдаст вам информацию о тех файлах, которые расположены в каталоге .ssh

Если файл «authorized_keys» находиться в каталоге .ssh , можно продолжать, если у вас нет этого файла повторите предыдущие шаги.

Как вариант, вы можете создать пустой файл в каталоге .ssh назвав его «authorized_keys» в текстовом редакторе, например, выполнив следующие команды:

cd .ssh

nano authorized_keys

Если вы успешно проделали все операции, то откройте файл «authorized_keys» на редактирование, выполнив команды:

cd .ssh

nano authorized_keys

Для тех кто создал файл «authorized_keys» самостоятельно, заметка : У вас этот файл откроется на редактирование в момент его создания, не закрывайте его и переходите к следующему этапу.

Это общие действия не зависимо от того как вы создали файл «authorized_keys».

Из окна генератора приватных ключей, помните я просил его не закрывать, копируете значение ключа «authorized_keys».

И вставляете полученные значения в окно, открытое в редакторе на Linux компьютере, разумеется прежние значения файла «authorized_keys», необходимо удалить (стереть).

Сохраните внесенные изменения, следующими командами, для редактора «nano»

CTRL x

При запросе под каким именем сохранять файл, нажмите клавишу:

Y

Обязательно выставьте правильные права доступа на файл приватного ключа и каталог «.ssh», следующими командами:

chmod 700 /home/USER/.ssh

chmod 600 /home/USER/.ssh/authorized_keys

Прошу обратить внимание !
В команде слово «USER» меняете на имя вашего пользователя в Linux, написав его в нижнем регистре, то есть маленькими буквами.

Теперь открываем доступ по SSH с применением ключей авторизации.

Создаём копию файла настроек SSH, следующей командой:

cp /etc/ssh/sshd_config /home/ВАШ ПОЛЬЗОВАТЕЛЬ/sshd_config.backup

Разумеется, «Ваш пользователь» меняете на имя вашего пользователя Linux.

Теперь нужно получить «root» доступ к системе, сделаем это командой:

su –

Обратите внимание что команда пишется именно с дефисом через пробел.

Введите пароль «root»

Вы увидите стандартную решётку «#» в терминале означающую что у вас есть «root» привилегии.

Откройте для редактирования файл «sshd_config» командой:

nano /etc/ssh/sshd_config

Найдите строку со значением «PubkeyAuthentication yes» и уберите значек решетки «#» в начале строки, сохраните значения выходя из файла, команды:

Ctrl x

Y

Теперь можно перезагрузить Linux и авторизоваться по ключу и паролю, перезагружайте:

shutdown –r now

или перезапускаем ssh server:

systemctl restart ssh || systemctl restart sshd

Обратите внимание чтоб применить эту команду вы должны быть в системе с «root» привилегиями, то есть в терминале в строке приглашения, значок решётка «#». Надеюсь, что перезагрузить систему вы справитесь.

Сейчас не рекомендую вам, закрывать возможность авторизации в Linux при помощи обыкновенного, логина и пароля. Сначала необходимо проверить как работает авторизация по приватным ключам, чтоб не потерять доступ к удалённой Linux машине.

Настроим программу удалённого подключения к Linux, с применением приватных ключей.

Сделаем это в PUTTY, откройте вкладку «Соединение - SSH - Аутентификация»

Выбирайте файл, с секретным ключом, который, должен располагаться только на вашем компьютере, никогда не сохраняйте такой файл в сети интернет, на файл хранилищах или подобных сервисах. Этот файл следуя приводимой инструкции был сохранён под названием «id_rsa.pub» в каталоге, который был предварительно создан для хранения приватных ключей.

Жмите кнопку «Обзор» , вы можете не увидеть ваш сохраненный файл с ключом, выставляйте значения в окне как показано на картинке, Имя файла «Все файлы» это позволит показать проводнику Windows все файлы расположенные в каталоге. Выбирайте «id_rsa.pub» и жмите кнопку «открыть»

В строке выбора файла, появиться полный путь до него,

Нажмите в меню «Разделы» на вкладку «Сеанс»,

В строке «Имя хоста (или IP-адрес)» укажите ваш IP адрес удалённого компьютера Linux,

В окне «Управление сеансами» укажите название соединения, нажмите кнопку «Сохранить»

Теперь у вас в окне «Управление сеансами» появилась новая конфигурация соединения.

Чтоб подключиться к удаленному компьютеру Linux жмите кнопку «Соединиться»

Появиться стандартное приглашение для ввода имени пользователя, после того как вы введете имя пользователя, станет доступна информация о используемом ключе и предложение ввести пароль.

После ввода пароля вы окажетесь в системе.

Теперь можно отключить возможность авторизоваться по обычному логину и паролю, оставим возможность входить в систему только с помощью SSH по приватному ключу, защищенному паролем.

Выполните команду чтоб стать пользователем «root»

su -

Отредактируйте файл «sshd_config», внеся в него следующее правки:

nano /etc/ssh/sshd_config

Закрыть авторизацию по обычным имени и паролю:

Найдите строку «#PasswordAuthentication yes» чуть ниже где есть свободное место допишите новый параметр:

PasswordAuthentication no

Без знака решетки перед значением, получиться как на рисунке.

Сохраните результат, как выходить из текстового редактора «nano» написано выше.

Теперь можно перезагрузиться и попробовать авторизоваться в Linux под пользователем «root».

Вы получите ошибку авторизации вот такого вида, это именно то что нам нужно, теперь Linux стал доступен только обыкновенному пользователю, входящему с приватным ключом и паролем.

Теперь проверим авторизацию простого пользователя, по имени и паролю, без приватного ключа, как видим Linux не пропускает таких визитеров.

На этом этапе можно ограничиться внесенными изменениями в систему безопасной авторизации в Linux, но в начале статьи была поставлена задача обеспечить пользователю «root», авторизацию по приватному ключу с парольной фразой.

Для чего это нужно и безопасно ли это?

Сама возможность работы под «root» подразумевает что пользователь понимает, что он делает, внося изменения в конфигурационные файлы Linux. Как вы заметили в этой статье использование команды «su -», позволяет выполнять большинство действий по управлению системой, пользователь оказывается даже в рабочем окружении «root», что не происходит при применении команды «sudo».

Решаем, что мы очень внимательные пользователи и работая напрямую из под «root», не сломаем Linux, откроем авторизацию по SSH с помощью приватных ключей и парольной фразы для супер пользователя «root»

Авторизуемся в Linux, становимся «root», при помощи команды:

su -

Вносим изменения в «sshd_config»

nano /etc/ssh/sshd_config

Добавим следующие значение «PermitRootLogin without-password», следом за значением, которое мы уже внесли в конфигурацию, по тексту выше, это значение «PasswordAuthentication no». Оставив пустую строку, под новым значением, получиться как на рисунке.

Теперь добавим пользователю «root», отдельный файл с ключом авторизации и паролем.

Чтоб у нас была возможность загрузить в Linux необходимый файл нам нужно подключиться к системе с помощью программы MobaXterm, при подключении вы возможно получите сообщение что программа не может вас соединить с Linux, хотя при помощи, PuTTY можно прекрасно соединяться с удаленной системой. Для решения этой проблемы отредактируем файл «id_rsa.pub» при помощи генератора приватных ключей программы MobaXterm,

Откройте генератор ключей находящийся в «Tools» - «MobaKeyGen (SSH key generator)»

Выбирайте в меню «Conversions» далее «Import key», ваш файл «id_rsa.pub», укажите ваш пароль и генератор откроет файл ключа на редактирование.

Какие-либо правки вносить в файл ключа нет необходимости, нужно просто сохранить ключ «id_rsa.pub», в том формате который понимает MobaXterm, нажимаете кнопку «Save private key» и сохраняете файл ключа в тот же каталог где у вас находятся приватные ключи, но разумеется под другим именем в формате «ppk».

В MobaXterm создаёте новую SSH сессию указав IP адрес и вновь сохраненный приватный ключ, в меню «Advanced SSH settings» - «Use private key», сохраняем изменения, при подключении вводим имя пользователя и пароль приватного ключа.

Теперь в MobaXterm получим привилегии «root» пользоваться , знакомой уже командой «su -».

Выполните следующие команды:

mkdir ~/.ssh

Убеждаемся, что каталог .ssh создан и пустой:

ls -la ~/.ssh/

Создаём файл приватного ключа, следующей командой:

nano ~/.ssh/authorized_keys

Заполняем любой буквой или цифрой, сохраняем изменения при выходе

Проверим, что создан:

ls -la ~/.ssh/

Создайте дополнительную отдельную папку для файлов приватных ключей, которые будет использовать пользователь «root».

Создаём файлы приватных ключей с парольной фразой для пользователя «root», чтоб не конвертировать файл в понятный формат программы MobaXterm, воспользуемся генератором ключей, который есть в программе MobaXterm. Меню у программы на английском языке, но я надеюсь вы поймете какие кнопки нужно нажимать по аналогии действий, описанных в этой инструкции для русской версии программы, генератора ключей которая прилагается к PuTTY.

Важное примечание, когда будете сохранять файл «id_rsa.pub» созданный в программе MobaXterm, обязательно выберите расширение файла «ppk».

После того как отредактируете файл «authorized_keys» не забудьте выставить права доступа на каталог и файл, команды для пользователя «root» будут отличаться от тех что вы использовали в случае с обычным пользователем.

Не пропустите этот шаг!

Вот нужные команды:

chmod 700 ~/.ssh

chmod 600 ~/.ssh/authorized_keys

Перезагрузите Linux.

Теперь в программах PuTTY и MobaXterm создайте новые конфигурации подключения, оставьте IP адрес прежним, а пути до файла приватного ключа укажите новые, так у вас «root» пользователь сможет авторизоваться с собственным паролем и файлом ключа.

Следующий этап — это конфигурирование доступа «SUDO».

Авторизуемся как пользователь «root» или используем команду «su –»

Установите в систему «sudo» следующей командой:

apt-get install sudo

Следующая команда может отличаться для разных сборок Linux, я привожу пример для Debian подобных систем. Для систем схожих с CentOS команда будет отлична, «sudo» поменяйте на «wheel»:

usermod -a -G sudo ВАШ ПОЛЬЗОВАТЕЛЬ

Эта команда добавит вашего пользователя в группу «sudo»

Внесем изменения в конфигурационный файл «visudo», командой:

visudo

ВАШ ПОЛЬЗОВАТЕЛЬ имя вашего компьютера=(root) PASSWD: /bin/su

Пример (gas xux.komp.loc=(root) PASSWD: /bin/su)

В вашем файле поменяйте «gas» на имя вашего пользователя, «xux.komp.loc» поменяйте на полное имя вашей системы Linux, имя системы можно посмотреть командой:

hostname –f

Перезагружайте систему, авторизовавшись обыкновенным пользователем вы сможете использовать «sudo», пароль для использования «sudo» тот же что и был у вашего обычного пользователя, до настройки авторизации по ключам с паролем.

Поздравляю! Вы проделали очень важную работу, ваша система стала надежно защищена от взлома. Удачи вам во всех начинаниях.