LXF165-166: Безопасность: SSH
Olkol (обсуждение | вклад) (Новая страница: « Категория: Учебники '''Сети: Получите доступ к своему компьютеру из любой…») |
Версия 01:08, 3 ноября 2018
|
|
|
Сети: Получите доступ к своему компьютеру из любой точки мира
Содержание |
SSH: Связь без опасений
Нейл Ботвик показывает, как с помощью SSH два компьютера могут общаться друг с другом максимально удобно и безопасно.
Про SSH, или «защищенную оболочку [Secure Shell]», слышали многие из нас, но она умеет не только открывать сеанс терминала на другом компьютере. Тем, кто не знаком с SSH, будет интересно узнать, что с ее помощью можно открыть защищенный сеанс терминала через сеть. Весь трафик, включая обмен паролями, шифруется, что позволяет использовать незащищенные каналы. Обычно SSH запускается так:
ssh user@hostname
Команда подключится к удаленному хосту и запросит пароль пользователя, а затем откроет оболочку по умолчанию для этого пользователя. Часть адреса user@ можно опустить, и тогда SSH воспользуется текущим именем пользователя, но придется указать пароль; при этом будут использованы настройки по умолчанию для этого пользователя на удаленном компьютере.
Использовать пароли для входа и неудобно, и ненадежно; и чем надежнее пароль, тем это менее удобно. SSH имеет и альтернативу – аутентификацию по ключам, позволяющую пользователю войти в систему на другом компьютере от своего имени без ввода пароля. Поэтому не пользуйтесь ею на устройствах, которые легко потерять или украсть, например, на смартфонах. Создать ключи на локальном компьютере можно командой:
ssh-keygen -t edcsa
Параметр -t задает тип ключа: rsa, dsa или edcsa. Последний используется по умолчанию в более новых версиях SSH, но не поддерживается в более старых релизах, поэтому вы можете выбрать dsa. Ответьте на вопросы, и команда создаст пару ключей в каталоге ~/.ssh; файлы будут названы в соответствии с типом, например, id_ecdsa and id_ecdsa.pub. Последний файл – публичный ключ, который копируется на удаленный компьютер, другой файл – приватный ключ, и им не следует делиться ни с кем. Скопируйте публичный ключ на удаленный компьютер командой
ssh-copy-id -i ~/.ssh/id_edcsa.pub user@hostname
Команда запросит у вас пароль на удаленном компьютере и затем скопирует туда публичный ключ. При следующей попытке подключиться к этому компьютеру под данным пользователем вы войдете в систему без запроса пароля.
Для повышения безопасности можно отключить вход по паролям, и тогда в систему смогут войти только пользователи с зарегистрированными ключами. Тогда вам понадобится доступ root или sudo на целевом компьютере – придется изменить файл /etc/ssh/sshd_config. Найдите строку с параметром
PasswordAuthentication yes
и измените его на no. Перезапустите демона SSH, и к компьютеру смогут подключиться только пользователи с ключами. Сделать то же самое для пользователя root можно, указав параметры
PermitRootLogin no
PermitRootLogin without-password
Вход с паролем для root нужно отключать всегда; это самый незащищенный вход, потому что root – единственный пользователь, имя которого известно заранее.
Запуск программ
C SSH можно не только открыть сеанс терминала; можно, скажем, запускать программы напрямую. Команда
ssh user@computer someprogram --arguments
заходит в систему на удаленном компьютере, запускает указанную программу и завершается. Оболочка не открывается, и весь вывод отображается на локальном терминале. Будьте внимательны со специальными символами и кавычками, потому что перед передачей ssh команды будут обработаны локальной оболочкой. Так, команда
ssh myothercomputer ls *.jpg
не сделает того, чего вы ожидали, поскольку локальная оболочка преобразует *.jpg в список всех файлов с этим расширением в текущем каталоге и затем передаст ssh, которая вернет множество ошибок «Такого файла не существует». Чтобы специальные символы были переданы без интерпретации, нужно их экранировать или брать в кавычки.
ssh myothercomputer ls \*.jpg
С помощью SSH можно запускать не только команды в терминале, но и графические программы. Сначала убедитесь, что в /etc/ssh/sshd_config есть строка
X11Forwarding yes
Затем вызовите ssh с параметром -X или -Y. У -X есть дополнительные ограничения по безопасности, поэтому пользуйтесь -Y только когда -X не делает того, что вам нужно, и только в защищенной сети.
ssh -X myothercomputer
С помощью SSH можно подключиться к компьютеру из любой точки мира, если в маршрутизаторе настроено перенаправление подключений на порт 22 (стандартный порт SSH). Это делает его лакомой целью атак юных хакеров, и ваш системный журнал может быть полон неудачных попыток входа в систему. Хотя аутентификация по ключу предотвратит успех таких атак, ваш компьютер все равно должен с ними бороться. Популярное решение – воспользоваться нестандартным портом. Если ваш маршрутизатор может перенаправлять трафик с одного входящего порта на другой, это просто: выберите любой, но неиспользуемый порт с большим номером, перенаправьте его на порт 22, и локальный доступ будет работать так же, как прежде. Просто помните, что вне маршрутизатора нужно указывать другой номер порта, а также внешний IP-адрес или имя хоста компьютера.
ssh -p 5678 user@public.ip
Если маршрутизатор может перенаправлять только на тот же порт, можно заставить SSH слушать оба порта, и порт 22 будет по-прежнему работать локально – для этого добавьте следующие строки в sshd_config:
Port 22
Port 5678
Теперь просто запомните, что при подключении извне нужно указывать новый порт. Если вам лень запоминать, можно добавить следующие строки в ~/.ssh/ssh_config:
Host <имя хоста или адрес IP>
Port 5678
Любой параметр, указанный после строки Host, применяется только к соответствующим хостам. Применяться будут все параметры до следующей строки Host, так что перед любыми глобальными настройками ставьте строку Host *. Каждый параметр можно задавать только один раз, поэтому настройки для конкретных хостов в этом файле должны идти перед настройками по умолчанию. Эти настройки применяются только к текущему локальному пользователю. Чтобы они применялись ко всем пользователям, воспользуйтесь файлом /etc/ssh_config.
Черные списки
Еще один способ борьбы с нежелательными попытками входа по SSH, особенно если вы не можете поменять порт – автоматическая блокировка IP-адресов, попытки входа с которых постоянно завершаются неудачно. Существует несколько программ, которые это делают, одна из самых популярных – fail2ban (www.fail2ban.org). Эта программа, как и ее аналоги, сканирует лог-файлы на наличие признаков подозрительной активности. Для SSH это множественные попытки подключения с разными именами пользователя с одного и того же IP-адреса. При обнаружении подозрительного поведения она создает правило брандмауэра, которое блокирует все подключения с этого адреса на заданный период времени. Можно настроить и другие действия, например, отправку письма, но блокирование на уровне брандмауэра используется по умолчанию. Настройки по умолчанию охватывают популярные серверы, в том числе SSH, а также web-сервер Apache. Большинству пользователей достаточно установить программу из менеджера пакетов и убедиться, что сервис запускается при загрузке системы. Также можно установить программу вроде Logwatch (www.logwatch.org), которая просматривает файлы журналов и ежедневно отправляет суммарный отчет обо всей системной активности.
Программа, на которую стоит обратить внимание всем пользователям SSH – screen (www.gnu.org/software/screen). Если вы запускаете программу в удаленной оболочке и сетевое соединение разрывается, оболочка завершится со всеми программами, которые были в ней запущены. Screen называют мультиплексором терминалов, т. е. вы запускаете его в оболочке, и на первый взгляд ничего не меняется, но теперь вы находитесь в сессии screen. Запустите программу и нажмите Ctrl + A, затем D, и сессия терминала исчезнет. Выполните команду
screen -r
и сессия терминала появится снова с запущенной в ней программой, как будто никуда не исчезала. Это особенно удобно с SSH, потому что можно войти в систему, запустить screen и выполнять все необходимые действия. Если подключение SSH будет прервано, можно переподключиться и выполнить команду screen -r. Это даже не обязательно делать с того же самого компьютера.
Толпа SSH
Обычно с помощью SSH мы подключаемся с одного компьютера к другому, но что если нужно запустить команду на нескольких компьютерах сети? Сделать это можно с dsh (www.netfort.gr.jp/~dancer/software/dsh.html.en), разновидностью распределенной оболочки. Основной формат команды таков:
dsh -m user1@host1 -m user2@host2 command
Хостов можно указать любое количество. С dsh вам ох как пригодится аутентификация с помощью ключей, иначе придется набирать огромное количество паролей. Чтобы каждый раз не набирать имена хостов, можно добавить их в группу в файле в каталоге /etc/dsh/groups/:
user1@host1
user2@host2
host3
Для последнего хоста работает обычное правило SSH, при котором используется текущее имя пользователя, если оно не указано. Запустите dsh следующим образом:
dsh -g groupname command
Здесь groupname – имя файла в /etc/dsh/groups; только имя, а не полный путь. Также в файле /etc/dsh/machines.list можно задать группу по умолчанию, а затем запустить ту же команду для всех хостов этой группы:
dsh -a command
Обычно команда запускается на всех компьютерах одновременно. Это самый быстрый способ, но он не слишком хорош, если команды генерируют большой объем выходных данных.
В начале каждой строки указывается имя компьютера, на котором запущена команда, но если выводимых строк много, то здесь легко запутаться. В этом случае укажите параметр -w, чтобы dsh ожидала завершения команды на каждом компьютере и только потом запускала ее на следующем. Этот и другие параметры можно задать как используемые по умолчанию в /etc/dsh/dsh.conf. |