Монтирование sftp диска в linux права

Обновлено: 08.07.2024

Здравствуйте. Подскажите, какие нужно команды написать, чтобы создать нового пользователя, у которого будет доступ к папке /var/www - это место, где лежат все папки с сайтами. Чтоб пользователь мог создавать, удалять и редактировать папки и файлы. Мне даже лучше, если пользователь будет иметь доступ ко всему серверу, чтобы проще было конфиги редактировать.

Казалось бы, это же базовая потребность FTP, но я не могу найти в сети ни одной инструкции, в которой бы было сказано, как такое реализовать. Там либо: А давайте создадим пользователя и дадим ему доступ к папке ftp, в которой нифига нет и которая никому не сдалась Либо: А давайте создадим пользователя, но чтобы у него не было никаких прав на редактирование, а то удалит что-нибудь лишнее (а н***я он тогда вообще нужен?) извините. бомбит у меня.

У меня Ubuntu 20 и apache.

Напишите пожалуйста, что нужно сделать в консоли или скиньте ссылку на инструкцию пожалуйста

Перемещено alpha из web-development

А давайте создадим пользователя и дадим ему доступ к папке ftp

А вообще лучше используй sftp. Обычно работает из коробки, если есть доступ к серверу по ssh, при этом доступны все те же файлы, что и твоему пользователю (руту, соответственно, доступна вся система)

KivApple ★★★★★ ( 09.08.21 05:15:29 )
Последнее исправление: KivApple 09.08.21 05:15:41 (всего исправлений: 1)

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

sudo useradd твой-пользователь2

sudo passwd твой-пользователь2

====== Создаем группу для пользователей с полным доступом к /var/www ======

sudo groupadd dostupwww

sudo chgrp -R dostupwww /var/www

sudo chmod -R 770 /var/www

====== Добавляем нужных пользователей в группу доступа ======

sudo usermod -a -G dostupwww твой-пользователь1

sudo usermod -a -G dostupwww твой-пользователь2

Чтобы изменения вступили в силу, пользователю следует заного войти в систему.

Kinlipan ( 09.08.21 05:55:40 )
Последнее исправление: Kinlipan 09.08.21 06:12:34 (всего исправлений: 6)

я вроде вижу свет в конце туннеля.

Осталось закрыть один момент: Вопрос по доступам. Как сделать, чтобы группа dostupwww выше /var/www не поднималась? Даже список файлов не видели


Настроить chroot в vsftpd.

====== Добавить в конец конфигурационного файла /etc/vsftpd.conf следующие строки ======

write_enable=YES
local_enable=YES
user_sub_token=$USER
local_root=/home/$USER/var/www
chroot_local_user=YES

====== Создадим локальный ограничительный путь /var/www в домашнем каталоге каждого пользователя группы dostupwww (выше которого подняться не получится) ======

sudo mkdir /home/твой-пользователь2/var

sudo mkdir /home/твой-пользователь2/var/www

sudo chown nobody:nogroup /home/твой-пользователь2/var/www

sudo chmod a-w /home/твой-пользователь2/var/www

(так сделать не только для твой-пользователь2, а всем пользователям группы dostupwww).

====== Затем каждому пользователю группы dostupwww в пользовательском домашнем каталоге создать по символьной ссылке на /var/www ======

sudo ln -s /var/www /home/твой-пользователь2/var/www/

sudo ln -s /var/www /home/твой-пользователь1/var/www/

(так сделать не только для твой-пользователь2 и твой-пользователь1, а всем пользователям группы dostupwww).

====== Перезапустить сервис vsftpd ======

sudo systemctl restart vsftpd

Kinlipan ( 09.08.21 18:18:56 )
Последнее исправление: Kinlipan 09.08.21 18:40:34 (всего исправлений: 10)

Получилось-то в итоге?

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

Почему сразу не писать адрес папки?

В итоге путь к файлам сайтов на сервере для FTP-пользователя будет выглядеть таким образом: /home/nastya97core/var/www/www (последний www — и есть символьная ссылка на реальный /var/www, которую увидит FTP-пользователь при подключении к серверу).

Похоже, конечно. Только символьная ссылка — совсем не ярлык.

