
Если вы системный администратор, управляющий сервером Linux, вам, вероятно, потребуется предоставить некоторым пользователям доступ по SFTP для загрузки файлов в их домашние каталоги. По умолчанию пользователи, которые могут войти в систему через SSH, SFTP и SCP, могут просматривать всю файловую систему, включая каталоги других пользователей. Это может не представлять проблемы, если эти пользователи являются доверенными, но если вы не хотите, чтобы вошедшие в систему пользователи могли перемещаться по системе, вам потребуется ограничить доступ пользователей к их домашним каталогам. Это добавляет дополнительный уровень безопасности, особенно в системах с несколькими пользователями.
В этом руководстве мы объясним, как настроить окружение SFTP Chroot Jail, которое ограничит доступ пользователей к их домашним каталогам. Пользователям будет доступен только SFTP-доступ, доступ по SSH будет отключен. Эти инструкции подойдут для любого современного дистрибутива Linux, включая Ubuntu, CentOS, Debian и Fedora.
Создание группы SFTP
Вместо того чтобы настраивать сервер OpenSSH для каждого пользователя индивидуально, мы создадим новую группу и добавим всех наших chroot-пользователей в эту группу.
Выполните следующую команду groupadd , чтобы создать группу пользователей sftponly :
sudo groupadd sftponly
Вы можете назвать группу по своему усмотрению.
Добавление пользователей в группу SFTP
Следующий шаг — добавить пользователей, которых вы хотите ограничить, в группу sftponly .
Если это новая настройка и пользователь не существует, вы можете создать новую учетную запись пользователя , введя:
sudo useradd -g sftponly -s /bin/false -m -d /home/username username
- Параметр
-g sftponlyдобавит пользователя в группу sftponly. - Параметр
-s /bin/falseзадаёт оболочку входа пользователя. Если указать оболочку входа/bin/falseпользователь не сможет войти на сервер по SSH. - Параметр
-m -d /home/usernameуказывает useradd создать домашний каталог пользователя.
Установите надежный пароль для вновь созданного пользователя:
sudo passwd username
В противном случае, если пользователь, которого вы хотите ограничить, уже существует, добавьте пользователя в группу sftponly и измените оболочку пользователя:
sudo usermod -G sftponly -s /bin/false username2
Домашний каталог пользователя должен принадлежать пользователю root и иметь права доступа 755 :
sudo chown root: /home/usernamesudo chmod 755 /home/username
Поскольку домашние каталоги пользователей принадлежат пользователю root, эти пользователи не смогут создавать файлы и каталоги в своих домашних каталогах. Если в домашнем каталоге пользователя нет каталогов, вам потребуется создать новые каталоги , к которым у пользователя будет полный доступ. Например, вы можете создать следующие каталоги:
sudo mkdir /home/username/{public_html,uploads}sudo chmod 755 /home/username/{public_html,uploads}sudo chown username:sftponly /home/username/{public_html,uploads}
Если веб-приложение использует каталог public_html пользователя в качестве корневого каталога документов, эти изменения могут привести к проблемам с правами доступа. Например, если вы используете WordPress, вам потребуется создать PHP-пул, который будет работать от имени пользователя, владеющего файлами, и добавить веб-сервер в группу sftponly .
Настройка SSH
SFTP является подсистемой SSH и поддерживает все механизмы аутентификации SSH.
Откройте файл конфигурации SSH /etc/ssh/sshd_config с помощью текстового редактора :
sudo nano /etc/ssh/sshd_config
Найдите строку # начинающуюся с Subsystem sftp , обычно в конце файла. Если строка начинается с решётки # удалите её и измените её следующим образом:
/etc/ssh/sshd_config
Subsystem sftp internal-sftp
Ближе к концу файла следующий блок настроек:
/etc/ssh/sshd_config
Match Group sftponly ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no
Директива ChrootDirectory задаёт путь к chroot-каталогу. %h означает домашний каталог пользователя. Этот каталог должен принадлежать пользователю root и не должен быть доступен для записи другим пользователям или группам.
Будьте особенно осторожны при изменении файла конфигурации SSH. Неправильная конфигурация может привести к сбою запуска службы SSH.
После завершения сохраните файл и перезапустите службу SSH, чтобы изменения вступили в силу:
sudo systemctl restart ssh
В CentOS и Fedora служба ssh называется sshd :
sudo systemctl restart sshd
Тестирование конфигурации
Теперь, когда вы настроили chroot-окружение SFTP, вы можете попробовать войти на удалённый компьютер через SFTP, используя учётные данные пользователя, находящегося в chroot-окружении. В большинстве случаев вы будете использовать настольный SFTP-клиент, например FileZilla, но в этом примере мы воспользуемся командой sftp .
Откройте SFTP-соединение с помощью команды sftp, указав имя пользователя удаленного сервера и IP-адрес сервера или доменное имя:
sftp username@192.168.121.30
Вам будет предложено ввести пароль пользователя. После подключения удалённый сервер выведет сообщение с подтверждением и приглашение sftp> :
username@192.168.121.30's password: sftp>
Запустите команду pwd , как показано ниже, и если все работает так, как ожидалось, команда должна вернуть / .
sftp> pwd Remote working directory: /
Вы также можете вывести список удаленных файлов и каталогов с помощью команды ls и вы увидите каталоги, которые мы создали ранее:
sftp> ls public_html uploads
Заключение
В этом руководстве вы узнали, как настроить среду SFTP Chroot Jail на сервере Linux и ограничить доступ пользователей к их домашнему каталогу.
По умолчанию SSH прослушивает порт 22. Изменение порта SSH по умолчанию добавляет дополнительный уровень безопасности вашему серверу, снижая риск автоматизированных атак. Вы также можете настроить аутентификацию на основе SSH-ключа и подключаться к серверу без ввода пароля.
Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.
Связанные руководства
- Как изменить порт SFTP
- Как настроить SSH-туннелирование (переадресацию портов)
- Как использовать SSHFS для монтирования удаленных каталогов через SSH
- Генерация ключей SSH в Windows с помощью PuTTYgen
- Как изменить порт SSH в Linux
- Как настроить SSH-ключи в Ubuntu 20.04
- Как настроить SSH-ключи в CentOS 8