ограничение доступа для пользователя (ssh)

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:

Ну и нако­нец запи­шем огра­ни­че­ния в тот же файл:

Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no

рестар­ту­ем:
systemctl restart sshd

При созда­нии поль­зо­ва­те­ля не надо ука­зы­вать ему шелл, так как он все рав­но не смо­жет им вос­поль­зо­вать­ся. Поэто­му ука­зы­ва­ем в каче­стве шел­ла /bin/false. Домаш­няя пап­ка (точ­нее пап­ка, кото­рую мы ука­за­ли в ChrootDirectory) обя­за­тель­но долж­на иметь вла­дель­цем поль­зо­ва­те­ля root. Ина­че будем полу­чать ошибку:

А вот груп­пу-вла­дель­ца chroot-пап­ки мож­но задать любую.

Рас­смот­рим при­мер созда­ния пользователя:

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

А внут­ри /home раз­ру­ли­вать доступ к пап­кам, исполь­зуя обыч­ные пра­ва доступа.