BSDA в вопросах и ответах

Данная книга задумана как методическое пособие для подготовки к экзамену BSDA. Книга, тем не менее, может быть полезна не только тем кто собирается сдавать этот экзамен, но и просто широкому кругу IT-специалистов, желающих систематизировать свои знания об операционных системах семейства BSD (NetBSD, OpenBSD, FreeBSD, DragonFly BSD).

Читать -> BSDA в вопросах и ответах

Материал написан Евгением Миньковским, он старый, но многое актуально для понятия основ и по сей день.

Помещение OpenSSH (SSH) пользователей в изолированное sftp окружение

Начиная с релиза 4.9 в OpenSSH появилась возможность помещать отдельных пользователей в изолированное окружение.
Помещение в chroot управляется через директиву ChrootDirectory, задаваемую в конфигурационном файле sshd_config.
При задействовании sftp-server интегрированного в sshd, при этом не требуется формирование специального chroot окружения.

Пример помещения в chroot:

AllowUsers user1, user2, user3@192.168.1.1, user3@192.168.2.*
Match user user2, user3
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
 
Subsystem       sftp    internal-sftp

Пользователь user1 имеет возможность входа в shell, в то время как user2 и user3 могут работать только по sftp,
без возможность выхода за пределы своей домашней директории.
При этом user3 может входить только с машины 192.168.1.1 и подсети 192.168.2.0/24.

Опция «ForceCommand internal-sftp» разрешает пользователю использовать только sftp, встроенный в sshd.

При необходимости пускать пользователей в shell, необходимо сформировать минимальное chroot-окружение,
скопировав туда необходимые для работы программы и библиотеки.

Например, создадим для пользователей, входящих в группу chrootusers, окружение /home/chroot

В /etc/ssh/sshd_config добавим:

Match Group chrootusers
ChrootDirectory /home/chroot
X11Forwarding no
AllowTcpForwarding no

Для формирования chroot можно использовать скрипт make_chroot_jail.sh, поддерживающий Debian, Suse, Fedora и Redhat Linux:
http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/

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

Рассмотрим создание chroot в Debian или Ubuntu Linux.

Установим необходимые для работы скрипта утилиты:

apt-get install sudo debianutils coreutils

Копируем скрипт make_chroot_jail.sh:

wget http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/make_chroot_jail.sh
chmod 700 ./make_chroot_jail.sh

Определяем список программ для chroot-окружения, в make_chroot_jail.sh находим строки и меняем на свое усмотрение:

...
elif [ "$DISTRO" = DEBIAN ]; then
APPS="/bin/bash /bin/cp /usr/bin/dircolors /bin/ls /bin/mkdir \
/bin/mv /bin/rm /bin/rmdir /bin/sh /bin/su /usr/bin/groups \
/usr/bin/id /usr/bin/rsync /usr/bin/ssh /usr/bin/scp \
/sbin/unix_chkpwd /usr/bin/vi"
else
...

Формат вызова скрипта:
make_chroot_jail.sh логин путь_к_shell путь_к_chroot

Для создания окружения с shell по умолчанию bash для пользователя user1 выполним:

./make_chroot_jail.sh user1 /bin/bash /home/jail

При этом скрипт автоматически скопирует все недостающие в chroot файлы и создаст директорию /home/jail/user1

После обновления базовой системы, обновить chroot можно командой:

./make_chroot_jail.sh update /bin/bash /home/jailsync_chrootscan_ldd_link

SOCKS proxy в SSH

Допустим, у нас есть рабочая станция в локальной сети за firewall’ом; также имеется ssh-доступ на сервер в Интернете. Кроме ssh, никакой связи с внешним миром не имеется, а очень хочется, например, подключиться к какому-нибудь jabber-серверу.

На рабочей станции запускаем простую команду:

ssh -D 5555 user@remotehost -f -N

Теперь, указав в настройках XMPP-клиента (например, Pidgin’а) в качестве SOCKS5 прокси localhost:5555, получим желаемый результат: Pidgin соединяется с сервером через внешний сервер.

Еще один неизвестный мне доселе ssh tip: в комплект поставки ssh входит программка ssh-copy-id, автоматически прописывающая ваш .ssh/.id_rsa.pub в .ssh/authorized_keys на целевом сервере и устанавливающая правильные права. Использовать это проще простого:

ssh-copy-id user@remotehost

2 способа проброса туннелей с использованием ssh

1. туннель ssh

Дано: сервер ourproxy.provider.ru, стоящий на страже локальной сети. Этот сервер доступен извне и на нём работает демон sshd.

Требуется: получить из дома доступ к ресурсам внутри локальной сети, например, к интранет-серверу 10.10.5.1:80

Решение: выполнить на домашней машине команду, пробрасывающую туннель к искомому IP-адресу через ourproxy.provider.ru:

ssh -f -N user@ourproxy.provider.ru -L 8080:10.10.5.1:80

Опция -f говорит ssh, что после соединения нужно уйти в background.
Опция -N указывает, что никаких команд выполнять не нужно
Ключ -L означает, что соединения к localhost на порт 8080 нужно перенаправлять на 80 порт IP-адреса 10.10.5.1

Таким образом, набирая в браузере адрес http://localhost:8080, попадаем на нужный сервер.

2. обратный туннель ssh

Дано: компьютер на работе, находящийся за firewall’ом и nat’ом; компьютер дома с доступом в интернет; сервер ourproxy.provider.ru с работающим sshd, доступный обоим компьютерам. Но в данном случае прямой доступ с ourproxy.provider.ru к рабочей машине отсутствует.

Требуется: получить из дома доступ к сервису sshd на рабочем компьютере.

Решение: на рабочей машине выполнить команду:

ssh -f -N user@ourproxy.provider.ru -R 12345:localhost:22

Опции -f и -N описаны несколькими строчками выше.
Ключ -R означает, что подключения к порту 12345 на ourproxy.provider.ru будут перенаправляться на 22 порт рабочего компьютера.

После выполнения этой команды с рабочей машины можно будет попасть на эту машину с ourproxy.provider.ru, выполнив команду:

ssh -p 12345 user@locahost

По этому же принципу можно получить доступ к прочим ресурсам локальной сети. Вот еще один пример.

На рабочей машине:

ssh -f -N user@ourproxy.provider.ru -R 8080:10.10.5.1:80

На домашней машине:

ssh -f -N user@ourproxy.provider.ru -L localhost:8080:localhost:8080

Теперь, набрав в адресной строке браузера на домашнем компьютере http://localhost:8080, получаем доступ к интранет-серверу за двумя firewall-ами.

Конечно же, это приводит к серьёзной бреши в корпоративной безопасности, поэтому крайне не рекомендуется злоупотреблять этим советом.