LINUX.ORG.RU
ФорумAdmin

Как создать пользователя vsftpd и дать ему доступ к /var/www?

 , ,


0

3

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

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

У меня Ubuntu 20 и apache.

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

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

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

А если заменить во всех командах в путях «ftp» на «www»?

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

KivApple ★★★★★ ()
Последнее исправление: KivApple (всего исправлений: 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

============

После этого только члены группы dostupwww (существовавший ранее твой-пользователь1 и только созданный твой-пользователь2) смогут читать, записывать или выполнять что-либо в каталоге /var/www.

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

Kinlipan ()
Последнее исправление: Kinlipan (всего исправлений: 6 )
Ответ на: комментарий от Kinlipan

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

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

nastya97core ()
Ответ на: комментарий от nastya97core

====== Добавить в конец конфигурационного файла /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 ()
Последнее исправление: Kinlipan (всего исправлений: 10 )
Ответ на: комментарий от nastya97core

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

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

Kinlipan ()
Ответ на: комментарий от Kinlipan

спасибо, но вот у меня небольшое недопонимание. Зачем мы делаем ярлык на папку? Почему сразу не писать адрес папки? Я же правильно понимаю команду ln -s? Это типа аналога «создать ярлык» в Windows? Опять же, где-то (http://trofimovdigital.ru/blog/how-add-sftp-user-to-bitrixvm) говорят нужно делать mount. Это тоже самое что и ln -s?

Ну и последнее. Мне тут говорят, что vsftpd - в топку, потому что по дефолту в ubuntu есть sftp. И действительно, я взяла твои команды в первом посте, прописала и смогла подключиться. Только вот пользователь имеет доступ ко всему, куда ему не надо. Мы можем без vsftpd ограничить доступ к каталогам выше определённого? К примеру хочу иметь 2 группы, одна может только в /var/www/mysite.com и выше ничего видеть не будет, а вторая будет видеть только /var/www/othersite.com. Без ссылок ls и mount это возможно?

nastya97core ()
Ответ на: комментарий от nastya97core

Зачем мы делаем ярлык на папку?

Символьная ссылка на /var/www нужна для того, чтобы — при подключении пользователя к FTP-серверу — он сразу видел символьную ссылку www и и смог получить доступ к реальному /var/www. Мы ведь создали локальный ограничительный путь /var/www в домашнем каталоге каждого пользователя группы dostupwww (например, /home/nastya97core/var/www). Каталог www в ограничительном пути — тот каталог, за пределы которого (выше) пользователь не сможет выйти. Он называется chroot jail directory.

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

У ограничительного каталога не должно быть владельца (мы добились этого такой командой: sudo chown nobody:nogroup /home/nastya97core/var/www) и должны быть особые права (мы их установили командой sudo chmod a-w /home/nastya97core/var/www), поэтому нельзя в качестве chroot jail directoty использовать домашний каталог пользователя или реальный /var/www.

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

Я же правильно понимаю команду ln -s? Это типа аналога «создать ярлык» в Windows?

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

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

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

Kinlipan ()
Последнее исправление: Kinlipan (всего исправлений: 14 )
Ответ на: комментарий от nastya97core

mount. Это тоже самое что и ln -s?

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

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

Монтирование — процесс подключения (предоставления доступа) корневой файловой системы операционной системы к файловой системе диска (накопителя) или ее части (например, каталога). Таким образом, монтирование напоминает определение носителей в стандартном системном расположении проводника Windows «Этот компьютер» (как с включенным автозапуском, так и с отключенным), но гораздо более контролируемое и гибкое.

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

Kinlipan ()
Последнее исправление: Kinlipan (всего исправлений: 6 )
Ответ на: комментарий от nastya97core

Мне тут говорят, что vsftpd - в топку, потому что по дефолту в ubuntu есть sftp

Дело говорят.

без vsftpd можно это сделать?

Можно, возможность есть.

пользователь имеет доступ ко всему, куда ему не надо

По умолчанию sFTP-пользователю разрешено просматривать всю структуру файловой системы. Это можно отключить, установив запрет выхода из специально назначенного ограничительного каталога (chroot jail directory).

хочу иметь 2 группы, одна может только в /var/www/mysite.com и выше ничего видеть не будет
вторая будет видеть только /var/www/othersite.com

Без ссылок ls и mount это возможно?

Возможно.

В следующем комментарии подробно рассмотрим процесс реализации упомянутой возможности (mysite и myothersite при рассмотрении будут группами, а user1 и user2 — пользователями).

Kinlipan ()
Последнее исправление: Kinlipan (всего исправлений: 4 )
Ответ на: комментарий от nastya97core

## Создаем и добавляем определенных пользователей в группы пользователей

# Создать группы можно так:

sudo groupadd mysite

sudo groupadd myothersite

# Добавить имеющихся пользователей в нужные группы можно так:

sudo usermod -g mysite user1

sudo usermod -g myothersite user2

------------------------------------------------------------------------------------------------------------------

## Выдаем групповой доступ на общий ограничительный каталог для пользователей определенной группы (например, на /var/www/mysite.com и /var/www/myothersite.com)

sudo chown nobody:mysite /var/www/mysite.com

sudo chown nobody:myothersite /var/www/myothersite.com

sudo chmod -R 770 /var/www/mysite.com

sudo chmod -R 770 /var/www/myothersite.com

------------------------------------------------------------------------------------------------------------------

## Делаем полученные общие ограничительные каталоги домашними каталогами каждого из пользователей определенной группы

sudo nano /etc/passwd

(в файле /etc/passwd необходимо изменить столбец домашнего каталога для нужных пользователей на /var/www/mysite.com или /var/www/myothersite.com)

## Необходимо внести некоторые изменения в конфигурационный файл /etc/sshd_config

sudo nano /etc/sshd_config

В вышеуказанном конфигурационном файле следует заменить строку Subsystem sftp /usr/libexec/openssh/sftp-server на Subsystem internal-sftp, и под полученной (в результате изменения) новой строкой добавить следующее:

   Match Group mysite
   ChrootDirectory /var/www/mysite.com
   ForceCommand internal-sftp -u 0007
   X11Forwarding no
   AllowTcpForwarding no

   Match Group myothersite
   ChrootDirectory /var/www/myothersite.com
   ForceCommand internal-sftp -u 0007
   X11Forwarding no
   AllowTcpForwarding no

## Назначаем для групп mysite и myothersite политику загрузки файлов по sFTP с правами 770 (чтение, выполнение и запись)

sudo /etc/pam.d/common-session

(нужно включить pam_umask, добавив в /etc/pam.d/common-session следующую строку в самый конец файла):

session optional pam_umask.so

(если упомянутая строка еще не содержится в вышеуказанном файле).

# Редактируем файл /etc/login.defs:

sudo nano /etc/login.defs (в нем изменить строку с UMASK на UMASK 007)

------------------------------------------------------------------------------------------------------------------

## Перезапускаем сервис sshd

sudo systemctl restart sshd

Kinlipan ()
Последнее исправление: Kinlipan (всего исправлений: 9 )

Тебе поможет фтп-сервер sftpgo https://github.com/drakkan/sftpgo . В портативном режиме вешаешь его на localhost. А потом получаешь доступ к порту (который открыт на localhost) через тунель (проброс порта) в ssh.

netwish ()
Ответ на: комментарий от nastya97core

Я же правильно понимаю команду ln -s? Это типа аналога «создать ярлык» в Windows?

Нет, это аналог mklink в Windows

anc ★★★★★ ()
Ответ на: комментарий от Kinlipan

Монтирование — процесс подключения (предоставления доступа) корневой файловой системы операционной системы к файловой системе диска (накопителя) или ее части (например, каталога)

Вы ничего не попутали?

anc ★★★★★ ()
Ответ на: комментарий от Kinlipan

У ограничительного каталога не должно быть владельца

Щито?

(мы добились этого такой командой: sudo chown nobody:nogroup /home/nastya97core/var/www)

Вы изменили владельца и группу на пользователя nobody и группу nogroup.

anc ★★★★★ ()
Ответ на: комментарий от Kinlipan

sudo usermod -g mysite user1

...

в файле /etc/passwd необходимо изменить столбец домашнего каталога для нужных пользователей на /var/www/mysite.com или /var/www/myothersite.com

Так и запишем, Kinlipan - мартышка копипаста.

anc ★★★★★ ()
Ответ на: комментарий от anc

Щито?

Для chroot jail directory лучше задать nobody и nogroup, а также запретить запись в данный каталог.

Вы изменили владельца и группу на пользователя nobody и группу nogroup

nobody не является владельцем ни одного файла.

Kinlipan ()
Ответ на: комментарий от anc

...

???

Так и запишем, anc - мартышка копипаста.

Что при беглом поиске нашлось про anc: 1, 2, 3.

Так и запишем, anc — странный, флудер, хам.

Kinlipan ()
Последнее исправление: Kinlipan (всего исправлений: 2 )
Ответ на: комментарий от Kinlipan

Для chroot jail directory лучше задать nobody и nogroup, а также запретить запись в данный каталог.

Лучше чем?

nobody не является владельцем ни одного файла.

О! А вы случайно ещё в предсказании будущего не сильны?

anc ★★★★★ ()
Ответ на: комментарий от Kinlipan
  1. Вы пропустили ssh на пути к /etc/ssh/sshd_config

  2. Не совсем поняла команду sudo /etc/pam.d/common-session. Если имелось ввиду sudo nano для редактирования, то pam_umask там был.

  3. У меня указан не Subsystem sftp /usr/libexec/openssh/sftp-server а Subsystem sftp /usr/lib/openssh/sftp-server.

  4. Вы уверены, что нужно указывать Subsystem internal-sftp, а не Subsystem sftp internal-sftp? Если указать ваш вариант, то будет ошибка и systemctl restart sshd не произойдёт.

  5. в Match Group mysite указано 0007, а в UMASK 007? Это верно или ошибка? В любом случае я попробовала оба варианта и 007 в обоих и 0007 в обоих. Ничего не дало.

На данный момент при подключении пользователя user1 или user2 возникает ошибка FATAL ERROR: Network error: Software caused connection abort. root по прежнему подключиться может.

p.s. не обижайтесь на мои исправления. Думаю, я не одна, кому ваши записи будут нужны, поэтому лучше сразу исправить :-)

nastya97core ()
Ответ на: комментарий от nastya97core

так, смотри, кинлипан похоже сам разбирается хреново и сфтп настраивать не умеет.

дело в том, что на чрут директорию надо ставить права root.

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

anonymous ()
Ответ на: комментарий от Kinlipan
  • пользователь теряет возможность подключиться после того, как я записываю его в группу.

FATAL ERROR: Network error: Software caused connection abort

nastya97core ()
Ответ на: комментарий от anonymous

Я не знаю, как разбирается Kinlipan, но до последнего времени всё, что он писал - работало. И он единственный, который пишет понятным языком. Вы же все толпой: чрут надо рут, дампи по центру, раш на б и них не понятно.

nastya97core ()
Ответ на: комментарий от nastya97core

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

Твои вопросы там разжеваны и переварены. Возьми 2-3 статьи по твоим запросам, почитай их - и все получится.

gruy ★★★★★ ()
Ответ на: комментарий от Kinlipan

nobody не является владельцем ни одного файла.

Серьезно? nobody - это такой же пользователь как и другие, он вполне может быть владельцем каких-нибудь файлов.

Pinkbyte ★★★★★ ()
Ответ на: комментарий от nastya97core

создать нового пользователя, у которого будет доступ к папке /var/www

На прошлой неделе как раз пришлось вспоминать как настроить vsftpd, чтобы разработчики сайта для компании залили и настроили Wordpress:

chroot_local_user=YES                                                                                                                                           
allow_writeable_chroot=YES

Выше /var/www/сайт ходить не могут.

Мне даже лучше, если пользователь будет иметь доступ ко всему серверу, чтобы проще было конфиги редактировать.

А вот это плохая практика, тем более что при правке конфигов нужно обычно перезапускать сервисы. Для этого SSH существует.

gruy ★★★★★ ()
Ответ на: комментарий от nastya97core

Что именно возможно? Уточни задачу, а то здесь уже слишком много понаписали, чтобы понять что нужно.

gruy ★★★★★ ()
Ответ на: комментарий от gruy

я хочу иметь две группы пользователей. Одни имеют доступ только к /var/www/mysite.com, а вторые к /var/www/myothersite.com. Они там могут делать всё (добавлять, удалять, редактировать и т.п.), но выше этого каталога подняться не могут. Даже на «просто посмотреть» у них доступа нет.

Доступ ко всему каталогу будет иметь только root - собственно он сейчас его и имеет.

nastya97core ()
Ответ на: комментарий от anc

Лучше чем?

Безопасностью.

О! А вы случайно ещё в предсказании будущего не сильны?

Нет. Гадание — не по моей, а по вашей части, учитывая ваши сообщения в данной теме форума.

Kinlipan ()
Ответ на: комментарий от nastya97core

Вы пропустили ssh на пути к /etc/ssh/sshd_config

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

Не совсем поняла команду sudo /etc/pam.d/common-session

Я пропустил nano.

pam_umask там был

Да, так и должно было быть, учитывая что у вас Ubuntu.

У меня указан не Subsystem sftp /usr/libexec/openssh/sftp-server а Subsystem sftp /usr/lib/openssh/sftp-server

Зависит от дистрибутива, из которого установлена система Linux. В любом случае строку по умолчанию следует заменить на мою (с вашей поправкой).

Вы уверены, что нужно указывать Subsystem internal-sftp, а не Subsystem sftp internal-sftp?

Уверен, что не нужно. Снова моя ошибка.

в Match Group mysite указано 0007, а в UMASK 007? Это верно или ошибка?

Это я написал правильно. Хоть что-то без ошибки :-)

