Вопрос или проблема
Я хочу по умолчанию настроить определенного пользователя на конкретную папку, когда он подключается к моему Ubuntu 18.04 машине через SFTP. Также я хотел немного ограничить SFTP. Этот пост от Digital Ocean дал мне то, что нужно, и помог начать, но это не работает так, как я надеялся.
Я создал папку с названием /var/sftp/my_username. Затем я обновил sshd_config, чтобы включить следующие настройки:
Match User my_username
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/sftp/
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
Я надеялся, что my_username окажется в /var/sftp/my_username и будет там заблокирован. Вместо этого пользователь попадает в /var/sftp и должен открыть ‘my_username’, чтобы перейти в директорию, в которую он может загружать файлы. Это проблема, потому что в /var/sftp в конечном итоге будут перечислены другие подкаталоги sftp для других пользователей (т.е. /var/sftp/your_username).
Что я могу сделать, чтобы по умолчанию установить этого пользователя в /var/sftp/my_username? Я уже пробовал изменить домашнюю директорию пользователя на это местоположение, но безуспешно.
Спасибо!
Я думаю, вам нужно изменить запись ‘ChrootDirectory /var/sftp/’ в sshd_config на что-то вроде ‘ChrootDirectory /var/sftp/my_username’
Спасибо, Олав. Я пробовал это в своем первоначальном решении проблемы. Это не работает. Я не могу установить ChrootDirectory для какой-либо папки, которой не владеет Root.
Я решил эту проблему, просто создав дополнительный уровень папки:
ChrootDirectory /var/sftp/my_username/my_username
Папка /var/sftp имеет несколько имен пользователей для разных пользователей. Каждый пользователь ограничен своей верхней папкой my_username. Они не могут записывать в /var/sftp/my_username, но они владеют /var/sftp/my_username/my_username и могут просто открыть эту подпапку и делать с ней что угодно.
Это дает им возможность записи и скрывает другие папки от других пользователей.
Ответ или решение
Чтобы настроить SFTP-сервер на Ubuntu 18.04 так, чтобы пользователи автоматически попали в свои собственные папки и были ограничены в доступе к другим папкам, выполните следующие шаги:
-
Создание необходимых директорий: Для каждого пользователя создайте отдельную директорию внутри папки /var/sftp. Например, для пользователя
my_username
создайте следующую структуру:sudo mkdir -p /var/sftp/my_username/my_username
После этого настройте права доступа для этих директорий так, чтобы владельцем корневой директории
/var/sftp
былаroot
, а для директории пользователя – сам пользователь. Например:sudo chown root:root /var/sftp sudo chown my_username:my_username /var/sftp/my_username/my_username
-
Настройка файла конфигурации SSH: Откройте файл конфигурации SSH
sshd_config
:sudo nano /etc/ssh/sshd_config
Добавьте следующие строки в конец файла, чтобы применить настройки для конкретного пользователя:
Match User my_username ForceCommand internal-sftp PasswordAuthentication yes ChrootDirectory /var/sftp/my_username PermitTunnel no AllowAgentForwarding no AllowTcpForwarding no X11Forwarding no
Обратите внимание, что
ChrootDirectory
указывает на корневую папку для данного пользователя, а не на папку, в которую вы хотите, чтобы они попали после входа. -
Перезагрузка SSH: После внесения изменений в конфигурацию перезагрузите SSH-сервер, чтобы применить новые настройки:
sudo systemctl restart ssh
-
Проверка доступа: Попробуйте подключиться к серверу с использованием SFTP от имени пользователя
my_username
. Вы должны автоматом попасть в папку/var/sftp/my_username/my_username
и иметь возможность загружать и скачивать файлы в этой директории, при этом другие пользователи не будут видеть ваши папки.
Таким образом, с помощью этих шагов вы создадите изолированную среду для вашего пользователя SFTP и ограничите его доступ к другим пользовательским папкам. Если у вас возникнут дополнительные проблемы или необходимо будет настроить других пользователей, вы можете просто повторить шаги с созданием директорий и добавлением настроек в файл sshd_config
.