Организация безопасного доступа scp и sftp с ограничениями ChrootDirectory
Система ssh
поддерживает полезную функцию передачи файлов по сети между узлами сети, но как-то не особо хочется предоставлять доступ ко всей структуре каталогов в системе, пусть даже только для чтения. В нашем случае речь не идёт о полноценном доступе пользователей к системе, а только о создании учётной записи для передачи файлов по сети посредством scp
и/или sftp
. Можно сказать, что это нечто вроде ограниченного гостевого доступа, но, естественно, с паролем.
Добавим системного пользователя sftp
, который будет использоваться для работы команд scp
и sftp
.
adduser --system --group --disabled-login --no-create-home sftp passwd sftp
Добавим в настройки сервера sshd
(файл конфигурации /etc/ssh/sshd_config
) следующие директивы:
AllowUsers sftp # подсистема sshd для работы sftp Subsystem sftp internal-sftp Match User sftp ForceCommand internal-sftp ChrootDirectory /home/sftp
Создаём каталог /home/sftp
, принадлежащий root
и с правами доступа drwxr-xr-x
- это обязательное условие для корректной работы директивы ChrootDirectory
.
cd /home mkdir sftp chown root:root sftp chmod 755 sftp
Внутри данного каталога создаём некоторую структуру каталогов, в которые пользователь sftp
имеет доступ для записи.
cd /home/sftp mkdir home mkdir home/sftp mkdir tmp mkdir upload chown -R sftp:sftp * chmod -R 750 *
Перезапускаем sshd
.
systemctl reload sshd
Готово! Сейчас вы можете передать файл на данный узел сети.
scp test.txt sftp@hostname:/home/sftp или scp test.txt sftp@hostname:/tmp или scp test.txt sftp@hostname:/upload
Все файлы останутся в пределах каталога в системе /home/sftp
.