возникает ошибка FATAL ERROR: Network error: Software caused connection abort

Надо бы в логи глянуть. Тут либо права на ограничительный каталог не подъодят, либо что-то с Subsystem internal-sftp в /etc/ssh/sshd_config.

p.s. не обижайтесь на мои исправления

А есть причина? Я наоборот вам благодарен за поправки. Мне потом меньше проблем будет при подготовке статей для публикации на моем сайте.

Kinlipan ()
Ответ на: комментарий от Pinkbyte

он вполне может быть владельцем каких-нибудь файлов

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

Kinlipan ()
Ответ на: комментарий от gruy

Потому что он просто копирует сюда готовые статьи из сети

Вы тоже любите гадать? Экстрасенсов-то сколько развелось.

Kinlipan ()
Ответ на: комментарий от anonymous

кинлипан похоже сам разбирается хреново и сфтп настраивать не умеет

Настолько не разбираюсь, что единственный кто помогает, причем объясняю все очень простым и понятным новичку языком, а не просто пишу «кури маны, настраивай чрут»?

дело в том, что на чрут директорию надо ставить права root.

Что еще за «права root»? 644? Это же стандартные права. Или у тебя Android головного мозга? Не «права root», а root назначить владельцем. Группы mysite и myothersite не просто так создавались, а права 770 не просто так устанавливались.

