Введение
Если вы являетесь системным администратором, управляющим серверами Linux, скорее всего, вам может потребоваться предоставить доступ SFTP некоторым пользователям для загрузки файлов в их домашние каталоги. По умолчанию пользователи, имеющие доступ к системе через SSH, SFTP и SCP, могут просматривать всю файловую систему, включая каталоги других пользователей. Это может не быть проблемой, если эти пользователи заслуживают доверия, но если вы не хотите, чтобы зарегистрированные пользователи могли просматривать систему, вам нужно будет ограничить доступ пользователей к их домашнему каталогу. Это добавляет дополнительный уровень безопасности, особенно в системах с несколькими пользователями.
В этом руководстве мы объясним, как настроить среду SFTP Chroot Jail, которая будет ограничивать пользователей их домашними каталогами. Пользователи будут иметь доступ только по SFTP, доступ по SSH будет отключен. Эти инструкции должны работать для любого современного дистрибутива Linux, включая Ubuntu, CentOS, Debian и Fedora.
Если вы хотите настроить SFTP Chroot Jail на удаленном сервере, читайте дальше, в противном случае пропустите первый абзац «Подключение к серверу» и читайте следующий.
Подключение к серверу
Чтобы получить доступ к серверу, вам нужно знать IP-адрес. Вам также потребуется ваше имя пользователя и пароль для аутентификации. Чтобы подключиться к серверу как root, введите следующую команду:
ssh root@IP_DEL_SERVER
Далее вам нужно будет ввести пароль пользователя root.
Если вы не используете пользователя root, вы можете войти под другим именем пользователя с помощью той же команды, а затем изменить root на свое имя пользователя:
ssh nome_utente@IP_DEL_SERVER
Затем вам будет предложено ввести пароль пользователя.
Стандартный порт для подключения по ssh — 22, если ваш сервер использует другой порт, вам нужно будет указать его с помощью параметра -p, затем введите следующую команду:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Создание группы 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
устанавливает оболочку входа пользователя. Установив логин shell/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
.
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
Тест конфигурации
Теперь, когда вы настроили chroot SFTP, вы можете попытаться войти на удаленный компьютер через SFTP, используя учетные данные пользователя chroot. В большинстве случаев вы будете использовать настольный 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 и подключаться к серверу без ввода пароля.