Я выполнил полдюжины различных уроков по настройке 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, чтобы изменить подсистему 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 принадлежит guest:root с режимом 755.

Используя клиент Transmit sftp на моем Mac, я вошел в систему с гостевым пользователем. По умолчанию он открывает домашний каталог пользователя, но затем я могу перемещаться вверх по уровням каталогов и просматривать другие каталоги на сервере.

В некоторых руководствах говорится, что /var /www /uploads должен иметь режим 700 или 750; если я сделаю это, я все еще могу войти в систему как гость, но по умолчанию вижу корневой каталог сервера и могу просматривать все остальные каталоги.

Другие учебники говорят, что я должен изменить оболочку гостевого пользователя на /bin /false; если я сделаю это, я вообще не смогу войти как гость. Transmit сообщает "Имя пользователя или пароль не были приняты сервером", а клиент sftp из командной строки сообщает "Соединение закрыто" после ввода пароля.

Я думаю, что я все перепробовал - кто-то может увидеть, чего не хватает?

2 ответа2

0

Похоже, что ChrootDirectory должен указывать на один уровень выше домашнего каталога.

Так как дом гостя - /var/www/uploads/guest, то ChrootDirectory должен указывать на /var/www/uploads

Это может быть .... еще одна мысль пришла мне в голову:

Вы вручную установили новый openssh, вы удалили старую версию? Где была установлена новая версия? иногда, если вы не будете осторожны, новые файлы будут установлены в /usr/local/ вместо /usr, что означает, что сервер с поддержкой sftp читает свои файлы конфигурации из /usr/local/etc/ssh/... вместо ожидаемый /etc/ssh/...

Что-то, чтобы проверить по крайней мере.

0

Я боролся с точно такой же проблемой, но решил ее, настроив каталог chrooted, а также все родительские каталоги со следующими разрешениями.

1) Смена владельца на root:

sudo chown root [directory]

2) Удаление всех групповых прав на запись:

sudo chmod 755 [directory]

К сожалению, я думаю, что это означает, что вы не можете напрямую перейти к папке, не принадлежащей root, но будем рады узнать, если кто-нибудь сможет исправить меня в этом!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .