Chrooted SFTP пользовательские разрешения на запись

10

У меня есть настройки только для пользователей sftp:

Match Group sftponly
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Я получаю следующее сообщение в моем secure.log:

fatal: bad ownership or modes for chroot directory

С ключевым словом match уходит кое-что с безопасностью ... каталоги должны принадлежать root, а каталоги должны быть chmod 755 (drwxr-xr-x). Таким образом, для пользователя становится невозможным иметь права на запись в папки, если он доступен только для записи пользователю root и установлен как недоступный для записи для групп из-за безопасности ssh.

Кто-то знает о хорошей работе вокруг?

Adionditsak
источник
Владеет ли chrootпользователь ed ChrootDirectory? Могут ли они получить к нему доступ?
Джон У. С. Смит,

Ответы:

2

У меня такие же настройки на нашем сервере. Мы используем тот же конфиг SSHD. Домашние директории пользователей принадлежат корню и в них есть папки documentsи public_htmlпринадлежат соответствующим пользователям. Затем пользователи входят в систему, используя SFTP, и записывают в эти папки (а не прямо в дом). Поскольку SSH для них не разрешен, он отлично работает. Вы можете настроить, какие каталоги будут создаваться для новых пользователей, в / etc / skel / (по крайней мере, в openSUSE, я не очень знаком с другими дистрибутивами).

Другой возможностью может быть ACL ( документация openSUSE ) - он может добавить разрешение на запись для соответствующего пользователя для его домашнего каталога.

Tilia
источник
1
Для меня в Debian Jessie (8.10) настройка ACL в доме пользователя не работает. Когда пользователь пытается войти с SFTP, он получаетpacket_write_wait: Connection to 10.0.0.42 port 22: Broken pipe
Дрю Чапин
7

Недавно мы нашли обходной путь, который выглядит так:

/ И т.д. / SSH / sshd_config:

...

Subsystem sftp internal-sftp

Match Group sftponly
    ChrootDirectory /home
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

права доступа к каталогу:

root@server:~ # chown root:root /home
root@server:~ # chmod 111 /home
root@server:~ # chmod 700 /home/*

Теперь /homeудовлетворяет требованиям ChrootDirectoryи не может быть перечислено ограниченными пользователями, но sftponlyпользователи не смогут войти в систему, если их домашние каталоги настроены как обычно ( /home/$LOGNAME): в среде chrooted их домашние каталоги находятся не внутри, /homeа непосредственно под root ( /).

Обходной путь 1

Установите дома пользователей с ограниченным доступом так, как они выглядят в chroot:

root@server:~ # usermod -d /username username

предостережение 1

Если кто-либо из неограниченных пользователей или какой-либо сценарий администрирования использует расширение тильды bash, ~usernameоно будет расширяться до /usernameсих пор, а это не то, что подразумевается.

Также администратор, который создает sftponlyпользователей, должен помнить, чтобы использовать нестандартный дом. Решается с помощью сценария. Который админ должен помнить, чтобы использовать.

Обходной путь 2

Это альтернатива предыдущей, которую мы в итоге использовали:

root@server:~ # ln -s . /home/home

То есть создайте символическую ссылку внутри /homeсвоего собственного dirname. Теперь под chroot /home/usernameуказывает на тот же каталог, что и без chroot. Для пользователя с ограниченными правами, вошедшего в систему с помощью sftp, это будет выглядеть как /username. Этот каталог доступен для записи его владельцу (пользователю с ограниченными правами). Пользователь с ограниченными правами не может перечислить свои родительские или домашние каталоги ни одного из братьев по имени.

Единственное, что особенного в sftponlyпользователе - это его участие в sftponlyгруппе. Нам было легче иметь дело, чем обходной путь 1.

пещеры 2

  1. Вы не можете иметь пользователя с именем «home» с домашним каталогом /home/home
  2. Вы должны быть осторожны со скриптами, которые пересекают /homeиерархию и следуют по символическим ссылкам.
ARTM
источник
Привет, артм или другие читатели, я знаю, что это старый пост, но не могли бы вы помочь мне понять обходной путь 2, пожалуйста? У меня есть пользователь (ftpuser), который должен быть заключен в домашний каталог (/ home / ftpuser /), этого я могу достичь, но / home / ftpuser, конечно, должен иметь 755. Мне нужен ftpuser, чтобы иметь возможность создавать файлы и папки в их домашнем каталоге. какую символическую ссылку мне нужно создать, и какое значение должен иметь мой ChrootDirectory, пожалуйста?
Откровенная
4

Вам необходимо создать структуру внутри домашнего каталога пользователя, например, в директориях in и out. Эти каталоги должны принадлежать пользователю, и там он сможет размещать и получать файлы.

YoMismo
источник
0

Вы должны создать следующую структуру каталогов:

/ Главная / пользователь

/ home / user / home / user <- реальный каталог, к которому у пользователя будет доступ

По выбору:

/home/user/.ssh/authorized_keys <- если вы хотите пройти аутентификацию с открытым ключом

Фернандо Улиссес душ Сантуш
источник
0

В ответе на раздел «Права доступа к каталогу» в ответе от @artm (который я только что проверил) .. Я нашел:

root@server:~ # chmod 111 /home <- Does not work

Это не позволяет соединению sftp работать в Ubuntu с разрешениями на выполнение только для всего, т.е. 111.

Я нашел это:

root@server:~ # chmod 555 /home

Работает с подключением к sftp с разрешениями «Чтение» и «Выполнение», т. Е. 555. Не уверен, отличаются ли Debian от других версий, но это то, что работает на моих установках Ubuntu.

willm
источник
0

Когда вы создаете пользователя, вы должны установить владельца, используя chownдля каждого директора для каждого пользователя.

Например:

sudo chown usertest:groupsftp /home/rootsftp/usertest
Мигель Дуэньяс
источник