Помещение OpenSSH пользователей в изолированное 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.
Директория, в которую происходит chroot пользователя (не имеет значения, ssh или sftp),
должна принадлежать пользователю root и права на запись должны принадлежать
только владельцу (750, например).
При необходимости пускать пользователей в 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 (ftp://ftp.opennet.ru/pub/security/chroot/ ),
который автоматически находит и копирует в 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/jail
|
|
|
|
Раздел: Корень / Безопасность / Помещение программ в chroot |
1, freebeer (?), 12:11, 26/03/2009 [ответить]
| +/– |
Перечисление в AllowUsers производится без запятых, просто через пробел (в варианте как в статье будет пускать только пользователя user1, посылая куда подальше всех остальных).
В заметке не указано, но работать без этого не будет: директория, в которую происходит chroot пользователя (не имеет значения, ssh или sftp), должна принадлежать пользователю root и права на запись должны принадлежать только владельцу (750, например).
Ну и мелочи:
ChrootDirectory /home/%u проще писать как: ChrootDirectory %h
P.S. Большое спасибо за заметку, давно хотел посмотреть и разобраться, но все не доходили руки.
| |
2, Сергей (??), 15:20, 12/11/2009 [ответить]
| +/– |
Делал chroot заработал как по ssh так и по sftp, но вот одновременно для одного пользователя не работает. Если делаю так
Match group sftponly
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
то работает sftp только, а если так
Match group sftponly
ChrootDirectory %h
AllowTcpForwarding no
X11Forwarding no
то ssh а по sftp не заходит.
Народ помогите разобраться как сделать чтоб то и то работало, а то два логина не хочится заводить.
| |
3, ara (?), 08:51, 28/01/2012 [ответить]
| +/– |
os freebsd openssh-portable-5.8
не работает детальное логирование.
как сделать?
спасибо...
| |
4, DiJey (??), 18:47, 03/12/2012 [ответить]
| +/– |
Хоть бы один рабочий конфиг кто показал sshd_config, еще у меня работает только 1 пользователь, рута после внесения данных настроек вообще перестало пускать.
| |
5, DiJey (??), 19:22, 03/12/2012 [ответить]
| +/– |
вот рабочий, короче рута пускает, у кого не работает отключите SELinux:
http://guruadmin.ru/page/4-metoda-otkljuchenija-selinux
# override default of no subsystems
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
AllowGroups sftponly root
AllowUsers root sftponly
Match group sftponly
ChrootDirectory /var/www/
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
| |
|