
Я пытаюсь создать новую учетную запись SFTP для моего сервера. Когда я следую этим инструкциямточно, то все работает нормально:https://www.thegeekstuff.com/2012/03/chroot-sftp-setup/
Я могу подключиться к guestuser
пользователю через sftp
, просмотреть свой домашний каталог и перейти на один уровень вверх incoming
в /sftp/guestuser
.
Я даже могу изменить ChrootDirectory
значение в /etc/ssh/sshd_config
специально /sftp/guestuser
, чтобы оно было , вместо реализации %u
параметра. Поэтому жестко закодированные имена каталогов работают нормально.
Но с этого момента, если все, что я делаю, это меняю ChrootDirectory
свою sftpusers
группу на каталог моего фактического веб-сайта на /var/www/www.example.com
, то я больше не могу подключиться через sftp
команду для этого пользователя. Оболочка выводит:
Подключение к www.example.com закрыто удаленным хостом. Не удалось прочитать пакет: подключение сброшено узлом
Я определенно это сделал:
- Убедитесь, что
incoming
папка находится в моем/var/www/www.example.com
каталоге. - Установите право собственности на оба
/var/www/www.example.com
и/var/www/www.example.com/incoming
наguestuser:sftpusers
- Попробовал установить домашний каталог пользователя,
/
выполнив командуusermod guestuser -d /
Каталог /sftp/guestuser
(тот, с которым он работал) принадлежит root:root
, поэтому тот факт, что разрешения /var/www
включены, root:root
не должен иметь значения(?)
Почему я не могу изменить домашний каталог моего нового пользователя SFTP?
ОБНОВЛЯТЬ
Я могу изменить каталог на:
/sftp
/
/var
/var/www
Все это работает. Но как только идет еще один под /var/www
, например /var/www/test
, это не работает. Я пробовал убрать точки из исходного имени каталога, которое было www.example.com
, но это не помогло.
Речь не идет об ограничении количества уровней подкаталогов, потому что /sftp/guestuser/incoming
тоже работало. Тестирование с новым каталогом /web/www.example.com
не дало результата.
решение1
Хорошо, мне удалось определить причину. Каталог, который я определяю как ChrootDirectory
для пользователя, должен принадлежать root
.
Если я хочу, чтобы мой пользователь мог загружать данные (что, очевидно, он не сможет сделать в системе с правами root), то мне нужно создать там подкаталог и установить этот каталог в качестве его домашнего каталога с помощью параметра -d
при создании или редактировании пользователя.
Если в какой-то момент владелец изменится так, что ChrootDirectory
будет принадлежать тому пользователю, который пытается подключиться к нему по ftp, сообщение broken pipe
появится снова. Измените владельца обратно на root
, и пользователь снова сможет подключиться.