Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #73, ЯНВАРЬ 2005 г.

Забавы с OpenSSH

Anton Karpov

Хакер, номер #073, стр. 073-104-2


Можно, конечно, ограничить доступ по ssh с определенных адресов, но если подобное ограничение неприемлемо (кто знает, где я окажусь завтра?), можно воспользоваться авторизацией по ключам.

Авторизация по ключам обладает следующими основными преимуществами:

1. Позволяет аутентифицироваться на удаленном хосте по ssh без ввода пароля. Например, очень часто ssh используют в скриптах автоматического резервирования системных и пользовательских файлов, которые себе дороже передавать по сети в открытом виде. Разумеется, эти скрипты запускаются автономно и не должны требовать вмешательства админа для введения пароля. Да и вообще, по сто раз на дню вбивать пароли - то еще удовольствие.

2. Позволяет избежать возможности отслеживания вводимого пароля кейлоггерами в случае, когда ты логинишься в свою систему с недоверенной машины (или просто тебя хакнули ;).

Для работы потребуются два ключа: публичный и секретный (приватный). Генерирует их утилита ssh-keygen(1). Протокол SSHv1 позволяет использовать только rsa-ключи, тогда как в SSHv2 доступны алгоритмы rsa и dsa. Честно говоря, с практической точки зрения нет большой разницы в том, какой алгоритм ассиметричного шифрования, RSA или DSA, использовать, однако существует мнение, что rsa работает побыстрее и, как утверждает одна моя знакомая любительница криптографии, более стоек к взлому. На локальной машине (клиенте) сгенерируем rsa-ключ длиной в 2048 бит и сохраним его в файле ~./ssh/myserver_rsa:

client:~$ ssh-keygen -t rsa -b 2048 -f .ssh/myserver_rsa

Generating public/private rsa key pair.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in .ssh/myserver_rsa.

Your public key has been saved in .ssh/myserver_rsa.pub.

The key fingerprint is:

a6:1d:4a:98:7f:4a:93:aa:38:d6:4f:b5:2b:39:6c:64 toxa@laptoxa.toxa.lan

В результате мы получили пару ключей: секретный (myserver_rsa) и связанный с ним публичный (myserver_rsa.pub). Обрати внимание на права доступа:

client:~$ ls -l .ssh/puffyhost_rsa*

-rw------- 1 toxa 1743 2004-10-02 13:14 .ssh/myserver_rsa

-rw-r--r-- 1 toxa 403 2004-10-02 13:14 .ssh/myserver_rsa.pub

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

Переправив myserver_rsa.pub на сервер, его следует добавить в список авторизованных ключей. Для протокола SSHv2 таковым по умолчанию является $HOME/.ssh/authorized_keys:

server:~$ cat myserver_rsa.pub > > ~/.ssh/authorized_keys

Наконец, на сервере должна быть поддержка авторизации по ключам. Для SSHv2 ей соответствует строчка «PubkeyAuthentication yes» в /etc/ssh/sshd_config. Если требуется параноидальная безопасность, авторизацию по системному паролю можно теперь отключить («PasswordAuthentication no») в том же конфиге. В моем примере я так и сделал. Теперь пробуем зайти на сервер:

Назад на стр. 073-104-1  Содержание  Вперед на стр. 073-104-3