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

HELP-ME-24.COM (Freelance Team), Черноусов Антон

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/

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

Оставьте комментарий

Вы должны быть вошедший в чтобы отправить комментарий