нахрена он тебя уболтал менять юзерам их хоум-директории

А ничего, что тема создана про vsftpd? Вот там обязательно надо было переназначать каталог home на тот, что нужен как chroot jail directory. Невозможно держать все детали топик-стартера по теме в голове, при этом все точно и правильно сразу написать, не вникая в конкретный кейс. Предложено было несколько вариантов (причем изначально для vsftpd вообще). Очевидно, что запутаться легко можно.

Kinlipan ()
Последнее исправление: Kinlipan (всего исправлений: 4 )
Ответ на: комментарий от Kinlipan

vsftpd сможет обеспечить защиту домашнего chroot-каталога.

А если владелец.группа будет не nobody.nogroup а myuser.mygroup уже не сможет?

anc ★★★★★ ()
Ответ на: комментарий от anc

myuser.mygroup уже не сможет?

Почему? Сможет.

Владельцем не должен быть только пользователь (-и) chroot-каталога и root. Еще права записи в каталог не должно быть.

Kinlipan ()
Ответ на: комментарий от Kinlipan

Владельцем не должен быть только пользователь (-и) chroot-каталога и root

Уверенны что это всё?
Вот вам загадка:

root@deb10:~# who
test     pts/1        2021-08-12 03:12 (172.19.0.1)

anc ★★★★★ ()
Ответ на: комментарий от nastya97core

