В новых версиях openssh (хотя не таких уж и новых, >= 4.9 если не ошибаюсь) есть возможность ограничить доступ пользователя в подсистеме sftp. Т.е. задать ему ChrootDirectory
, как в proftpd. Например в домашнюю папку (ибо нефиг лазить за её пределами). Рассмотрим, как это можно реализовать.
Для начала, создадим группу sftpusers
. Ограничения будут действовать только на пользователей из этой группы (мы не хотим ограничивать пользователя root
):
groupadd --system sftpusers
Далее заменим подсистему sftp в /etc/ssh/sshd_config
:
1 2 |
<span class="deletion">-Subsystem sftp /usr/lib/openssh/sftp-server</span> <span class="addition">+Subsystem sftp internal-sftp</span> |
Ну и наконец запишем ограничения в тот же файл:
Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
рестартуем:
systemctl restart sshd
При создании пользователя не надо указывать ему шелл, так как он все равно не сможет им воспользоваться. Поэтому указываем в качестве шелла /bin/false
. Домашняя папка (точнее папка, которую мы указали в ChrootDirectory
) обязательно должна иметь владельцем пользователя root
. Иначе будем получать ошибку:
1 |
<span class="identifier">fatal</span><span class="symbol">:</span> <span class="identifier">bad</span> <span class="identifier">ownership</span> <span class="identifier"><span class="keyword">or</span></span> <span class="identifier">modes</span> <span class="identifier"><span class="keyword">for</span></span> <span class="identifier">chroot</span> <span class="identifier">directory</span> <span class="string">"/home/%username%"</span> |
А вот группу-владельца chroot
-папки можно задать любую.
Рассмотрим пример создания пользователя:
1 2 3 4 |
useradd -G sftpusers -s /bin/false -d /home/user2 user2 mkdir /home/user2 chown root:user2 /home/user2 chmod <span class="number">750</span> /home/user2 |
Если по каким-то причинам, подобные извращения с доступом к домашней папке недопустимы, имеет смысл поставить ограничение на один каталог выше, т.е. жестко прописать:
1 |
ChrootDirectory /home |
А внутри /home
разруливать доступ к папкам, используя обычные права доступа.