Ярлык — это просто небольшой файл-перенаправление, а не реальная ссылка. Например, когда вы дважды щелкаете по ярлыку папки, Windows перенаправляет вас в место перенаправления.

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

Kinlipan ( 09.08.21 22:43:06 )
Последнее исправление: Kinlipan 09.08.21 23:11:22 (всего исправлений: 14)

Нет. Совсем не то же самое.

С помощью команды mount можно примонтировать раздел диска (накопителя данных) или один каталог в другой каталог.

Вы можете примонтировать любой каталог файловой системы Linux в другой каталог без явных ограничений. Для этого используется все та же команда mount . Только вышеуказанную команду нужно использовать вместе с опцией --bind. Только вам сразу следует задуматься, зачем вы это делаете. Если вам необходимо связать эти папки на постоянной основе (например, для FTP-сервера), лучшим решением будет создать символическую ссылку.

Настройка 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.

SSHFS на Windows 10 для монтирования папки из Linux Debian 10

Сегодня расскажу как смонтировать папку (например, с сайтами) из Debian в Windows 10 по SSH (SFTP) с удобным включением/выключением. Под нужным пользователем (www-data) с нужными правами.

Ниже длинное вступление о том как и зачем мне это нужно . Его можно промотать.

Те кто читал мои посты в блоге и видел видосики на канале знают что в основном я занимаюсь разработкой своих сайтов на WordPress, Yii, Laravel. Основной инструмент — PhpStorm. Боевые проекты хостятся на разных вдсках в основном это FastVPS и RuWEB. Везде Debian + Nginx и везде более менее стандартный конфиг (с поправкой на версии и нагрузку кажого из проектов). Всего порядка десяка вдсок.

Разработка и бэкапы на локальной машине под Windows 10 , где крутится усредненный аналог боевой конфиги в VirtualBox . Т.е. дев сервер сейчас это Debian 10 + Nginx 1.15.

Разработка и деплой на rsync

Я знаю про Docker :)

Эта схема не тренд, а мой личный велосипед. Логичнее было все это хозяйство контейнезировать и деплоить через гит. Однако некоторые проекты контейнезировать без потерь крайне сложно, а городить разные инфраструктуры при работе в одни руки не эффективно. Мой велосипед вполне успешно работает уже много лет, но есть одна проблема, над которой я бьюсь столько же лет сколько велосипед существует.

Проблема на самом деле в PhpStorm

SSHFS на Windows 10 для монтирования папки из Linux Debian 10

В PhpStorm когда вы создаете проект из ранее созданных файлов ( Create New Project from Existing Files ) у вас есть по сути два выбора — файлы проекта расположены локально или удаленно. Если создать проект из удаленных файлов, то PhpStorm будет скачивать их все на локальный диск для индексации. А при изменении закачивать их обратно на удаленный сервер (например по SFTP). Это не проблема, когда разработка идет на одном компьютере.

Разработка на разных компах, в разных сетях

Однако я работаю сразу на 3х — стационарный десктоп под Windows 10, два ноутбука. Один ноут используется дома (нравится мне менять места и позы во время работы), второй используется реже — вне дома. И в этом случае возникает сложность синхронизации локальных проектов одного и того же удаленного проекта. Особенно если это проекты с множеством мелких файлов. Например Laravel c Laravel Mix. Короче жуткая головная боль.

Монтирование папки из Debian все бы решило

Куда проще если бы можно было подмонтировать удаленную папку сайта и создавать проект в PhpStorm как с локальными файлами. В Ubuntu это делается элементарно, а вот под виндой все на порядок сложнее.

Вариант с Samba

В принципе дома у меня работала схема с Samba сервером на дев виртуалке под юзером www-data. Но если работать с дев сервером с улицы (через проброс портов через роутер) и если домашний ip динамический, то возникает несколько сложностей — нужно каждый раз менять ip, пробрасывать порт в роутере ещё и на самбу (лишняя уязвимость), перемонтировать диски. Короче хотелось так чтобы как в Ubuntu. И выход нашелся.

Монтирование папки из Linux (Debian) в Windows по SFTP

Итак ставим сначала WinFSP, затем SSHFS-Win. Сразу после перезагрузки диски папки можно будет легко монтировать прямо из проводника Windows 10. См. картинку.

