Управление доступом пользователей через SSH

По умолчанию любой, кто обладает правом доступа к командному интерпретатору, сможет выполнить вход на сервер. Параметры настройки AllowGroups, DenyGroups, Allowllsers и Denyllsers позволяют вам определять пользователей и группы, которые будут или не будут получать доступ к вашей машине.

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

Например, параметр AllowG roups позволит ограничить круг пользователей, обладающих правом входа в систему через SSH, указанными группами, которые определены в файле /etc/group (глава 7). Если этот параметр определен, а пользователь не принадлежит ни к одной из допустимых групп, он не сможет войти в систему. Группы в списке должны отделяться пробелами:

AllowGroups wheel webmaster dnsadmln

Если вы не хотите предоставлять доступ через SSH целой группе пользователей, можно с помощью параметра Allowllsers определить список допустимых пользователей. При использовании параметра Allowllsers автоматически запрещается доступ всем остальным пользователям, отсутствующим в списке.

Параметр DenyGroups противоположен параметру AllowGroups. Пользователи из перечисленных здесь системных групп не смогут войти в систему. Указанные группы должны быть их главными группами, то есть должны быть представлены в /etc/master.passwd, а не просто в /etc/ group. Это ограничение делает параметр DenyGroups менее полезным, чем может показаться на первый взгляд; для достижения желаемого эффекта будет недостаточно определить универсальную группу nossh и просто добавить в нее пользователей, эта группа должна быть главной для них. Явное перечисление допустимых групп обеспечивает более полезную политику безопасности.

Наконец, параметр Denyllsers содержит перечень пользователей, которым должно быть отказано в доступе. Данный параметр можно использовать, чтобы явно ограничить доступ пользователям из той группы, которой разрешен вход в систему.

Как эти параметры влияют на права доступа пользователя, входящего в несколько групп? Например, пользователь входит в группу, присутствующую в списке AllowGroups, и в группу из списка DenyGroups. Что произойдет в этом случае? Демон SSH проверяет значения этих параметров в следующем порядке: Denyllsers, Allowllsers, DenyGroups и Allow- Groups. Учитывается первое совпадение. Предположим, что я член группы wheel, и в файле sshd_config присутствует следующий фрагмент:

DenyUsers: mwlucas AllowGroups: wheel

Я не смогу войти в эту систему через SSH, потому что значение параметра DenyUsers проверяется до значения параметра AllowGroups.

Клиенты SSH

Безусловно, клиент SSH уже присутствует в FreeBSD, как и в большинстве других UNIX-подобных операционных систем. По возможности старайтесь пользоваться встроенным клиентом SSH, поскольку он входит в состав пакета OpenSSH, разработанного командой OpenBSD, и является не только самой популярной, но и лучшей реализацией. Если вы вынуждены использовать операционную систему Microsoft Windows, рекомендую программу PuTTY, которая может бесплатно использоваться как в коммерческих, так и в некоммерческих целях и является прекрасным эмулятором терминала.

Эта книга посвящена FreeBSD, поэтому все внимание будет уделено клиенту OpenSSH в этой операционной системе. Вы можете настроить клиента самыми разными способами, но в большинстве случаев настройки сводятся к запрету использования функций, предлагаемых сервером. Если вам действительно интересна тема настройки поведения клиента, прочитайте страницу руководства ssh_config(5).

Чтобы подключиться к другому хосту через SSH, следует ввести команду ssh имя_хоста. В ответ вы должны увидеть примерно следующее:

# ssh sardines.blackhelicopters.org

The authenticity of host ‘sardines.blackhelicopters.org (192.168.1.1)’ can’t be established.

DSA key fingerprint is a4:df:7c:7e:Oe:27:e5:21:b4:f4:Oe:2b:c9:10:5f:ea.

Are you sure you want to continue connecting (yes/no)9 yes

(Перевод: Подлинность хоста ‘sardines.blackhelicopters.org (192.168.1.1)’

не может быть установлена.

Отпечаток ключа DSA a4:df:7c:7e:0e:27:e5:21:b4:f4:0e:2b:c9:10:5f:ea. Вы действительно желаете продолжить соединение (yes/no)9)

Клиент сразу же получает открытый ключ хоста, к которому производится подключение, и сверяется со своим внутренним списком ключей SSH. Если ключ, полученный от сервера, присутствует в списке клиента, клиент полагает, что соединение устанавливается с подлинным хостом. Если ключ хоста отсутствует в списке клиента, он выводит цифровой отпечаток ключа, чтобы вы могли одобрить или отвергнуть его.

