Если вы системный администратор, управляющий сервером Linux, скорее всего, вам может потребоваться предоставить SFTP-доступ некоторым пользователям для загрузки файлов в их домашние каталоги. По умолчанию пользователи, которые могут войти в систему через SSH, SFTP и SCP, могут просматривать всю файловую систему, включая каталоги других пользователей. Это может не быть проблемой, если этим пользователям доверяют, но если вы не хотите, чтобы вошедшие в систему пользователи могли перемещаться по системе, вам необходимо ограничить доступ пользователей к их домашнему каталогу. Это добавляет дополнительный уровень безопасности, особенно в системах с несколькими пользователями.
В этом руководстве мы объясним, как настроить среду SFTP Chroot Jail, которая ограничит пользователей их домашними каталогами. Пользователи будут иметь доступ только по SFTP, доступ по SSH будет отключен. Эти инструкции должны работать для любого современного дистрибутива Linux, включая Ubuntu, CentOS, Debian и Fedora.
Содержание
Создание группы SFTP
Вместо того, чтобы настраивать сервер OpenSSH для каждого пользователя индивидуально, мы создадим новую группу и добавим в эту группу всех наших chrooted-пользователей.
Выполните следующую команду groupadd
чтобы создать sftponly
пользователей 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/username
sudo 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
группу sftponly
.
Настройка SSH
SFTP является подсистемой SSH и поддерживает все механизмы аутентификации SSH.
Откройте файл конфигурации SSH /etc/ssh/sshd_config
текстовом редакторе :
sudo nano /etc/ssh/sshd_config
Найдите строку, начинающуюся с Subsystem sftp
, обычно в конце файла. Если строка начинается с хеша #
удалите хеш #
и измените его, чтобы он выглядел следующим образом:
Subsystem sftp internal-sftp
Ближе к концу файла следующий блок настроек:
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
Тестирование конфигурации
Теперь, когда вы настроили SFTP chroot, вы можете попытаться войти на удаленный компьютер через SFTP, используя учетные данные chrooted пользователя. В большинстве случаев вы будете использовать настольный SFTP-клиент, например FileZilla, но в этом примере мы будем использовать команду sftp .
Откройте SFTP-соединение с помощью команды sftp, за которой следует имя пользователя удаленного сервера и IP-адрес сервера или имя домена:
sftp [email protected]
Вам будет предложено ввести пароль пользователя. После подключения удаленный сервер отобразит подтверждающее сообщение и приглашение sftp>
:
[email protected]'s password:
sftp>
Запустите команду pwd
, как показано ниже, и если все работает, как ожидалось, команда должна вернуть /
.
sftp> pwd
Remote working directory: /
Вы также можете перечислить удаленные файлы и каталоги с помощью команды ls
и вы должны увидеть каталоги, которые мы создали ранее:
sftp> ls
public_html uploads
Выводы
В этом руководстве вы узнали, как настроить среду SFTP Chroot Jail на вашем сервере Linux и ограничить доступ пользователей к их домашнему каталогу.
По умолчанию SSH прослушивает порт 22. Изменение порта SSH по умолчанию добавляет дополнительный уровень безопасности на ваш сервер, снижая риск автоматических атак. Вы также можете настроить аутентификацию на основе ключа SSH и подключиться к серверу без ввода пароля.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.