
Я следовал полудюжине различных руководств по настройке chroot для пользователей sftp, но мои пользователи, находящиеся в тюрьме, все еще могут просматривать родительские каталоги. Я подозреваю, что мои разрешения настроены неправильно, потому что это та часть, которая больше всего различается между руководствами. Вот что я сделал на данный момент:
1) Я использую CentOS 5.6, где OpenSSH по умолчанию имеет версию 4.3, поэтому я вручную установил последнюю версию 5.x. Запуск sshd -v теперь возвращает OpenSSH_5.9p1, OpenSSL 0.9.8e-fips-rhel5.
2) Я отредактировал /etc/ssh/sshd_config, чтобы изменить Subsystem sftp на internal-sftp, и добавил:
Match user guest
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
3) Перезапустил sshd.
4) Создал пользователя «гость» с домашним каталогом /var/www/uploads/guest.
5) /var/www/uploads принадлежит пользователю root:root с правами 755.
6) /var/www/uploads/guest принадлежит гостю:root с правами 755.
Используя клиент Transmit sftp на моем Mac, я вошел в систему как гостевой пользователь. По умолчанию открывается домашний каталог пользователя, но затем я могу перемещаться по уровням каталогов и просматривать другие каталоги на сервере.
В некоторых руководствах говорится, что /var/www/uploads должен иметь режим 700 или 750. Если я это сделаю, я все равно смогу войти в систему как гостевой пользователь, но по умолчанию буду видеть корневой каталог сервера и смогу просматривать все остальные каталоги.
В других руководствах говорится, что мне следует изменить оболочку гостевого пользователя на /bin/false; если я это сделаю, я вообще не смогу войти как гостевой пользователь. Transmit говорит: «Имя пользователя или пароль не были приняты сервером», а клиент командной строки sftp говорит: «Соединение закрыто» после того, как я ввожу пароль.
Думаю, я перепробовал все — может кто-нибудь увидит, чего не хватает?
решение1
Похоже, ChrootDirectory должен указывать на уровень ВЫШЕ домашнего каталога.
Итак, поскольку дом гостя —/var/www/uploads/гость, тоChrootDirectoryдолжен указывать на/var/www/загрузки
Это МОЖЕТ БЫТЬ... Мне пришла в голову еще одна мысль:
Вы вручную установили новую версию openssh, вы удалили старую версию? Где была установлена новая версия? иногда, если вы не будете осторожны, в систему будут установлены новые вещи/usr/локальный/вместо/usr, что означает, что сервер с поддержкой sftp считывает свои файлы конфигурации с/usr/local/etc/ssh/...вместо ожидаемого/etc/ssh/...
По крайней мере, нужно что-то проверить.
решение2
Я столкнулся с точно такой же проблемой, но решил ее, настроив chrooted-каталога также все родительские каталогисо следующими разрешениями
1) Изменение владельца на root:
sudo chown root [directory]
2) Удаление всех разрешений на запись для группы:
sudo chmod 755 [directory]
К сожалению, я думаю, что это означает, что вы не сможете напрямую перейти к папке, не принадлежащей пользователю root, но буду рад услышать, если кто-нибудь сможет меня поправить!