Thank you for reading this post, don't forget to subscribe!
В новых версиях 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 разруливать доступ к папкам, используя обычные права доступа.