Монтирование папки через проводник в SSHFS-Win

Однако в моем случае это не решило проблему.

Нестандартные порты SSH при монтировании

При монтировании папки через проводник вы можете указать путь до папки на сервере, но не можете указать порт SSH, если ssh висит не на 22. Это можно сделать в командной строке

Добавила manager_user в группу site
При заходе по stfp - пишет, аутентификация не прошла.
ЛОГ:

менять права на папку я не собираюсь, папка /var/www/site должна остаться за site.

Простой 2 комментария

Менять права на директорию и не надо. Просто добавьте этого пользователя в группу site. Hanneman, спасибо за ответ. так добавила, не катит. То же самое.

Вот небольшая инфа

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

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

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

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

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

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

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

Subsystem sftp /usr/lib/openssh/sftp-server
и меняем на

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


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

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

PasswordAuthentication yes
Если на сервере установлен метод авторизации по паролю, а есть желание сделать более надежную авторизацию через файл ключа, то можно воспользоваться данной статьей.
После завершения всех манипуляций с SSH сервером, его нужно перезагрузить:

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

chown root:root /home/crazyadmin/chroot
Устанавливаем нужные права на папку:

chmod 755 /home/crazyadmin
Внимание! Ни в коем случае не следует выставлять ChrootDirectory какие-либо другие права, в таком случае будет выскакивать следующая ошибка: fatal: bad ownership or modes for chroot directory component.
Теперь представим, что нам нужно предоставить доступ к нескольким папкам, и они все лежат за пределами ChrootDirectory. Выход из ситуации следующий:


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

Частые ошибки
- как писалось выше, данная ошибка появляется тогда, когда владельцем ChrootDirectory является не пользователь root, и права не равны 755.
- сервер настроен на авторизацию по ключу. Если нужна авторизация по паролю, то в конфиге /etc/ssh/sshd_config нужно поменять значение у переменной PasswordAuthentication с no на yes, а после перезапустить сервер командой service ssh restart.

SFTP доступен по умолчанию без дополнительной настройки на всех серверах, имеющих доступ по SSH. Как следует из названия протокола, это безопасный способ передачи файлов на сервер с использованием зашифрованного SSH-соединения. В стандартной конфигурации сервер SSH предоставляет доступ к передаче файлов и к оболочке терминала всем системным пользователям с учетной записью.

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

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

Итак, создаем нового пользователя, основную группу и задаем пароль:

Создание каталога

Чтобы ограничить доступ пользователя к SFTP одним каталогом, сначала нужно убедиться, что каталог соответствует требованиям. Сам каталог и все каталоги над ним в дереве файловой системы должны принадлежать root , а другие пользователи не должны иметь права на запись в них. Следовательно, невозможно просто предоставить ограниченный доступ к домашнему каталогу пользователя, поскольку домашние каталоги принадлежат пользователям, а не root .

В качестве целевого каталога загрузки будем использовать /srv/sftp/sftp-user . Каталог /srv/sftp будет принадлежать пользователю root и заблокирован для других пользователей. Подкаталог /srv/sftp/sftp-user будет принадлежать пользователю sftp-user , так что он сможет загружать в него файлы.

Конфигурация ssh-сервера

На этом этапе нужно изменить конфигурацию ssh-сервера и заблокировать пользователю sftp-user доступ к терминалу, но разрешить доступ к передаче файлов. Открываем на редактирование файл конфигурации ssh-сервера и дописываем в конец

С функциональной точки зрения sftp-server и internal-sftp практически идентичны. Они построены из одного и того же исходного кода и реализуют SFTP-сервер. Sftp-server это отдельный бинарный файл, а internal-sftp это просто ключевое слово конфигурации. При указании internal-sftp будет использован встроенный SFTP-сервер, вместо запуска внешнего SFTP-сервера. В настоящее время sftp-server является избыточным и сохраняется для обратной совместимости.

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

Пользователь sftp-user не может подключиться по ssh и получить доступ к терминалу:

Но пользователь sftp-user может использовать SFTP для передачи файлов:

Основные команды SFTP

Оказавшись в командной строке sftp можно получить список доступных команд с помощью команды help

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