Ограничение доступа SFTP пользователя или SSH Chroot

По умолчанию все SFTP пользователи в Linux не ограничены в правах на просмотр директорий выше своей домашней директории. Если нужно ограничить пользователя только своей домашней директорией для этого можно воспользоваться пакетом lshell


1. Устанавливаем пакет lshell

Для Debian/Ubuntu

apt-get install lshell


Для CentOS

yum install lshell


Если в системе нет пакета lshell то качаем и устанавливаем его с git

git clone https://github.com/ghantoos/lshell.git
cd lshell
python setup.py install --no-compile --install-scripts=/usr/bin/


После установки в системе должен появиться новый шелл, проверяем его версию

lshell --version
lshell-0.9.18 - Limited Shell


Конфигурационный файл нового шелла находится в файле /etc/lshell.conf

По умолчанию доступно несколько команд:

allowed         : ['ls', 'echo','ll']


Добавляйте команды которые хотите разрешить пользователю.

Если требуется предоставить пользователю доступ по SFTP протоколу то нужно включить эту опцию:

sftp            : 1


Также нужно установить пакет mysecureshell командой

apt-get install mysecureshell


В файле конфигурации ssh службы /etc/ssh/sshd_config
найти строчку:

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


и заменить ее на

Subsystem sftp /usr/bin/mysecureshell -c sftp-server


этим мы сменим систему работы с sftp с openssh на mysecureshell

В конфигурационный файл mysecureshell который находится по адресу /etc/ssh/sftp_config добавить следующие настройки для группы sftp (предварительно ее создав):

<Group sftp>
        Download                50k     # limit download speed for each connection
        Upload                  0       # unlimit upload speed for each connection
        StayAtHome              true    # limit user to his/her home directory
        VirtualChroot           true    # fake a chroot to the home account
        LimitConnectionByUser   1       # max connection for each account
        LimitConnectionByIP     1       # max connection by IP for each account
        IdleTimeOut             300     # disconnect user if idle too long time (in sec)
        HideNoAccess            true    # hide file/directory which user has no access
</Group>


Создание группы SFTP

groupadd sftp


Посмотреть номер группы можно командой

cat /etc/group


В ответ получим: sftp:x:1006:

Пользователя нужно добавить в эту созданную группу в файле /etc/passwd

Перегружаем службы mysecureshell и ssh командами:

/etc/init.d/mysecureshell restart
/etc/init.d/ssh restart


2. Создаем нового пользователя командой:

useradd testuser -d /home/testuser -m


/home/testuser — домашняя директория пользователя testuser может быть любой

Задаем пароль новому пользователю:

passwd testuser


3. Меняем shell для нашего пользователя (или любого другого который есть в системе) на lshell.

Открываем файл /etc/passwd и в строке пользователя меняем shell с /bin/bash на /usr/bin/lshell

В итоге должно получиться:

testuser:x:1003:1006::/home/testuser:/usr/bin/lshell


для проверки можете зайти под созданным пользователем командой

su testuser


в ответ получите:
You are in a limited shell.
Type '?' or 'help' to get the list of allowed commands

и перейдете в корневую директорию пользователя testuser, при попытке подняться вверх по дереву или перейти в любую другую директорию выше корневой вы получите:

cd…
*** forbidden path:

Комментарии (0)

RSS свернуть / развернуть
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.