thumb Сервер sshd (OpenSSH) позволяет осуществлять доступ по протоколу SFTP. «OpenSSH» по умолчанию даёт пользователю доступ ко всей файловой системе, тоесть к корню. Но можно chroot-нуть пользователя в его домашнюю директорию. Тоесть юзер будет заперт в своей домашней директории.

Начиная с версии 4.8, «OpenSSH» поддерживает chroot (http://openssh.org/txt/release-4.8) и теперь не нужны патчи.

Подготовка

Право входа в систему по протоколу SFTP будут иметь юзеры имеющие системные учётные записи. В примере Я буду использовать имя юзера Arthur с домашней директорией в /home/Arthur. Юзер Arthur входит в группу users.

Если необходимый юзер ещё не существует, то создадим:

adduser Arthur

Создадим группу:

groupadd users

Добавим юзера Arthur в группу users:

useradd -G users Arthur

Установка OpenSSH

Если OpenSSH ещё не установлен:

apt-get install ssh openssh-server

Включение chrooted SFTP

Для включения SFTP откроем файл настройки OpenSSH сервера:

nano /etc/ssh/sshd_config

и убедимся в том, что имеется одна из этих строк:

Subsystem sftp /usr/lib/openssh/sftp-server

или:

Subsystem sftp internal-sftp

Затем добавим следующий блок в конец файла (для каждого юзера которого хотим chroot-ить необходим отдельный блок):

Match User Arthur
    ChrootDirectory /home
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand /usr/lib/openssh/sftp-server

Примечание: ChrootDirectory - владельцем этого каталога должен быть root и у других юзеров не должно быть прав на запись. Поэтому ChrootDirectory делается на каталог выше, где у юзеров нет прав на запись, а уже внутри каталога /home/Arthur у него есть права на запись.

Если юзеров много, тогда можно chroot-нуть группу в которую входят все юзеры:

Match Group users
    ChrootDirectory /home
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand /usr/lib/openssh/sftp-server

Примечание: Match - поддерживает «User», «Group», «Host» и «Address» - для гибкой и групповой настройки.

Тоесть все входящие в группу users будут chroot-ится в директорию /home.

Перезапустим OpenSSH:

sudo /etc/init.d/ssh restart

или так:

sudo service ssh restart

Если мы chroot-им разных юзеров в одну директорию но не хотим, чтобы они гуляли по домашним директориям других юзеров, тогда нужно изменить права на каждую домашнюю директорию:

chmod 700 /home/Arthur

Теперь можно подключится к нашему хосту по протоколу SFTP.


Arthur Gareginyan

Arthur Gareginyan

Arthur is a designer and full stack software engineer. He is the founder of MyCyberUniverse.com. His personal website can be found at arthurgareginyan.com. Check out his free WordPress plugins at wordpress.org.

Follow Arthur: