Ограничение пользователя SSH / SCP / SFTP каталогом

36

Есть ли простой способ ограничить пользователя SCP / SFTP каталогом? Все методы, с которыми я сталкивался, требуют, чтобы я установил chroot-тюрьму, копируя двоичные файлы, но я не думаю, что это необходимо.

phunehehe
источник

Ответы:

29

SSH изначально поддерживает синхронизацию SFTP-пользователя. Вам просто нужно поставить

ChrootDirectory

В вашем конфигурационном файле sshd и перезапустите sshd.

Если вы просто делаете sftp, вам больше ничего не нужно делать. К сожалению, это не работает для scp. Для интерактивной оболочки вам необходимо скопировать двоичные файлы и / dev узлы в chroot.

Пример конфигурации для одного пользователя, testuser:

Match User testuser
    ChrootDirectory /home/testuser
    ForceCommand internal-sftp

Несколько вещей, о которых следует знать, со страницы руководства sshd_config:

    Все компоненты пути должны быть корневыми каталогами, которые не являются
    доступный для записи любому другому пользователю или группе. После chroot sshd (8) изменяет
    рабочий каталог в домашний каталог пользователя.

Ищите ChrootDirectory в man sshd_config для получения дополнительной информации.

Гейб.
источник
2
Обратите внимание, что часть, начинающаяся с «Match User testuser», должна находиться в конце файла, поскольку она будет содержать строки конфигурации, только если пользователь с этого момента является «testuser».
Магнус
1
Также возможно ли Chroot только для протокола SFTP, но все еще разрешать нормальные соединения SCP?
lanoxx
1
На моей машине с Ubuntu 14.04 было также необходимо изменить Subsystem sftp /usr/lib/openssh/sftp-serverстроку наSubsystem sftp internal-sftp -f AUTH -l VERBOSE
partofthething
@Magnus или до другого Matchраздела.
Ройма
12

Chroot - это достаточно простой метод. Поскольку в операционной системе уже есть эта функция безопасности, создатели демонов, как правило, не пытаются переопределить ее.

Rssh поставляется с руководством по настройке chroot тюрьмы. Это в CHROOTфайле в исходном дистрибутиве. В двух словах:

  • Несколько бинарных файлов, скопированных из корня: /usr/bin/scp, /usr/libexec/openssh/sftp-server,/usr/bin/rssh_chroot_helper
  • Библиотеки ( {/usr,}/lib/lib*.so.[0-9]), которые они используют, также скопированы
  • A /etc/passwd(вполне возможно, не копия, но полученная от мастера)
  • Несколько устройств: /dev/null, /dev/tty, а также /dev/logразъем для регистрации (и вам нужно сообщить ваш демон системного журнала , чтобы слушать сокет)

Дополнительный совет, которого нет в документации по rssh: если вам нужно, чтобы некоторые файлы были доступны в изолированной тюрьме chroot, вы можете использовать bindfs или Linux mount --bindдля создания дополнительных иерархий каталогов за пределами тюрьмы. bindfsпозволяет перемонтированному каталогу иметь более строгие разрешения, например, только для чтения. ( mount --bindнет, если вы не примените патч к ядру; Debian включил этот патч с тех пор на востоке Ленни, но в большинстве других дистрибутивов его нет по состоянию на 2011 год.)

Жиль "ТАК - прекрати быть злым"
источник
7

Возможно, вы захотите посмотреть на scponly (или совсем недавно, rssh ); по сути это оболочка входа в систему, которую можно использовать только для запуска scp или подсистемы sftpd. В scponlycварианте он выполняет chroot перед активацией рассматриваемой подсистемы.

Shadur
источник
scponly кажется устаревшим, по крайней мере, в Ubuntu
tobixen