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]] ====
+
==== [[OpenLDAP|LDAP]] ====
-
 
+
Чтобы sshd мог пускать пользователей из LDAP, нужно выполнить
-
Чтобы sshd мог пускать пользователей, живущих в LDAP, нужно немного подправить /etc/pam.d/sshd
+
  control system-auth ldap
-
<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 это решенный баг]. См. тж. ниже.
+
-
 
+
-
system-auth
+
-
<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</pre>

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

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

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

$ ssh-add

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

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

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

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

# chkconfig sshd on</pre>

В файле /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

Ссылки

 
Личные инструменты