понедельник, 9 февраля 2015 г.

Настройка SSH для авторизации по ключам

И так, SSH (англ. Secure Shell — «безопасная оболочка») — сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений. Вданной статье пойдет разговор о настройке серверной части SSH.
Все команды выполнялись от прав пользователя root.
1. Устанавливаю SSH — 'apt-get install ssh'. После установки останавливаю его, ибо нужно сконфигурировать его под мои нужды - '/etc/init.d/ssh stop'.
2. Собственно редактирую конфиг SSH-сервера — 'nano /etc/ssh/sshd_config', до следующего вида:

# Package generated configuration file
# See the sshd(8) manpage for details

# What ports, IPs and protocols we listen for
# Меняем стандартный порт 22 для большей безопасности на 122 или иной
Port 122
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
# Указываем серверу работать лишь по 2 протоколу
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes

# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 768

# Logging
SyslogFacility AUTH
LogLevel INFO

# Authentication:
LoginGraceTime 120
# Запрещаем подключение к серверу по логину root
PermitRootLogin no
# Отключаем проверку прав пользователей в их домашних каталогах перед тем, как пустить на сервер
StrictModes no
# Разрешаем подключение только перечисленным пользователям
AllowUsers demon klim dethroner

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys

# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes

# To enable empty passwords, change to yes (NOT RECOMMENDED)
# Согласно рекомендациям запрещаем подключение пользователей с пустыми паролями
PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Change to no to disable tunnelled clear text passwords
# Отключаем вход на сервер по паролям
PasswordAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no

#MaxStartups 10:30:60
#Banner /etc/issue.net

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

Subsystem sftp /usr/lib/openssh/sftp-server

UsePAM yes

3. Генерирую ключи для каждого пользователя (в моем случае demon klim dethroner). Можно пользоваться средствами самой ОС – описано тут (пункт 2), но я пользуюсь PuTTYGen. Т.е. запускаю программу нажимаю кнопку «Generate» перемещаю курсор мышки по экрану для набора случайной статистики при генерации. Должно получиться что-то типа:
4. Далее сохраняю ключи в надежном месте, получаю файлы вида:
public
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20150209"
AAAAB3NzaC1yc2EAAAABJQAAAIB245BgWSXUf/qC8c5vytQBLp1B6dMO0cJ9YyUIIHcOwWYz
wLbmQynlTZGB6IKFmtqF+z6cHdzx9NE2Mn2hD9nb0ThG8NsS72FLpxGgfVhsMlKeKuGyR3EdV89tY
lgCKYLta+QXA/FPmMtXjldQ+z3xqWFSjp5waelbMJSNGVQSlw==
---- END SSH2 PUBLIC KEY ----
private.ppk
PuTTY-User-Key-File-2: ssh-rsa
Encryption: none
Comment: rsa-key-20150209
Public-Lines: 4
AAAAB3NzaC1yc2EAAAABJQAAAIB245BgWSXUf/qC8c5vytQBLp1B6dMO0cJ9YyUIIHcOwWYz
wLbmQynlTZGB6IKFmtqF+z6cHdzx9NE2Mn2hD9nb0ThG8NsS72FLpxGgfVhsMlKeKuGyR3EdV89tY
lgCKYLta+QXA/FPmMtXjldQ+z3xqWFSjp5waelbMJSNGVQSlw==
Private-Lines: 8
AAAAgDAyvf2L7L3usaq1DoBZJYPwTZdDHjZwtqGJDwNLbolw/+t3pBgpEPwYhxj9ZVjCPOo1bGjN1
hzmta4wJRfIJ+LwuBfU4U8x3JUaBRdHerhFlk3jLF8NAdVwi5QwCzCrCobZql+kpWX8QsvE5AXcsBT
USB19+OdBlTY4oeraMQodAAAAQQC2+r0kr3ovycrvHMLyQ8VB8yeWhg9yknpZiyEhJMJz2g7SNVI
KXLwbBxWVfgxa/ihtXp4LPngR9aR2KE4IuN3vAAAAQQCmVU8DVSq8EP/eLJMN9wKI/ceGIWMKHmFPDiL95HJUBl7FCoO4yWS6MI+bt+DVOB5jlRZuxs76cpdh7eqyIj3ZAAAAQQC216nt
eeUyXbQkF9tMPeHjKfpQ7B5JTnhHTQ43J5QJSGp2whVoRK5Zzry/DCcOhG3v/QEZiKw1eLutVJRt6QWN
Private-MAC: 5d1f912438f2712c6701170dd77b08ba6b5fa918
5. В домашней папке каждого пользователя, разрешенного в конфиге, создаю файл в домашней директории, где будет храниться публичный ключ, например - 'touch /home/dethroner/.ssh/authorized_keys'
6. Назначаю права на созданную папку .ssh - 'chown dethroner:dethroner /home/dethroner/.ssh' и 'chmod 700 /home/dethroner/.ssh'
7. Прописываю сгенерированный ключ в созданный файл - 'nano /home/dethroner/.ssh/authorized_keys ', получаю что-то типа:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIB245BgWSXUf/qC8c5vytQBLp1B6dMO0cJ9YyUIIHcOwWYz
wLbmQynlTZGB6IKFmtqF+z6cHdzx9NE2Mn2hD9nb0ThG8NsS72FLpxGgfVhsMlKeKuGyR3EdV89tY
lgCKYLta+QXA/FPmMtXjldQ+z3xqWFSjp5waelbMJSNGVQSlw== dethroner@server.ex
8. Назначаю права на файл - 'chmod 600 /home/dethroner/.ssh/authorized_keys'
9. Запускаю SSH - '/etc/init.d/ssh start'
10. Важно добавить правила в таблицу iptables например как у меня или так (пункт 3).
11. Добавляю указанных пользователей для обеспечения root доступа из-под sudo для это набираю - 'visudo' (файл /etc/sudoers откроется в редакторе по умолчанию) и добавляю:
# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root ALL=(ALL) ALL
demon ALL=(ALL) NOPASSWD: ALL
dethroner ALL=(ALL) NOPASSWD: ALL
klim ALL=(ALL) NOPASSWD: ALL

# Uncomment to allow members of group sudo to not need a password
# (Note that later entries override this, so you might need to move
# it further down)
# %sudo ALL=NOPASSWD: ALL
Затем жму 'ctrl+o', 'enter', 'ctrl+x' для сохранения изменений и выхода из редактора.
12. При использовании PuTTY для подключения к SSH-серверу указываю адрес и порт в программе:

 

Так же указываю путь к private.ppk



Нажимаю «Open» и подключаюсь к SSH-серверу. Ну или можно сохранить настройки, чтобы не вводить постоянно. После подключения к SSH-серверу в строке логин ввожу имя пользователя и попадаю в систему. Доступ с правами root осуществляется посредством sudo.