Вопрос или проблема
Я настраиваю SFTP на машине с Linux. Ниже приведены некоторые детали существующей структуры папок:
/var/home/outbound/
/var/home/outbound/user1
/var/home/outbound/user2
/var/home/outbound/user3
Я создал группу sftpusers
и добавил пользователей 1
, 2
и 3
. Домашний каталог для каждого пользователя выглядит следующим образом:
Для user1: /var/home/outbound/user1
Для user2: /var/home/outbound/user2
Для user3: /var/home/outbound/user3
Я обновил файл конфигурации SSHD, добавив следующие данные:
Match Group sftpusers
ChrootDirectory /var/home/outbound
ForceCommand internal-sftp
PasswordAuthentication yes
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
Каждый раз, когда пользователь пытается подключиться по SFTP, он будет помещен в папку /var/home/outbound
(так как это установлено как ChrootDirectory
) и сможет выполнять cd
во все папки в каталоге outbound
. Но у меня есть требование, чтобы user1
мог подключаться по SFTP только в свою конкретную папку – /var/home/outbound/user1
, а user2
– только в свою конкретную папку – /var/home/outbound/user2
и так далее.
Я также попробовал следующие варианты в файле конфигурации SSHD:
Вариант 1:
Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
PasswordAuthentication yes
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
Вариант 2:
Match Group sftpusers
ChrootDirectory /var/home/outound/%u
ForceCommand internal-sftp
PasswordAuthentication yes
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
В обоих случаях я получил следующую ошибку:
fatal: bad ownership or modes for chroot directory "/var/home/outbound/user1" [postauth]
Как мне обновить файл конфигурации SSHD, чтобы это учесть?
Ответ или решение
Для настройки SFTP на вашем Linux-сервере с несколькими пользователями и с использованием изолированных домашний директорий для каждого пользователя, необходимо учитывать некоторые важные аспекты конфигурации SSHD и разрешений на файлы. Рассмотрим шаги для корректной реализации вашей задачи.
1. Настройка структуры каталогов
Для начала убедитесь, что у вас правильная структура каталогов для каждого пользователя. Вы уже создали необходимые каталоги:
/var/home/outbound/
├── user1
├── user2
└── user3
Каждый из этих каталогов должен быть помещен в отдельную директорию для создания подходящей среды chroot. Ваша текущая структура правильна, и следует убедиться, что каталог /var/home/outbound
имеет корректные разрешения.
2. Установить правильные разрешения
Одной из распространенных причин ошибки fatal: bad ownership or modes for chroot directory
является неправильное управление правами на каталоги. Убедитесь, что:
- Корневой каталог для chroot (в вашем случае
/var/home/outbound
) должен принадлежать пользователюroot
и иметь права доступа755
. - Подкаталоги для каждого пользователя должны принадлежать соответствующим пользователям и могут иметь права
700
.
Примените следующие команды для изменения прав и владельцев:
sudo chown root:root /var/home/outbound
sudo chmod 755 /var/home/outbound
sudo chown user1:user1 /var/home/outbound/user1
sudo chmod 700 /var/home/outbound/user1
sudo chown user2:user2 /var/home/outbound/user2
sudo chmod 700 /var/home/outbound/user2
sudo chown user3:user3 /var/home/outbound/user3
sudo chmod 700 /var/home/outbound/user3
3. Обновление конфигурации SSHD
Теперь нужно обновить файл конфигурации SSHD. Чтобы пользователи при подключении через SFTP сразу попадали в свои домашние каталоги, отредактируйте файл /etc/ssh/sshd_config
следующим образом:
Match Group sftpusers
ChrootDirectory /var/home/outbound
ForceCommand internal-sftp
PasswordAuthentication yes
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
PermitRootLogin no
Обратите внимание, что здесь мы используем настройку ChrootDirectory /var/home/outbound
, которая должна корректно работать, при условии, что права установлены, как указано выше. Члены группы sftpusers
будут помещены в этот каталог, где не смогут поднять уровень доступа.
4. Пер перезапуск SSHD
После внесения изменений в конфигурационный файл, необходимо перезапустить SSH-демон:
sudo systemctl restart sshd
5. Подключение пользователей
Теперь пользователи user1
, user2
и user3
могут подключаться к SFTP с помощью своих учетных данных и будут изолированы в своем каталоге. Каждый из них будет видеть только свой каталог и у них не будет доступа к другим директориям.
Заключение
Следуя вышеуказанным шагам, вы настроите SFTP на вашем сервере с полным соответствием требованиям безопасности и функциональности. Не забывайте регулярно проверять логи /var/log/auth.log для выявления возможных проблем с подключением. Надеюсь, эта информация окажется полезной для успешной реализации вашей задачи.