Я действительно нуждаюсь в некоторой помощи, я пытался заключить в тюрьму пользователя, использующего ubuntu
.
Вещь отметить:
james
пользовательsshusers
группа/home/james/upload/
каталог, где я хочу заблокировать пользователяsshd_config:
AllowGroups sshusers
Match Group sshusers
ChrootDirectory /home/%u/upload/
ForceCommand internal-sftp
Я следовал ответу на askubuntu, вот мои команды
sudo chown root /home/james
sudo chmod go-w /home/james
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwX /home/james/upload
Проблема:
Я получаю эту ошибку
Error: Network error: Software caused connection abort
Error: Could not connect to server
Я занялся расследованиями в журналах, и я нашел это:
фатальный: плохое владение или режимы для chroot компонента каталога "/home/james/upload /"
Но если я выполняю следующие команды
sudo chown root /home/james/upload
sudo chmod go-w /home/james/upload
Это работает прекрасное, пользователь может соединиться, папка заблокирована, НО не может отбросить файлы в каталоге
Status: Listing directory /
Status: Directory listing successful
Status: Starting upload of C:\Users\Program\AppData\Local\Temp\fz3temp-1\empty_file_yq744zm
Command: put "C:\Users\Program\AppData\Local\Temp\fz3temp-1\empty_file_yq744zm" "test"
Error: /test: open for write: permission denied
Error: File transfer failed
Совет, у меня есть поисковый Google так, все ссылки являются фиолетовыми теперь (посещаемый :P
)
Я использую filezilla клиент для тестирования SFTP
.
ChrootDirectory
директива ожидает, что chroot каталог принадлежит root
, и не перезаписываемый кем-либо еще. Таким образом, Вы не можете заключить в тюрьму пользователя к каталогу и позволить полномочиям пользователя записать в тот каталог. Вы можете:
upload/
Первый набор команд, которые Вы попробовали, корректен для этого:
sudo chown root /home/james
sudo chmod go-w /home/james
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwX /home/james/upload
Однако опция в sshd_config
был бы:
Match Group sshusers
ChrootDirectory %h
ForceCommand internal-sftp
(%h
заменяется корневым каталогом пользователя, аутентифицируемого, эквивалентного /home/%u
для большинства случаев.), Кроме того, для ограничения видимости папок в /home/james
, и ограничьте разрешение записи там, используйте рекурсивные опции для chown
и chmod
в первой команде для /home/james
, и удалите read
полномочия. Измененный набор был бы похож:
sudo chown root /home/james -R
sudo chmod go-rwx /home/james -R # Disallow traversing any directory in home
sudo chmod go+x /home/james # Allow traversing this directory
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwx /home/james/upload
Теперь пользователь должен только смочь получить доступ /home/james/upload
, или /upload
.
upload/some_directory
В значительной степени то же как выше, заменяя /home/james/
с /home/james/upload
, и /home/james/upload
с /home/james/upload/some_directory
. Никакие конкретные усиления.
james
кому: /upload
Обычное поведение ChrootDirectory: "После chroot, sshd (8) изменения рабочий каталог к корневому каталогу пользователя". Таким образом, мы изменяемся james
корневой каталог:
usermod -d /upload user
Затем установите ChrootDirectory
кому: /home/%u
. Используйте те же ограничения в первой опции.
Встроенный sftp chroot механизм в OpenSSH требует, чтобы chroot каталог принадлежал корню (и не перезаписываемый пользователями). Это могло быть болью, если бы каталог является долей SMB/CIFS, например, где необходимо было бы сделать, связывают, монтируются.
Одно из более гибкого решения состояло бы в том, чтобы использовать MySecureShell (http://mysecureshell.readthedocs.io/en/latest/)
apt install mysecureshell
Это работает без любой модификации к Вашим настройкам OpenSSH по умолчанию. Все, что необходимо сделать, заставляют пользователя SFTP войти в оболочку к mysecureshell, и это будет заботиться о ACL chroot / виртуальном chroot для Вас. См. документацию для получения дополнительной информации
Например, после того как Вы установили MySecureShell, можно затем добавить пользователя SFTP (ограниченный их корневым каталогом) как ниже,
sudo useradd -m -d /home/sftpuser01 --shell /usr/bin/mysecureshell sftpuser01
От вышеупомянутого пользователь 'sftpuser01' получит виртуальный chrooted к '/home/sftpuser01' на сессии SFTP.
Это также предоставляет много гибких возможностей управлять ACL, группа и т.д. путем конфигурирования '/etc/ssh/sftp-config'. См. http://mysecureshell.readthedocs.io/en/latest/configuration.html для деталей.