Давайте попытаемся ограничить действия пользователя, работающего посредством
openssh, домашней директорией только (в подсистеме
sftp). Иными словами - зададим ему
ChrootDirectory.
SFTP (англ. SSH File Transfer Protocol) — протокол прикладного уровня, предназначенный для копирования и выполнения других операций с файлами поверх надёжного и безопасного соединения. Протокол разработан группой IETF как расширение к SSH-2, однако SFTP допускает реализацию и с использованием иных протоколов сеансового уровня.
Существует заблуждение, что SFTP это просто обычный FTP, работающий поверх SSH. В действительности SFTP — это новый протокол, разработанный с нуля. Иногда его путают с Simple File Transfer Protocol.
1. Создаем группу
sftpusers (результаты наших усилий будут применены к участникам данной группы, only):
Code:
addgroup --system sftpusers
2. Заменяем подсистему
sftp в
/etc/ssh/sshd_config:
Code:
-Subsystem sftp /usr/lib/openssh/sftp-server
+Subsystem sftp internal-sftp
3. В этот же файл запишем ряд ограничений:
Code:
Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
4. Перечитываем конфиг:
Code:
invoke-rc.d ssh reload
5. Берем на заметку, что при создании нового юзера совершенно не обязательно указываеть его шелл; т.к. воспользоваться таковым теперь невозможно.
В качестве шелла указываем
/bin/false; а каталог, указанный в качестве
ChrootDirectory, обязательно должен принадлежать
root, иначе получим следующую ошибку:
Code:
fatal: bad ownership or modes for chroot directory "/home/%username%"
Группу-владельца
chroot-директории возможно задавать любую. Но доступна на запись она должна быть только
root.
6. И - создаем юзера:
Code:
useradd -G sftpusers -s /bin/false -d /home/user1 user1
mkdir /home/user1
chown root:user1 /home/user1
chmod 750 /home/user1