SSH — различия между версиями

Материал из ALT Linux Wiki
Перейти к: навигация, поиск
м (minor fixes)
(актуализация, викификация)
Строка 1: Строка 1:
 
[[Категория:Admin]]
 
[[Категория:Admin]]
{{Викифицировать}}
 
 
{{Stub}}
 
{{Stub}}
{{MovedFromFreesourceInfo|AltLinux/Документация/НастройкаSSH}}
 
  
 
== Создание и настройка входа через ssh ==
 
== Создание и настройка входа через ssh ==
 
 
Рассматривается вопрос создания ключа пользователя и настройки для авторизации на сервере в ssh через ключ.
 
Рассматривается вопрос создания ключа пользователя и настройки для авторизации на сервере в ssh через ключ.
 
Предполагается что ssh-сервер запущен и имеет настройки, принятые по умолчанию в ALTLinux.
 
Предполагается что ssh-сервер запущен и имеет настройки, принятые по умолчанию в ALTLinux.
 
__TOC__
 
 
  
 
=== Введение ===
 
=== Введение ===
 
+
ssh (secure shell) — программа для входа на удалённую машину и выполнения на ней команд.
ssh (secure shell) программа для входа на удалённую машину и выполнения на ней команд.
 
  
 
=== Создание ключа ===
 
=== Создание ключа ===
 
 
В ssh используется асимметричное шифрование, соответственно используется пара из закрытого и открытого ключа.
 
В ssh используется асимметричное шифрование, соответственно используется пара из закрытого и открытого ключа.
 
Для создания ключа на компьютере пользователя нужно выполнить
 
Для создания ключа на компьютере пользователя нужно выполнить
Строка 26: Строка 18:
 
В каталоге ~/.ssh
 
В каталоге ~/.ssh
 
появляются файлы
 
появляются файлы
* id_dsa — секретный ключ
+
* id_dsa — секретный ключ
* id_dsa.pub — публичный ключ
+
* id_dsa.pub — публичный ключ
 
<div style="display: inline; color: red;">Внимание! Никогда никому не пересылайте '''секретный''' ключ.</div>
 
<div style="display: inline; color: red;">Внимание! Никогда никому не пересылайте '''секретный''' ключ.</div>
  
 
=== Настройка входа (на сервере) ===
 
=== Настройка входа (на сервере) ===
 
Для того, чтобы пользователь мог авторизоваться в системе через ssh-ключ, нужно в файл ~/.ssh/authorized_keys добавить содержимое файла id_dsa.pub. Если пользователь будет один входить под этой учётной записью, файл id_dsa.pub можно просто скопировать, назвав authorized_keys.
 
Для того, чтобы пользователь мог авторизоваться в системе через ssh-ключ, нужно в файл ~/.ssh/authorized_keys добавить содержимое файла id_dsa.pub. Если пользователь будет один входить под этой учётной записью, файл id_dsa.pub можно просто скопировать, назвав authorized_keys.
Также можно воспользоваться утилиой ssh-copy-id, если копировать вручную не хочется.
+
Также можно воспользоваться утилитой ssh-copy-id, если копировать вручную не хочется:
 +
 
 +
ssh-copy-id user@host
 +
 
 
'''Данные изменения проводятся в каталоге пользователя ''на сервере'''''.
 
'''Данные изменения проводятся в каталоге пользователя ''на сервере'''''.
 
<div style="display: inline; color: red;">Обратите внимание на права файлов:</div>
 
<div style="display: inline; color: red;">Обратите внимание на права файлов:</div>
Строка 40: Строка 35:
 
<pre>drwx------ .ssh</pre>
 
<pre>drwx------ .ssh</pre>
 
принадлежать файлы должны пользователю и его группе
 
принадлежать файлы должны пользователю и его группе
 
