SFTP служба обеспечивает безопасный механизм доступа и передачи файлов через туннель SSH. Если вы настраиваете SFTP сервер, доступ к которому будут иметь множество пользователей, то вам нужно настроить защиту не только от внешних угроз для защиты пользователей SFTP, но и для защиты от угроз от легитимных, но (потенциально) злонамеренных пользователей. Это достигается изолированием окружения индивидуальных пользователей SFTP.
В этой инструкции я покажу, как настроить безопасный SFTP сервер на Linux. Это будет достигнуто защитой SFTP сервера от SFTP пользователей и изолированием индивидуальных SFTP пользователей друг от друга. Эту цель можно достичь множеством способов, но я опишу как это сделать способом, основанном на применении MySecureShell.
MySecureShell — это SFTP сервер, основанный на OpenSSH, особенностью его является ряд функций безопасности:
- Ограничение на ширину канала загрузки/выгрузки для каждого соединения
- Ограничение на количество одновременных соединений на один аккаунт
- Сокрытие владельца/группы/прав файла и каталога
- Сокрытие файлов и каталогов, к которым пользователь не имеет доступа
- Ограничение на время жизни соединения
- Chroot для SFTP пользователей в его/её каталоге
- Отклоняются выгрузки файлов или каталогов, которые соответствуют заданным регулярным выражениям
Установка MySecureShell на Linux
Для большинства популярных дистрибутивов MySecureShell распространяется в виде скомпилированных бинарных файлов. Но не для всех они включены в официальные репозитории.
Для пользователей свежей версии Debian всё просто — ставим из официального репозитория.
Debian 8 (Jessie)
apt-get update apt-get install mysecureshell
Чтобы включить все функции, нужно установить уидный бит (setuid) для бинарного файла mysecureshell.
chmod 4755 /usr/bin/mysecureshell
В других дистрибутивах мы добавляем новый источник приложений.
Debian 7 (Wheezy)
echo "deb http://mysecureshell.free.fr/repository/index.php/debian/7.1 testing main deb-src http://mysecureshell.free.fr/repository/index.php/debian/7.1 testing main" >> /etc/apt/sources
Импортируем ключи репозитория GPG:
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys E328F22B gpg --export E328F22B | apt-key add -
Ну и устанавливаем
apt-get update apt-get install mysecureshell
CentOS/RedHat
CentOS 6
echo "[mysecureshell] name=MySecureShell baseurl=http://mysecureshell.free.fr/repository/index.php/centos/6.4/ enabled=1 gpgcheck=0" > /etc/yum.repos.d/mysecureshell.repo yum install mysecureshell
CentOS 5
echo "[mysecureshell] name=MySecureShell baseurl=http://mysecureshell.free.fr/repository/index.php/centos/5.5/ enabled=1 gpgcheck=0" > /etc/yum.repos.d/mysecureshell.repo yum install mysecureshell
Fedora
echo "[mysecureshell] name=MySecureShell baseurl=http://mysecureshell.free.fr/repository/index.php/fedora/19/ enabled=1 gpgcheck=0" > /etc/yum.repos.d/mysecureshell.repo yum install mysecureshell
Ubuntu
Начать нужно с импорта ключей репозитория GPG:
apt-key adv --keyserver pool.sks-keyservers.net --recv-keys E328F22B
Затем добавляем строки репозитория MySecureShell:
add-apt-repository 'deb http://mysecureshell.free.fr/repository/index.php/ubuntu/12.04 testing main'
Всё готово для установки MySecureShell:
apt-get update apt-get install mysecureshell
Установка MySecureShell из бинарных файлов
Установка необходимых зависимостей
Установка зависимостей на Ubuntu или Debian:
$ sudo apt-get install libssl0.9.8 ssh openssh-server gcc make
Установка зависимостей на CentOS, RHEL или Fedora:
$ sudo yum install openssl-devel openssh-server gcc make
$ git clone https://github.com/mysecureshell/mysecureshell $ cd mysecureshell $ ./configure --with-logcolor=yes
Если всё прошло хорошо, то должно быть что-то вроде этого:
MySecureShell has been configured with the following options: Log file: /var/log/sftp-server.log (color: yes) User binaries: /usr/bin Shutdown file: /etc/sftp.shut Configuration file: /etc/ssh/sftp_config Supported: Remote Admin : yes UTF-8 Encoding : yes
Можно запускать компиляцию:
$ make all
И, наконец, устанавливаем (с правами root):
> make install
Настройка MySecureShell
После установки, проверяем, где наш MySecureShell установлен.
whereis mysecureshell /usr/bin/mysecureshell
Чтобы управлять пользователями SFTP с MySecureShell, сначала создайте группу Linux, к которой будут принадлежать все пользователи SFTP. Давайте назовём эту группу «sftp».
Следующие команды нужно выполнять от суперпользователя. В зависимости от вашей системы, вы можете делать это через sudo или su —
groupadd sftp
Затем сконфигурируйте существующих пользователей SFTP (например mial) так, чтобы они принадлежали группе «sftp» и использовали MySecureShell шелл во время входа.
usermod -s /usr/bin/mysecureshell -g sftp mial
Если вы создаёте нового SFTP «с нуля», то тогда команда должна выглядеть так.
useradd -m -s /usr/bin/mysecureshell -g sftp alice
Для изменения дефолтных настроек MySecureShell, отредактируйте его конфигурационный файл, размещённый в /etc/ssh/sftp_config. В конфигурационном файле вы можете определить различные групповые настройки безопасности. Например, для группы Linux «sftp»:
vim /etc/ssh/sftp_config <Group sftp> Download 50k # лимит скорости загрузки для всех соединений Upload 0 # неограниченная скорость аплоада для всех соединений StayAtHome true # ограничить пользователя его/её домашним каталогом VirtualChroot true # фальшивый chroot для домашнего аккаунта LimitConnectionByUser 1 # максимальное число соединений на одну учётную запись LimitConnectionByIP 1 # максимальное количество соединений на один IP для каждой учётной записи IdleTimeOut 300 # отсоединить пользователя при слишком долгой неактивности (в секундах) HideNoAccess true # спрятать файл/каталог к которым пользователь не имеет доступа </Group>
Когда конфигурация завершена, убедитесь, что перезапустили sshd следующим образом.
Для перезапуска sshd на Ubuntu или Debian:
$ sudo service ssh restart
Для перезапуска на CentOS, RHEL или Fedora:
$ sudo service sshd restart
Доступ и управление SFTP сервером
На клиентской стороне, вы можете входить в SFTP сервер следующим образом. Пользователям устанавливается корневой каталог в его собственной домашней папке, и никакие другие директории на сервере не видны для пользователя.
$ sftp mial@192.168.1.37 mial@192.168.1.37's password: Connected to 192.168.1.37. sftp> pwd Remote working directory: / sftp>
На серверной стороне SFTP вы можете управлять SFTP сервером и его пользователями следующим образом.
Для мониторинга пользователей SFTP, которые в данный момент подключены:
$ sftp-who --- 1 / 10 clients ---
Чтобы принудительно отключить определённого пользователя SFTP:
$ sudo sftp-kill mial
Спасибо за материал, наконец то нашел что надо.
И верстка у вас в блоге ползет, у меня монитор 1280, страница по ширине чуть ли не в два раза больше получается, неудобно читать.
В скриптах где то проблема, js отключаешь тогда нормально в ширину вписывается.
Здорово, что понравился сайт !
С версткой все в порядке. После Вашего замечания все исправили. Наслаждайтесь 🙂
Здравствуйте. Очень полезная статься. Единственное что хотелось бы еще узнать это почему может не работать секция virtualhost и параметр CreateHome??
Home /home
CreateHome false
Home /home/en.mysite.com
Т.е. папки создаются при добавлении нового пользователя (в принципе не страшно, но все же)
и почему-то при подключении к en.mysite.com юзер все равно попадает в папку /home