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

Ссылки