'' Настройку доступа на сервере можно посмотреть в разделе: [http://freesource.info/wiki//ALTLinux/Dokumentacija/NastrojjkaSSH#h576-6 Настройка сервера]''
 
  
 
=== Использование ===
 
=== Использование ===
 
+
$ ssh user@host.name
<pre>$ ssh user@host.name</pre>
 
  
 
=== Конфигурационный файл (у пользователя) ===
 
=== Конфигурационный файл (у пользователя) ===
 
 
Для удобства в файле ~/.ssh/config можно указать сокращение
 
Для удобства в файле ~/.ssh/config можно указать сокращение
 
<pre>Host    myserv
 
<pre>Host    myserv
Строка 54: Строка 45:
  
 
и вызывать просто как
 
и вызывать просто как
<pre>$ ssh myserv</pre>
+
$ ssh myserv</pre>
  
 
Можно добавить ещё настроек:
 
Можно добавить ещё настроек:
Строка 66: Строка 57:
  
 
Чтобы не указывать пароль каждый раз при обращении к серверу, можно запустить
 
Чтобы не указывать пароль каждый раз при обращении к серверу, можно запустить
<pre>$ ssh-add</pre>
+
$ ssh-add
будет спрошен пароль и расшифрованный ключ запомнится на время вашего сеанса.
+
Будет спрошен пароль и расшифрованный ключ запомнится на время вашего сеанса. Это сработает если запущен ssh-agent (в ALT Linux он запускается автоматически при графическом входе в систему).
Это сработает если запущен ssh-agent (в ALT Linux он запускается автоматически при графическом входе в систему).
 
  
 
=== Настройка сервера ===
 
=== Настройка сервера ===
  
==== sshd ====
+
====Инструкция по установке и настройке сервера ssh для администратора====
Инструкция по установке и настройке сервера ssh для администратора.
+
Нужно установить пакет '''openssh-server''', включить автоматический запуск при загрузке системы:
Нужно установить пакет openssh-server, включить автоматический запуск при загрузке системы:
+
# chkconfig sshd on</pre>
<pre># chkconfig sshd on</pre>
 
 
В файле /etc/openssh/sshd_config укажите строку [[Документация/AllowUsers|AllowUsers]] с перечислением пользователей, имеющих право подключаться к системе.
 
В файле /etc/openssh/sshd_config укажите строку [[Документация/AllowUsers|AllowUsers]] с перечислением пользователей, имеющих право подключаться к системе.
 +
 
Например
 
Например
<pre>AllowUsers guest test best</pre>
+
AllowUsers guest test best
 +
 
 
А также рекомендуется выключить аутентификацию по паролю (исправить строчку [[Документация/PasswordAuthentication|PasswordAuthentication]] на):
 
А также рекомендуется выключить аутентификацию по паролю (исправить строчку [[Документация/PasswordAuthentication|PasswordAuthentication]] на):
<pre>PasswordAuthentication no</pre>
+
PasswordAuthentication no
  
 
Для вступления настроек в силу:
 
Для вступления настроек в силу:
<pre># service sshd reload</pre>
+
# service sshd reload
 
 
==== [[Документация/OpenLDAP|LDAP]] ====
 
 
 
Чтобы sshd мог пускать пользователей, живущих в LDAP, нужно немного подправить /etc/pam.d/sshd
 
<pre>auth    required pam_userpass.so
 
auth sufficient pam_ldap.so use_first_pass
 
auth    required pam_tcb.so shadow fork prefix=$2a$ count=8 nullok nodelay blank_nolog use_first_pass
 
auth    required pam_nologin.so
 
account  include system-auth
 
password include system-auth
 
session  include system-auth</pre>
 
 
 
Думаю, не будет лишним указать содержимое /etc/pam.d/system-auth и system-auth-use_first_pass
 
  
'''Предупреждение''': с openssh-server версии openssh-3.6.1p2-alt6 из ALTLinux Master 2.4 pam_mkhomedir <div style="display: inline; color: red;">НЕ РАБОТАЕТ</div>, [https://bugzilla.altlinux.org/show_bug.cgi?id=6385 это решенный баг]. См. тж. ниже.
+
==== [[OpenLDAP|LDAP]] ====
 
+
Чтобы sshd мог пускать пользователей из LDAP, нужно выполнить
system-auth
+
  control system-auth ldap
<pre>#%PAM-1.0
 
auth    sufficient pam_ldap.so
 
auth    required pam_tcb.so shadow fork prefix=$2a$ count=8 nullok use_first_pass
 
 
 
account  sufficient pam_ldap.so
 
account  required pam_tcb.so shadow fork
 
password sufficient pam_ldap.so
 
password required pam_passwdqc.so min=disabled,24,12,8,7 max=40 passphrase=3 match=4 similar=deny random=42 enforce=users retry=3
 
password required pam_tcb.so use_authtok shadow fork prefix=$2a$ count=8 write_to=tcb
 
session  required      pam_mkhomedir.so skel=/etc/skel/ umask=0026
 
 
 
session  sufficient pam_ldap.so
 
#session  required      pam_mkhomedir.so skel=/etc/skel/ umask=0026
 
session  required pam_tcb.so
 
session  required pam_limits.so</pre>
 
 
 
  system-auth-use_first_pass
 
<pre>#%PAM-1.0
 
#auth    required pam_tcb.so shadow fork prefix=$2a$ count=8 nullok use_first_pass
 
#password required pam_tcb.so use_authtok shadow fork prefix=$2a$ count=8 write_to=tcb
 
auth sufficient /lib/security/pam_tcb.so shadow fork prefix=$2a$ count=8 nullok use_first_pass
 
auth required /lib/security/pam_ldap.so use_first_pass
 
password sufficient /lib/security/pam_ldap.so use_authok
 
password required /lib/security/pam_tcb.so use_authtok shadow fork prefix=$2a$ count=8 write_to=tcb</pre>
 
  
 
=== Управление сессиями ===
 
=== Управление сессиями ===
<pre>Date: Fri, 27 May 2005 13:24:49 +0400
+
PAM session management в openssh той версии, которая находится в Сизифе и дистрибутивах использует privilege separation, исполняется с правами пользователя, а не root'а.  Как следствие,
From: "Dmitry V. Levin" <ldv@>
+
* pam_mktemp не сможет создать подкаталог в /tmp/.private/ с нужными правами, если его там нет;
To: <sisyphus@>
+
* pam_mkhomedir не сможет создать подкаталог с нужными правами, если его там нет;
Subject: Re: [sisyphus] openssh update
+
* pam_limits не сможет увеличить лимиты сверх тех, что есть у процесса openssh.
  
PAM session management в openssh той версии, которая находится в
+
В качестве workaround'а можно помещать это модули в PAM account management.
Сизифе/дистрибутивах и использует privilege separation, исполняется
 
с правами пользователя, а не root'а.  Как следствие,
 
- pam_mktemp не сможет создать подкаталог в /tmp/.private/ с нужными
 
  правами, если его там нет;
 
- pam_mkhomedir не сможет создать подкаталог с нужными правами, если его
 
  там нет;
 
- pam_limits не сможет увеличить лимиты сверх тех, что есть у процесса
 
  openssh.
 
 
 
В качестве workaround'а можно помещать это модули в PAM account
 
management.</pre>
 
  
 
=== Полезные советы ===
 
=== Полезные советы ===
  
==== Как отучить взломщиков подбирать пароли ====
+
==== Предотвращение брутфорс-атак ====
Например, можно перенести sshd на другой порт, а на родной порт (22) ssh натравить portsentry.
+
* Можно пересадить sshd на нестандартный порт
<pre>On Mon, Sep 26, 2005 at 12:28:57PM +0400, ABATAPA wrote:
+
* Целесообразно ограничить число «ожидающих» соединений, когда пароль еще не введен. Для этого, в файле /etc/openssh/sshd_config укажите строку
> Можно сделать еще проще: разрешить такие пакеты не чаще, скажем, N в 5 минут с
+
MaxStartups 2:70:10
> каждой сети C средствами IPTables. Если сам ошибся - можно и подождать.
+
В этом случае у вас будут разрешены только 2 «ожидающих» соединения, и каждое следующее будет сброшено с вероятностью 70 %
wrar:
+
* Для особо изощрённой защиты можно использовать knock.
Разве это не limit делается?</pre>
+
* Можно ограничить число попыток средствами iptables:
 
+
iptables -A INPUT -p TCP --syn --dport 22 -m recent --name ssh_rate_limit --set
Так же целесообразно ограничить число «ожидающих» соединений, когда пароль еще не введен.
+
iptables -A INPUT -p TCP --syn --dport 22 -m recent --name ssh_rate_limit --update --seconds 60 --hitcount 4 -j LOG
Для этого, в файле /etc/openssh/sshd_config укажите строку
+
iptables -A INPUT -p TCP --syn --dport 22 -m recent --name ssh_rate_limit --update --seconds 60 --hitcount 4 -j DROP
<pre>MaxStartups 2:70:10</pre>
+
Для оптимизации этого дела настроятельно рекомендуется завести цель LOGDROP.
В этом случае у вас будут разрешены только 2 «ожидающих» соединения, и каждое следующее будет сброшено с вероятностью 70 %
 
 
 
Для особо изощрённой защиты можно использовать knock.
 
См. также [http://www.linux.com/article.pl?sid=05/09/15/1655234 http://www.linux.com/article.pl?sid=05/09/15/1655234] и [http://fail2ban.sourceforge.net/ http://fail2ban.sourceforge.net/]
 
И ещё [http://www.csc.liv.ac.uk/~greg/sshdfilter/ http://www.csc.liv.ac.uk/~greg/sshdfilter/]
 
  
==== Настройка второго sshd ==== &gt; Копируем /etc/init.d/sshd и указываем через -f другой конфигурационный файл?
+
==== Настройка второго sshd ====
 +
Копируем /etc/init.d/sshd и указываем через -f другой конфигурационный файл?
 
Практика показывает, что надо менять весь набор: копировать /etc/init.d/sshd, /etc/sysconfig/sshd; (факультативно делать ссылки или копировать сам sshd, /etc/pam.d/sshd); изменять посредством /etc/sysconfig/sshd переменные PIDFILE, LOCKFILE, EXTRAOPTIONS.
 
Практика показывает, что надо менять весь набор: копировать /etc/init.d/sshd, /etc/sysconfig/sshd; (факультативно делать ссылки или копировать сам sshd, /etc/pam.d/sshd); изменять посредством /etc/sysconfig/sshd переменные PIDFILE, LOCKFILE, EXTRAOPTIONS.
''Dmitry V. Levin''
 
  
 
==== Копирование ключа на сервер ====
 
==== Копирование ключа на сервер ====
 
Если вам нужно добавить на сервер, куда вы имеете доступ, чей-то ключ, используйте
 
Если вам нужно добавить на сервер, куда вы имеете доступ, чей-то ключ, используйте
<pre>$ ssh-copy-id</pre>
+
$ ssh-copy-id
например,
+
Например:
<pre>$ ssh-copy_id -i friends_pub_key myserver</pre>
+
$ ssh-copy-id -i friends_pub_key myserver
  
 
=== Ссылки ===
 
=== Ссылки ===
Строка 181: Строка 119:
 
* [http://www.securitylab.ru/analytics/216377.php Защита с помощью SSH ключей]
 
* [http://www.securitylab.ru/analytics/216377.php Защита с помощью SSH ключей]
 
* [http://www.stearns.org/doc/ssh-techniques-two.current.html Довольно интересные трюки] (в основном по работе с большим количеством систем, в том числе через одну из них)
 
* [http://www.stearns.org/doc/ssh-techniques-two.current.html Довольно интересные трюки] (в основном по работе с большим количеством систем, в том числе через одну из них)
 +
* http://www.linux.com/article.pl?sid=05/09/15/1655234
 +
* http://fail2ban.sourceforge.net/
 +
* http://www.csc.liv.ac.uk/~greg/sshdfilter/

Версия 16:39, 26 сентября 2008

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.


Создание и настройка входа через ssh

Рассматривается вопрос создания ключа пользователя и настройки для авторизации на сервере в ssh через ключ. Предполагается что ssh-сервер запущен и имеет настройки, принятые по умолчанию в ALTLinux.

Введение

ssh (secure shell) — программа для входа на удалённую машину и выполнения на ней команд.

Создание ключа

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

$ ssh-keygen -b 2048 -t dsa

На вопрос о файле для сохранения ключа нажать Enter (по умолчанию). Далее будет задан вопрос о пароле к ключу. Пароль нужно указать.

В каталоге ~/.ssh появляются файлы

  • id_dsa — секретный ключ
  • id_dsa.pub — публичный ключ
Внимание! Никогда никому не пересылайте секретный ключ.

Настройка входа (на сервере)

Для того, чтобы пользователь мог авторизоваться в системе через ssh-ключ, нужно в файл ~/.ssh/authorized_keys добавить содержимое файла id_dsa.pub. Если пользователь будет один входить под этой учётной записью, файл id_dsa.pub можно просто скопировать, назвав authorized_keys. Также можно воспользоваться утилитой ssh-copy-id, если копировать вручную не хочется:

ssh-copy-id user@host

Данные изменения проводятся в каталоге пользователя на сервере.

Обратите внимание на права файлов:
-rw------- authorized_keys
-rw-r--r-- config

и на каталог

drwx------ .ssh

принадлежать файлы должны пользователю и его группе

Использование

$ ssh user@host.name

Конфигурационный файл (у пользователя)

Для удобства в файле ~/.ssh/config можно указать сокращение

Host    myserv
        HostName host.name

и вызывать просто как

$ ssh myserv

Можно добавить ещё настроек:

Host myserv
...
        User user
        Protocol 2
        ForwardX11 yes
        ForwardAgent yes
        Compression yes

Чтобы не указывать пароль каждый раз при обращении к серверу, можно запустить

$ ssh-add

Будет спрошен пароль и расшифрованный ключ запомнится на время вашего сеанса. Это сработает если запущен ssh-agent (в ALT Linux он запускается автоматически при графическом входе в систему).

Настройка сервера

Инструкция по установке и настройке сервера ssh для администратора

Нужно установить пакет openssh-server, включить автоматический запуск при загрузке системы:

# chkconfig sshd on

В файле /etc/openssh/sshd_config укажите строку AllowUsers с перечислением пользователей, имеющих право подключаться к системе.

Например

AllowUsers guest test best

А также рекомендуется выключить аутентификацию по паролю (исправить строчку PasswordAuthentication на):

PasswordAuthentication no

Для вступления настроек в силу:

# service sshd reload

LDAP

Чтобы sshd мог пускать пользователей из LDAP, нужно выполнить

control system-auth ldap

Управление сессиями

PAM session management в openssh той версии, которая находится в Сизифе и дистрибутивах использует privilege separation, исполняется с правами пользователя, а не root'а. Как следствие,

  • pam_mktemp не сможет создать подкаталог в /tmp/.private/ с нужными правами, если его там нет;
  • pam_mkhomedir не сможет создать подкаталог с нужными правами, если его там нет;
  • pam_limits не сможет увеличить лимиты сверх тех, что есть у процесса openssh.

В качестве workaround'а можно помещать это модули в PAM account management.

Полезные советы

Предотвращение брутфорс-атак

  • Можно пересадить sshd на нестандартный порт
  • Целесообразно ограничить число «ожидающих» соединений, когда пароль еще не введен. Для этого, в файле /etc/openssh/sshd_config укажите строку
MaxStartups 2:70:10

В этом случае у вас будут разрешены только 2 «ожидающих» соединения, и каждое следующее будет сброшено с вероятностью 70 %

  • Для особо изощрённой защиты можно использовать knock.
  • Можно ограничить число попыток средствами iptables:
iptables -A INPUT -p TCP --syn --dport 22 -m recent --name ssh_rate_limit --set
iptables -A INPUT -p TCP --syn --dport 22 -m recent --name ssh_rate_limit --update --seconds 60 --hitcount 4 -j LOG
iptables -A INPUT -p TCP --syn --dport 22 -m recent --name ssh_rate_limit --update --seconds 60 --hitcount 4 -j DROP

Для оптимизации этого дела настроятельно рекомендуется завести цель LOGDROP.

Настройка второго sshd

Копируем /etc/init.d/sshd и указываем через -f другой конфигурационный файл? Практика показывает, что надо менять весь набор: копировать /etc/init.d/sshd, /etc/sysconfig/sshd; (факультативно делать ссылки или копировать сам sshd, /etc/pam.d/sshd); изменять посредством /etc/sysconfig/sshd переменные PIDFILE, LOCKFILE, EXTRAOPTIONS.

Копирование ключа на сервер

Если вам нужно добавить на сервер, куда вы имеете доступ, чей-то ключ, используйте

$ ssh-copy-id

Например:

$ ssh-copy-id -i friends_pub_key myserver

Ссылки