вот у меня есть подозрение, что вот это действие:

Назначаем для групп mysite и myothersite политику загрузки файлов по sFTP с правами 770 (чтение, выполнение и запись)

и вот это: (нужно включить pam_umask, добавив в /etc/pam.d/common-session следующую строку в самый конец файла):

Это разные вещи. И 770 я никому не выдавала…

nastya97core ()
Ответ на: комментарий от Kinlipan

Уточните вопрос.

Вы пишите:

Владельцем не должен быть только пользователь (-и) chroot-каталога и root

Я вам привожу пример пользователя test и собстно задаю вопрос «Уверенны что это всё?»

anc ★★★★★ ()
Ответ на: комментарий от nastya97core

https://telegra.ph/log-08-12

Aug 12 11:07:31 ruvds-q5cdv sshd[831]: fatal: bad ownership or modes for chroot directory «/var/www/mysite.com»

Я сразу и написал про то, что права на ограничительный каталог, скорее всего, не подходят.

Это разные вещи

Так и есть.

И 770 я никому не выдавала

Надо было. Команду я давал выше.

Kinlipan ()
Ответ на: комментарий от Kinlipan

Я делала всё в той хронологии, что у вас указано в записи. chmod -R 770 /var/www/mysite.com это делалось. После правки sshd_config нужно снова выдать 770? Я сделала. не помогло.

Давайте сначала:

useradd user4
passwd user4 -> ввожу пароль в 2 этапа
mkdir /var/www/mysite2.com
groupadd mysite2
usermod -g mysite2 user4
chown nobody:mysite2 /var/www/mysite2.com
chmod -R 770 /var/www/mysite2.com
nano /etc/passwd -> меняю здесь домашнюю на /var/www/mysite2.com

nano /etc/ssh/sshd_config -> меняю Subststem и дописываю

Subsystem sftp internal-sftp
Match Group mysite2
ChrootDirectory /var/www/mysite2.com
ForceCommand internal-sftp -u 0007
X11Forwarding no
AllowTcpForwarding no
nano /etc/login.defs -> меняю 022 на UMASK 007

Делаю systemctl restart sshd

Подключаюсь через filezilla. ошибка FATAL ERROR: Network error: Software caused connection abort

лог: https://telegra.ph/log-08-12-2

Что я упустила?

nastya97core ()
Ответ на: комментарий от nastya97core

Я вот читаю параллельно https://wiki.dieg.info/sftp и там почему-то в начале они создают группу sftpusers, и зачем-то потом юзера добавляют в группу www-data. Нафига sftpusers нужен был - непонятно.

nastya97core ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.