Организация безопасного доступа 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.