Отпечаток, представленный клиентом, должен совпадать с отпечатком, сгенерированным на сервере. Если отпечатки не совпадают, значит вы подключились не к тому хосту и следует немедленно разорвать соединение. Если отпечатки совпадают, можно принять ключ и продолжить соединение. После того как вы подтвердите свое желание продолжить, ключ хоста будет сохранен в вашем домашнем каталоге в списке ,ssh/known_hosts.

Если вы создаете новый сервер в локальной сети для личного пользования, возможно, вам не потребуется сравнивать отпечатки ключей вручную. Тем не менее все равно следует скопировать отпечаток ключа, потому что иногда вам может понадобиться подключиться из другого места и проверить ключ. Если к серверу будет подключаться много пользователей, то совсем не лишним будет поместить отпечаток на веб-страницу. Вы сами определяете, какой уровень безопасности вам требуется. Лично я считаю, что лучше излишек осторожности, чем ее недостаток.

Примите ключ хоста, и вам будет позволено выполнить вход в систему. Хотя использование закрытого ключа и секретной фразы предпочтительнее использования простого пароля, все же в SSH пароль защищен намного лучше, чем в telnet.

Копирование файлов через SSH

Клиент SSH хорош для организации доступа к командной строке, а как быть с перемещением файлов из одной системы в другую? SSH включает два инструмента перемещения файлов по сети – scp(l) и sftp(l).

Инструмент scp(l) (secure copy – безопасное копирование) идеально подходит для перемещения отдельных файлов. Команда scp принимает два аргумента: первый – текущее местоположение файла, и второй – место, где файл будет сохранен. Место, куда следует скопировать файл, определяется строкой в формате <имя_полъзователя>@<имя_хос- та>:<имя_файла>. Допустим, требуется скопировать файл bookback- up.tgz из локальной системы на удаленный сервер bewilderbeast.blackhe- licopters.org под другим именем. Для этого вводим команду:

# scp bookbackup.tgz mwlucas@bewilderbeast.blackhelicopters.org:bookbackup- january.tgz

Если файла копируется с тем же именем, то имя файла во втором аргументе можно опустить:

#     scp bookbackup.tgz mwlucas@bewilderbeast.blackhelicopters.org:

Кроме того, scp(l) позволяет копировать файлы из удаленной системы в локальную:

#     scp mwlucas@bewilderbeast.blackhelicopters.org:bookbackup-january.tgz bookbackup.tgz

Если копия файла в локальной системе должна иметь то же самое имя, имя копии в команде можно заменить символом точки:

#     scp mwlucas@bewilderbeast.blackhelicopters.org:bookbackup.tgz .

Наконец, если имена пользователя в удаленной системе и локальной системах совпадают, то можно опустить имя пользователя и символ Например, я могу скопировать свой файл на сервер с помощью команды:

#     scp bookbackup.tgz bewilderbeast.blackhelicopters.org:

Несмотря на кажущуюся сложность, эта команда очень удобна для быстрого перемещения отдельных файлов по сети.

Если вы предпочитаете интерактивные системы или когда заранее неизвестно точное имя файла, который требуется скопировать из удаленной системы, на помощь придет sftp(l). Команда sftp(l) принимает единственный аргумент, состоящий из имени пользователя и имени сервера, в формате, который используется командой scp для обозначения удаленного сервера:

#     sftp mwlucas@bewilderbeast,blackhelicopters.org

Connecting to bewilderbeast… Password: sftp> Is

Интерфейс sftp(l) очень напоминает стандартный клиент FTP; он поддерживает типичные команды FTP, такие как Is (list – список), cd (change directory – изменить каталог), get (download a file – загрузить файл) и put (upload a file – выгрузить файл на сервер). Одно из существенных отличий состоит в том, что sftp(l) не требует выбирать тип передаваемых файлов – ASCII или двоичный; файлы просто передаются в том виде, в каком они есть.

OpenSSH защищает все

Многие сетевые программы включают поддержку SSH для обеспечения взаимодействий. Кроме того, OpenSSH может создавать туннели между портами TCP разных машин. Благодаря OpenSSH можно обеспечить передачу любых данных по сети только в зашифрованном виде.

С помощью команд scp и sftp вы сможете полностью устранить из своей сети пароли в открытом текстовом виде.

Источник: ЛукасМ. FreeBSD. Подробное руководство, 2-е издание. – Пер. с англ. – СПб.: Символ- Плюс, 2009. – 864 е., ил.

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий