Linux настройка прав sftp

Обновлено: 06.07.2024

По умолчанию, при подключении по SFTP пользователь имеет возможность спускаться по дереву каталогов и видеть структуру папок. А при наличии прав, редактировать и удалять файлы. Доступ можно ограничить, создав специальное окружение для определенной папки и всех ее подпапок.

1. Настройка SSH

Открываем конфигурационный файл openssh:

Комментируем следующую строку:

Добавляем следующее (обязательно в самый конец файла).

Для определенного пользователя:

Subsystem sftp internal-sftp -f AUTH -l VERBOSE
Match user sftpuser
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no

* где sftpuser — имя пользователя, для которого срабатывает набор правил; %h (home directory) — домашняя директория пользователя (здесь также можно указать конкретный каталог); ForceCommand internal-sftp — использовать только sftp, встроенный в ssh.
** если данные строки добавить не в конец файла, сервис ssh может не запуститься.

Для группы пользователей:

Subsystem sftp internal-sftp -f AUTH -l VERBOSE
Match group sftpgroup
ChrootDirectory /home/%u
ForceCommand internal-sftp
AllowTcpForwarding no

* как видим, в данном примере все то же самое — только меняем user на group. /home/%u — другой способ прописать путь к домашней директории (/home + имя пользователя).

После перезапускаем службу:

systemctl restart ssh || systemctl restart sshd || service ssh restart || service sshd restart

* команда рассчитана на запуск в разных версиях Linux (CentOS / Ubuntu / Red Hat / Debian и так далее, а также на базе systemd или ранних версий), так как служба может называться ssh или sshd.

2. Создание пользователя и группы

Если в системе еще нет группы или пользователя, для которого мы настроили SSH chroot, выполняем следующие команды.

Создание пользователя

useradd sftpuser -d /home/sftpuser -m

* где sftpuser — имя пользователя; /home/sftpuser — домашний каталог пользователя.

Задаем пароль для пользователя:

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

Для добавления пользователя в группу можно воспользоваться командой:

usermod sftpuser -G sftpgroup

или отредактировать файл:

* 1004 — идентификатор группы (может быть любым числом).

3. Выставление прав на каталог

При попытке подключиться по SFTP мы получим ошибку fatal: bad ownership or modes for chroot directory, так как необходимо выставить правильные права. Система требует, чтобы все каталоги пути имели права 755 и их владельцем был root.

В нашем примере мы выполняем следующие команды:

chown root: /home/sftpuser

chmod 755 /home/sftpuser

Права будут следующие:

drwxr-xr-x 2 root root 4096 окт. 30 09:00 /home/sftpuser/

Проверка и решение проблем

Проверить настройку можно с помощью любого sftp-клиента, например Filezilla или WinSCP.

При возникновении проблем, стоит просмотреть лог

tail -f -n20 /var/log/auth.log

tail -f -n20 /var/log/secure

* первая команда подходит для систем на базе RPM, вторая — Debian.

Lshell как альтернатива chroot ssh

По сути, это более простой способ настроить окружение chroot для пользователя UNIX систем.

Его развертывание сводится к установке:

yum install lshell

apt-get install lshell

* первая команда для Red Hat / CentOS / Fedora . вторая — Debian / Ubuntu.

Favorite

Добавить в избранное

Главное меню » Операционная система Linux » Руководство по настройке SFTP-сервера в Linux

(1 оценок, среднее: 5,00 из 5)

Руководство по настройке SFTP-сервера в Linux

S FTP расшифровывается как SSH File Transfer Protocol. Если вы догадались, это хорошо. Это версия FTP, которая использует SSH сверху. Это позволяет пользователям загружать и скачивать файлы на сервер Linux и с него через зашифрованное соединение. FTP делает то же самое без шифрования, и именно поэтому SFTP сейчас предпочитают FTP.

Давайте посмотрим, как вы можете настроить SFTP-сервер в системе Linux.

Настройка SFTP-сервера в Linux

Мы использовали Ubuntu в этой статье. Команды установки специфичны для Ubuntu и Debian, но остальные шаги можно выполнить в любом другом дистрибутиве Linux.

Для выполнения шагов вам необходимы права sudoer. Поэтому, если вы не обладаете правами sudo, обратитесь к системному администратору. Если вы один из них, пожалуйста, прочитайте о создании пользователя sudo в Ubuntu.

Настройка SFTP очень проста. Прежде чем перейти к этому, вам необходимо установить OpenSSH на стороне сервера и пакет SSH на стороне клиента.

Чтобы установить OpenSSH на сервере, вы можете использовать следующую команду:

Вам также нужен SSH в системе, откуда вы собираетесь получить доступ к SFTP-серверу.

После того, как это будет сделано, у вас будет все готово для настройки SFTP. Это сделано в три этапа, и мы собираемся показать вам их один за другим.

Шаг 1: Создание групп, пользователей, каталогов

Для безопасного использования SFTP (или любой другой службы в целом) лучше всего создавать группы и пользователей, которые будут использовать эту службу и только эту службу. «Лучше всего дать одно конкретное право одной конкретной организации».

В случае, если вы хотите предоставить доступ SFTP, а также нормальный доступ к системе, создайте пользователей таким образом, чтобы их было легко идентифицировать в соответствии с услугой. Например, если andreyex используется для нормального доступа к системе, тогда andreyexsftp может использоваться для доступа SFTP. Используя этот метод будет легче на стороне администрации.

Давайте создадим группу с именем «sftpg» следующим образом:

Давайте создадим пользователя с именем andreyexftp, добавим его в указанную выше группу и дадим ему пароль.

В приведенной выше команде опция -g указывает группу, в которую следует добавить пользователя. Вы можете перечислить всех пользователей в Linux и убедиться, что новый пользователь добавлен.

Предположим, вы хотите использовать каталог /data/в качестве корня для sftp и /data/USERNAME для каждого пользователя. Поэтому, когда пользователи входят в систему через sftp, они должны находиться в /data/USERNAME в качестве каталога по умолчанию (точно так же, как вы находитесь в каталоге /home/USERNAME,когда вы входите в систему Linux через SSH). Кроме того, примите ограничение, что они могут читать файлы из этого каталога, но могут загружать только в каталог загрузки.

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

На данный момент у нас есть пользователь с именем andreyexsftp с группой sftpg и с правами доступа, установленными для /data/andreyexsftp.

Шаг 2. Настройте sshd_config

Далее это вам нужно настроить SSH сервер таким образом, что всякий раз, когда пользователь, принадлежащий к группе sftpg входит в систему, он/она попадает в SFTP вместо обычной оболочки вы получите через SSH . Добавьте следующий фрагмент в /etc/ssh/sshd_config, если его еще нет.

Шаг 3: Перезапустите сервис

Чтобы внести изменения, внесенные в sshd_config, перезапустите службу следующим образом.

Доступ к SFTP через командную строку Linux

Вы можете войти в SFTP, как вы это обычно делаете с SSH.

Примеры команд SFTP

Команды SFTP обычно имеют следующий формат.

Для любой команды аргументами могут быть пути локальной системы или пути удаленной системы. Там нет конкретного видимого различия между ними. Вы можете указать путь как обычно после рассмотрения того, является ли аргумент локальным или удаленным.

/Pictures локальной системы.

/Pictures/poster2.jpg в нашу папку загрузок.

Вышеуказанные команды очень просты и достаточны для изучения FTP /SFTP-сервера. Если вы хотите узнать больше, используйте команду help.

Мы надеемся, что эта статья помогла вам в настройке SFTP-сервера в Linux.

Расскажите нам в комментариях о настройке вашей файловой системы SFTP. Это как упомянуто в этой статье или объединенный каталог или что-нибудь еще?

Если вы нашли эту статью полезной, поделитесь ею с друзьями. Если у вас есть предложения, не стесняйтесь оставить их ниже.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Настройка SFTP доступа

Если по какой-то причине потребовалось дать удаленный доступ к файлам на компьютер под управлением операционной системы из семейства Linux, то безопаснее всего будет это сделать через SFTP. SFTP обозначает SSH File Transfer Protocol, и не имеет никакого отношения к обычному FTP протоколу, а так же в разы безопаснее. Однако, приступим к настройке.

Опубликованные ниже манипуляции проводились с операционной системой Debian 7.

Создание пользователя для SFTP

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

-m - указывает необходимость создать домашнюю директорию пользователя в каталоге /home;
-s - задает оболочку пользователя - /sbin/nologin запрещает пользователю использовать shell.
crazyadmin - имя пользователя

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

Если что-то пошло не так, то всегда можно удалить пользователя командой userdel username, например:

И создадим для нового пользователя папку chroot, о её предназначении будет рассказано ниже.

Настройка сервера SSH

Теперь отправляемся в конфиг SSH - /etc/ssh/sshd_config

Ищем следующую строчку:

Теперь отправляемся в самый конец конфига, и там дописываем:

ChrootDirectory - родительский каталог той папки, к которой мы хотим открыть доступ по SFTP. В данном примере используется директория chroot, которая лежит в папке пользователя.

Если на вашем сервере настроен доступ по SSH только через файл ключа, а нужно сделать возможность заходить по паролю, то тогда дописываем еще следующее:

Если на сервере установлен метод авторизации по паролю, а есть желание сделать более надежную авторизацию через файл ключа, то можно воспользоваться данной статьей.

После завершения всех манипуляций с SSH сервером, его нужно перезагрузить:

Настройка директорий для пользователя SFTP

Отправляемся в директорию /home и там ищем папку свежесозданного пользователя, а в ней папку chroot. Устанавливаем её владельцем пользователя root:

Устанавливаем нужные права на папку:

Внимание! Ни в коем случае не следует выставлять ChrootDirectory какие-либо другие права, в таком случае будет выскакивать следующая ошибка: fatal: bad ownership or modes for chroot directory component.

Теперь представим, что нам нужно предоставить доступ к нескольким папкам, и они все лежат за пределами ChrootDirectory. Выход из ситуации следующий:

Теперь смонтируем в эту папку ту директорию, доступ к которой нам нужно обеспечить:

Если в процессе монтирования директории что-то пошло не так, то можно убрать монтирование командой unmount:

На этом настройка SFTP сервера завершена.

Частые ошибки

  • fatal: bad ownership or modes for chroot directory component - как писалось выше, данная ошибка появляется тогда, когда владельцем ChrootDirectory является не пользователь root, и права не равны 755.
  • No supported authentication methods available (server sent public key) - сервер настроен на авторизацию по ключу. Если нужна авторизация по паролю, то в конфиге /etc/ssh/sshd_config нужно поменять значение у переменной PasswordAuthentication с no на yes, а после перезапустить сервер командой service ssh restart.
Была ли эта статья Вам полезна?
Что в статье не так? Пожалуйста, помогите нам её улучшить!

Комментарии к статье (9)

Такая же ошибка как у Сергея, под crazyadmin не хочет подключатся, а под root сразу заходит.

Команда: open "crazyadmin@192.168.1.50" 22
Команда: Pass: *****
Ошибка: Network error: Software caused connection abort
Ошибка: Невозможно подключиться к серверу
Статус: Отключен от сервера
Статус: Соединяюсь с 192.168.1.50.
Статус: Connected to 192.168.1.50
Статус: Получение списка каталогов.
Статус: Listing directory /root
Статус: Список каталогов "/root" извлечен

OpenSSH сервер обновлен, Iptables и антивирус отключены. Проверял на FileZilla и на WinSCP.

Subsystem sftp internal-sftp

Match User user
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
PermitTunnel no
ForceCommand internal-sftp
ChrootDirectory /home

Если домашний каталог пользователя указать в /dev/null, то невозможно будет сделать авторизацию по ключам, так как негде будет их хранить. Все прекрасно работает и любой нормальном папкой в качестве домашнего каталога, важно чтобы владелец его был root:root и права записи были только у него (750 или 755 на ваш выбор).

При подключении вот такое в filezilla:
Статус: Соединяюсь с xxx.
Ответ: fzSftp started, protocol_version=8
Команда: open "dmitry@xxx" 22
Команда: Pass: **********
Ошибка: Server unexpectedly closed network connection
Ошибка: Невозможно подключиться к серверу

На ум приходит несколько вариантов:

  • Старая версия OpenSSH сервера, попробуйте узнать её с помощью команды sshd -V . Если версия ниже 6.3p1, то вам нужно обновить OpenSSH сервер.
  • Что-то обрывает связь между Вами и сервером (антивирус, фаирволл у клиента или сервера).

Сделал все, как в статье. Но на команду service ssh restart Shell реагирует
Redirecting to /bin/systemctl start ssh.service
Failed to start ssh.service: Unit not found.

И пользователь через WinSCP не может пробиться. И Выдает:
Authentication log (see session log for details):
Using username "userSFTP".
Authentication failed.
The server rejected SFTP connection, but it listens for FTP connections.
Did you want to use FTP protocol instead of SFTP? Prefer using encryption.

Причем, пользователь root заходит без проблем.

По поводу не рабочей команды service ssh restart - какой у вас дистрибютив Linux? Попробуйте команду systemctl restart ssh .

По поводу авторизации - а Вы уверены, что у вас пользователь действительно зовется userSFTP? По умолчанию, Linux не дает использовать заглавные буквы в имени пользователя, убедитесь в правильности его имени и вообще существования в системе.

Ребята, подскажите пожалуйста в чем может быть проблема.
Конфигурация:
Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
UsePrivilegeSeparation yes

KeyRegenerationInterval 3600
ServerKeyBits 1024

SyslogFacility AUTH
LogLevel INFO

LoginGraceTime 120
PermitRootLogin no
StrictModes yes

RSAAuthentication yes
PubkeyAuthentication yes

IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no

X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes

AcceptEnv LANG LC_*

Subsystem sftp internal-sftp

Match User testuser
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
PermitTunnel no
ForceCommand internal-sftp
ChrootDirectory %h/chroot

(/home/testuser - root:root; /home/testuser/chroot - testuser:testuser)

1. В параметре MatchUser - работает, только если указывать группу, а не пользователя. Если прописывать параметр MatchGroup - то не работает.
2. При подключении вижу все корневые папки.

В логах есть что-нибудь, какие-нибудь ошибки?

И как минимум я вижу, что у /home/testuser владельцем должен быть testuser, а у /home/testuser/chroot владельцем должен быть root:root.

Если вы системный администратор, управляющий сервером Linux, скорее всего, вам может потребоваться предоставить SFTP-доступ некоторым пользователям для загрузки файлов в их домашние каталоги. По умолчанию пользователи, которые могут войти в систему через SSH, SFTP и SCP, могут просматривать всю файловую систему, включая каталоги других пользователей. Это может не быть проблемой, если этим пользователям доверяют, но если вы не хотите, чтобы вошедшие в систему пользователи могли перемещаться по системе, вам необходимо ограничить доступ пользователей к их домашнему каталогу. Это добавляет дополнительный уровень безопасности, особенно в системах с несколькими пользователями.

В этом руководстве мы объясним, как настроить среду SFTP Chroot Jail, которая ограничит пользователей их домашними каталогами. Пользователи будут иметь доступ только по SFTP, доступ по SSH будет отключен. Эти инструкции должны работать для любого современного дистрибутива Linux, включая Ubuntu, CentOS, Debian и Fedora.

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

Вместо того, чтобы настраивать сервер OpenSSH для каждого пользователя индивидуально, мы создадим новую группу и добавим в эту группу всех наших chrooted-пользователей.

Выполните следующую команду groupadd чтобы создать sftponly пользователей sftponly :

Добавление пользователей в группу SFTP

Следующим шагом является добавление пользователей, которых вы хотите ограничить, в группу sftponly .

Если это новая настройка и пользователь не существует, вы можете создать новую учетную запись пользователя , набрав:

  • Параметр -g sftponly добавит пользователя в группу sftponly.
  • Параметр -s /bin/false устанавливает оболочку входа пользователя. Установив для оболочки входа значение /bin/false пользователь не сможет войти на сервер через SSH.
  • Параметры -m -d /home/username говорят useradd создать домашний каталог пользователя.

Установите надежный пароль для вновь созданного пользователя:

В противном случае, если пользователь, которого вы хотите ограничить, уже существует, добавьте пользователя в группу sftponly и измените оболочку пользователя:

Домашний каталог пользователя должен принадлежать пользователю root и иметь 755 разрешений :

Поскольку домашние каталоги пользователей принадлежат пользователю root, эти пользователи не смогут создавать файлы и каталоги в своих домашних каталогах. Если в доме пользователя нет каталогов, вам необходимо создать новые каталоги, к которым у пользователя будет полный доступ. Например, вы можете создать следующие каталоги:

Если веб-приложение использует каталог пользователя public_html качестве корня документа, эти изменения могут привести к проблемам с разрешениями. Например, если вы используете WordPress, вам нужно будет создать пул PHP, который будет запускаться от имени пользователя, владеющего файлами, и добавить веб- sftponly группу sftponly .

Настройка SSH

SFTP является подсистемой SSH и поддерживает все механизмы аутентификации SSH.

Откройте файл конфигурации SSH /etc/ssh/sshd_config текстовом редакторе :

Ближе к концу файла следующий блок настроек:

Директива ChrootDirectory указывает путь к каталогу chroot. %h означает домашний каталог пользователя. Этот каталог должен принадлежать пользователю root и не иметь права записи для других пользователей или групп.

Будьте особенно осторожны при изменении файла конфигурации SSH. Неправильная конфигурация может привести к сбою запуска службы SSH.

Как только вы закончите, сохраните файл и перезапустите службу SSH, чтобы применить изменения:

В CentOS и Fedora служба ssh называется sshd :

Тестирование конфигурации

Теперь, когда вы настроили SFTP chroot, вы можете попытаться войти на удаленный компьютер через SFTP, используя учетные данные chrooted пользователя. В большинстве случаев вы будете использовать настольный SFTP-клиент, например FileZilla, но в этом примере мы будем использовать команду sftp .

Откройте SFTP-соединение с помощью команды sftp, за которой следует имя пользователя удаленного сервера и IP-адрес сервера или имя домена:

Запустите команду pwd , как показано ниже, и если все работает, как ожидалось, команда должна вернуть / .

Вы также можете перечислить удаленные файлы и каталоги с помощью команды ls и вы должны увидеть каталоги, которые мы создали ранее:

Выводы

В этом руководстве вы узнали, как настроить среду SFTP Chroot Jail на вашем сервере Linux и ограничить доступ пользователей к их домашнему каталогу.

По умолчанию SSH прослушивает порт 22. Изменение порта SSH по умолчанию добавляет дополнительный уровень безопасности на ваш сервер, снижая риск автоматических атак. Вы также можете настроить аутентификацию на основе ключа SSH и подключиться к серверу без ввода пароля.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Читайте также: