Мне действительно нужна помощь, я пытаюсь посадить пользователя в тюрьму с помощью 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
.
решение1
Директива ChrootDirectory
ожидает, что директория chroot принадлежит пользователю root
и недоступна для записи никому другому. Таким образом, выне могуЗаключить пользователя в каталог и разрешить ему запись в этот каталог. Вы можете:
Chroot на домашний сервер, загрузить на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
.
Chroot для загрузки, загрузить в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
. Используйте те же ограничения, что и в первом варианте.
решение2
Встроенный механизм sftp chroot в OpenSSH требует, чтобы каталог chroot принадлежал пользователю root (и не был доступен для записи пользователям). Это может быть неприятно, если каталог является общим ресурсом SMB/CIFS, например, где вам придется выполнять монтирование bind.
Одним из наиболее гибких решений было бы использование MySecureShell (http://mysecureshell.readthedocs.io/en/latest/)
apt install mysecureshell
Он работает без каких-либо изменений в настройках OpenSSH по умолчанию. Все, что вам нужно сделать, это сделать оболочку входа вашего пользователя SFTP mysecureshell, и он позаботится о ACL/virtual chroot для вас. Подробности смотрите в документации,
Например, после установки MySecureShell вы можете добавить пользователя SFTP (ограниченного его домашним каталогом), как показано ниже:
sudo useradd -m -d /home/sftpuser01 --shell /usr/bin/mysecureshell sftpuser01
Исходя из вышесказанного, пользователь «sftpuser01» получит виртуальный chroot в «/home/sftpuser01» в сеансе SFTP.
Он также предоставляет множество гибких опций для управления ACL, группой и т. д. путем настройки '/etc/ssh/sftp-config'. Пожалуйста, обратитесь кhttp://mysecureshell.readthedocs.io/en/latest/configuration.htmlдля получения подробной информации.