SFTP доступ по OpenSSH
Для чего это нужно? Ограничивает пользователя в одной папке и не позволяет выйти на уровень вверх. В основном используется для предоставления доступа к файловой системе сервера веб-разработчикам. Просто даем доступ к папке с фалами сайта и не позволяем подключаться через ssh. Таким образом, настроив SFTP доступ по OpenSSH, мы обезопасим свой сервер от лишних подключений и обеспечим возможность работы необходимым пользователям.
Теория
sftp user@host.name
Поддержка сервером SFTP определяется как подсистема с указанием программы и опций, которая будет ее выполнять:
/etc/ssh/sshd_config ## По умолчанию Subsystem sftp /usr/lib64/misc/sftp-server ## Альтернатива #Subsystem sftp internal-sftp
если ее закомментировать, то подключиться sftp не получится
subsystem request failed on channel 0 Couldn't read packet: Connection reset by peer
Настройка
Рассмотрим следующий вариант: нам зачем-то нужно создать пользователя user и предоставить ему полный доступ только к папке с файлами /home/files по sftp (например будет пользоваться WinSCP), при этом отключим ему возможности ssh и выходить за пределы каталога home (сделаем chroot).
ChrootDirectory — владельцем этой папки должен быть root и у других пользователей не должно быть прав на запись. В противном случае получим ошибку:
fatal: bad ownership or modes for chroot directory
Поэтому ChrootDirectory делается на каталог выше, где у пользователя нету прав на запись, а уже внутри каталога /home/files у него есть права на запись. Создаем пользователя:
useradd -d /dev/null -M -s /bin/bash user passwd user
Создаем папку
mkdir /home/files chmod 777 /home/files # по вашему желанию chown user:user /home/files # по вашему желанию
Настройки sshd
/etc/ssh/sshd_config ... Subsystem sftp internal-sftp Match User user X11Forwarding no AllowTcpForwarding no AllowAgentForwarding no PermitTunnel no ForceCommand internal-sftp ChrootDirectory /user_dir
Общий порядок действий:
- Заводим пользователя
- Задаем пароль
- Добавляем его в группу(например www-data). В моем случае это необходимо чтобы пользователь мог редактировать файлы сайта.
- Создаем папку для пользователя (/user_dir). Выше нее пользователь не поднимется. ВАЖНО: владелец папки должен быть root!!!!
- Создаем папку /user_dir/files — в эту папку мы будем монтировать нужную папку, если она находится у вас в дебрях где то. Владельцем папки делаем необходимого пользователя.
Монтируем нужную папку во вновь созданную
mount –bind /var/www/sites /user_dir/files