SSH
Материал из ALT Linux Wiki
м (minor fixes) |
(актуализация, викификация) |
||
Строка 1: | Строка 1: | ||
[[Категория:Admin]] | [[Категория:Admin]] | ||
- | |||
{{Stub}} | {{Stub}} | ||
- | |||
== Создание и настройка входа через ssh == | == Создание и настройка входа через ssh == | ||
- | |||
Рассматривается вопрос создания ключа пользователя и настройки для авторизации на сервере в ssh через ключ. | Рассматривается вопрос создания ключа пользователя и настройки для авторизации на сервере в ssh через ключ. | ||
Предполагается что ssh-сервер запущен и имеет настройки, принятые по умолчанию в ALTLinux. | Предполагается что ssh-сервер запущен и имеет настройки, принятые по умолчанию в ALTLinux. | ||
- | |||
- | |||
- | |||
=== Введение === | === Введение === | ||
- | + | ssh (secure shell) — программа для входа на удалённую машину и выполнения на ней команд. | |
- | ssh (secure shell) | + | |
=== Создание ключа === | === Создание ключа === | ||
- | |||
В ssh используется асимметричное шифрование, соответственно используется пара из закрытого и открытого ключа. | В ssh используется асимметричное шифрование, соответственно используется пара из закрытого и открытого ключа. | ||
Для создания ключа на компьютере пользователя нужно выполнить | Для создания ключа на компьютере пользователя нужно выполнить | ||
Строка 26: | Строка 18: | ||
В каталоге ~/.ssh | В каталоге ~/.ssh | ||
появляются файлы | появляются файлы | ||
- | * | + | * id_dsa — секретный ключ |
- | * id_dsa. | + | * 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 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> | ||
принадлежать файлы должны пользователю и его группе | принадлежать файлы должны пользователю и его группе | ||
- | |||
- | |||
=== Использование === | === Использование === | ||
- | + | $ ssh user@host.name | |
- | + | ||
=== Конфигурационный файл (у пользователя) === | === Конфигурационный файл (у пользователя) === | ||
- | |||
Для удобства в файле ~/.ssh/config можно указать сокращение | Для удобства в файле ~/.ssh/config можно указать сокращение | ||
<pre>Host myserv | <pre>Host myserv | ||
Строка 54: | Строка 45: | ||
и вызывать просто как | и вызывать просто как | ||
- | + | $ ssh myserv</pre> | |
Можно добавить ещё настроек: | Можно добавить ещё настроек: | ||
Строка 66: | Строка 57: | ||
Чтобы не указывать пароль каждый раз при обращении к серверу, можно запустить | Чтобы не указывать пароль каждый раз при обращении к серверу, можно запустить | ||
- | + | $ ssh-add | |
- | + | Будет спрошен пароль и расшифрованный ключ запомнится на время вашего сеанса. Это сработает если запущен ssh-agent (в ALT Linux он запускается автоматически при графическом входе в систему). | |
- | Это сработает если запущен ssh-agent (в ALT Linux он запускается автоматически при графическом входе в систему). | + | |
=== Настройка сервера === | === Настройка сервера === | ||
- | ==== | + | ====Инструкция по установке и настройке сервера ssh для администратора==== |
- | Инструкция по установке и настройке сервера ssh для администратора | + | Нужно установить пакет '''openssh-server''', включить автоматический запуск при загрузке системы: |
- | Нужно установить пакет openssh-server, включить автоматический запуск при загрузке системы: | + | # chkconfig sshd on</pre> |
- | + | ||
В файле /etc/openssh/sshd_config укажите строку [[Документация/AllowUsers|AllowUsers]] с перечислением пользователей, имеющих право подключаться к системе. | В файле /etc/openssh/sshd_config укажите строку [[Документация/AllowUsers|AllowUsers]] с перечислением пользователей, имеющих право подключаться к системе. | ||
+ | |||
Например | Например | ||
- | + | AllowUsers guest test best | |
+ | |||
А также рекомендуется выключить аутентификацию по паролю (исправить строчку [[Документация/PasswordAuthentication|PasswordAuthentication]] на): | А также рекомендуется выключить аутентификацию по паролю (исправить строчку [[Документация/PasswordAuthentication|PasswordAuthentication]] на): | ||
- | + | PasswordAuthentication no | |
Для вступления настроек в силу: | Для вступления настроек в силу: | ||
- | + | # service sshd reload | |
- | ==== [[ | + | ==== [[OpenLDAP|LDAP]] ==== |
- | + | Чтобы sshd мог пускать пользователей из LDAP, нужно выполнить | |
- | Чтобы sshd мог пускать пользователей | + | control system-auth ldap |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
=== Управление сессиями === | === Управление сессиями === | ||
- | + | PAM session management в openssh той версии, которая находится в Сизифе и дистрибутивах использует privilege separation, исполняется с правами пользователя, а не root'а. Как следствие, | |
- | + | * pam_mktemp не сможет создать подкаталог в /tmp/.private/ с нужными правами, если его там нет; | |
- | + | * pam_mkhomedir не сможет создать подкаталог с нужными правами, если его там нет; | |
- | + | * pam_limits не сможет увеличить лимиты сверх тех, что есть у процесса openssh. | |
- | + | В качестве workaround'а можно помещать это модули в PAM account management. | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | В качестве 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 | |
- | Для этого, в файле /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 |
- | + | Для оптимизации этого дела настроятельно рекомендуется завести цель LOGDROP. | |
- | В этом случае у вас будут разрешены только 2 «ожидающих» соединения, и каждое следующее будет сброшено с вероятностью | + | |
- | + | ||
- | Для особо изощрённой защиты можно использовать knock. | + | |
- | + | ||
- | + | ||
- | ==== Настройка второго sshd ==== | + | ==== Настройка второго 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. | ||
- | |||
==== Копирование ключа на сервер ==== | ==== Копирование ключа на сервер ==== | ||
Если вам нужно добавить на сервер, куда вы имеете доступ, чей-то ключ, используйте | Если вам нужно добавить на сервер, куда вы имеете доступ, чей-то ключ, используйте | ||
- | + | $ ssh-copy-id | |
- | + | Например: | |
- | + | $ 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
Содержание |
Создание и настройка входа через 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
Ссылки
- Документация ALM2.4
- Настройка сервера SSH (теория и практика)
- Настройка SSH в cygwin
- Автоматизация системного администрирования с помощью ssh и scp
- Защита с помощью SSH ключей
- Довольно интересные трюки (в основном по работе с большим количеством систем, в том числе через одну из них)
- http://www.linux.com/article.pl?sid=05/09/15/1655234
- http://fail2ban.sourceforge.net/
- http://www.csc.liv.ac.uk/~greg/sshdfilter/