Создание пользователя Linux с правом доступа только к SFTP без консольного входа в систему

    Общий рейтинг статьи: 0 (проголосовало 0 )
    Опубликовано:  [просмотров 519]


    Secure FTP (SFTP) никакого отношения к FTP не имеет и является надстройкой на протокол SSH и именно этот протокол можно использовать для максимально безопасного (аналогично SSH) доступа к файлам на удаленном сервере.

    Для ограниченного доступа к удаленным файлам в большинстве случаев используется протокол FTP и серверная часть этого протокола в различных вариациях позволяет ограничить доступ пользователя к определенным каталогам файловой системы. Сегодня мы рассмотрим другой подход к решению вопроса предоставления доступа к файлам на сервере и использовать мы будем SFTP (Secure FTP, SSH FTP, но не Simple FTP).

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

    Для работы с SFTP используются обычные системные пользователи описанные в файлах /etc/passwd, shadow и group и естественно, что на них распространяются все ограничения системного пользователя, но часть этих решений можно обойти.

    В этой статье мы рассмотрим механизмы обхода системных ограничений на примере пользователя file_access.

    Запрет доступа к linux-консоли и ограничение доступа к файловой системе

    С версии 4.9 OpenSSH вы можете использовать подсистему internal-sftp. Internal-sftp - позволяет реализовать механизмы chroot для изоляции пользователя в виртуальном окружении ограниченном его домашним каталогом (как наиболее часто применяемое решение).

    Для активации этого механизма вам потребуется создать группу с правами ограниченного доступа и изменить конфигурацию ssh-сервера. Создание пользователя и добавление его в определенную группу довольно типовая операция и мы ее уже рассматривали, поэтому сейчас мы рассмотрим только изменения вносимые в серверную часть ssh-сервера для реализации изоляции пользователя в его домашнем каталоге (у меня используется группа limited_sftp).

    Измените файл /etc/ssh/sshd_config:

    Subsystem sftp internal-sftp

    Match Group limited_sftp
    ChrootDirectory %h
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

    Особенности такого подхода:

    • Секция Match описывающая ограничения на группу limited_sftp должна находиться в конце файла /etc/ssh/sshd_config.
    • На домашний каталог должны быть наложены специфичные разрешения

    В связи с особенностями реализации необходимо сменить владельца домашнего каталога и назначить специфичные права доступа:

    # chown root:root /home/file_access
    # chmod 755 /home/file_access

    Данные права доступа являются обязательным условием и в противном случае при подключении вы получите ошибку:

    fatal: bad ownership or modes for chroot directory "/home/file_access"

    При активации режима internal-sftp пользователь не сможет авторизоваться в консоли сервера, а сможет использовать только протокол SFTP.

    Предоставление доступа к каталогам файловой системы

    Рассмотрим предоставление доступа пользователя к другим каталогам файловой системы (не входящим в модель chroot домашнего каталога) и для этого будет использоваться модель монтирования файловой системы самой в себя (mount -o bind) так как в схеме с chroot символические ссылки работать не будут.

    Первым делом мы создадим каталоги к которым требуется организовать доступ.

    # mkdir /home/file_access/web_files/

    Каталоги создаются внутри домашнего каталога и в последствии в них будут смонтированы други каталоги файловой системы командой:

    # mount -o bind /var/www/html/api/web/content/ /home/file_access/web_files/

    Последнюю команду я рекомендую вписать в файл /etc/rc.local для того чтобы она исполнялась при старте сервера.

    Назначение прав на запись (расширение стандартной UNIX-модели прав)

    Так как все операции в этом режиме проводятся от имени пользователя file_access, то и ограничения на запись, чтение и отображение содержимого каталога накладываются на него стандартные UNIX-овые. 

    В этом случае есть два варианта:

    • Подстроиться под модель стандартных UNIX-ACL
    • Использовать модель расширенных ACL

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

    Для управления логикой расширенной модели ограничения доступа используются команды setfacl и getfacl, они реализуют модель прав доступа к файлам похожую на ту, что используется в Windows. Этот подход уже рассматривался в статье про создание файлового сервера Samba с поддержкой разрешений windows и сейчас я приведу лишь пример как дать права (по умолчанию включая доступ к создаваемым вложенным каталогам) на чтение-запись каталогу для пользователя:

    # setfacl -R -m user:file_access:rwx /var/www/html/api/web/content/new/
    # setfacl -R -m default:user:file_access:rwx /var/www/html/api/web/content/new/

    Первая команда задает разрешения на существующие файлы и каталоги, а вторая задает разрешения для вновь создаваемых файлов и каталогов.


    Связанные записи в блоге

    Обсуждение статьи
    Вопрос нашего пользователяА можно ему вход оставить но запереть его в chroot?
    Ответ на комментарийЯ думаю можно ему shell-скрипт на логин специфичный прописать и он будет при входе сначала chroot-иться, а потом уже shell из того окружения получать. Но тут надо пробовать.

    Ваш комментарий: